栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

模拟springboot的autoconfigure.condition

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

模拟springboot的autoconfigure.condition

说明:模拟一个类存在,这让spring添加user对象的自定义的注解

1、定义从condition的成立条件ClassCondition注解
public class ClassCondition implements Condition {
    
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypemetadata metadata) {

        //需求: 导入通过注解属性值value指定坐标后创建Bean
        //获取注解属性值  value
        Map map = metadata.getAnnotationAttributes(ConditionOnClass.class.getName());
        System.out.println(map);
        String[] value = (String[]) map.get("value");

        boolean flag = true;
        try {
            for (String className : value) {
                Class cls = Class.forName(className);
            }
        } catch (ClassNotFoundException e) {
            flag = false;
        }
        return flag;

    }
}
2、ConditionOnClass定义信息传递注解类
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@documented
@Conditional(ClassCondition.class)
public @interface ConditionOnClass {
    String[] value();
}
3、定义userconfig
@Configuration
public class UserConfig {

    @Bean
    @ConditionOnClass("com.zhonglv.mycodition.domain.uesrOn")
    public User user(){
        return new User();
    }
4、测试实现类

从第三步我们可以看出来  只要com.zhonglv.mycodition.domain.uesrOn这个类存在,则springIoc帮我们创建user对象

@SpringBootApplication
public class MycoditionApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(MycoditionApplication.class, args);
        Object bean = run.getBean("user");
        System.out.println(bean);

    }

}

5、代码

mycodition · zhonglv/springboot - 码云 - 开源中国 (gitee.com)

6、和其他的控制类注入的注解对比
//    @Bean
//    @ConditionalOnProperty(name = "zhonglv",havingValue = "yz")
//    public User user2(){
//        return new User();
//    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/735593.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号