欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

模拟springboot的autoconfigure.condition

时间:2023-06-18

说明:模拟一个类存在,这让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

@Configurationpublic class UserConfig { @Bean @ConditionOnClass("com.zhonglv.mycodition.domain.uesrOn") public User user(){ return new User(); }

4、测试实现类

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

@SpringBootApplicationpublic 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();// }

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。