文章目录
1.SpringBoot 原理分析
1.1 SpringBoot自动装配
1.1.1 Condition
public class ClassCondition implements Condition {
/**
*
* @param conditionContext 上下文对象 用于获取环境 IOC容器 ClassLoader对象
* @param annotatedTypeMetadata 注解元对象 可以用于获取注解定义的属性值
* @return
*/
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
//1.需求:导入Jedi坐标后创建Bean
//思路:判断redis.client.jedis.Jedis.class文件是否存在
// boolean flag=true;
// try {
// Class<?> cls = Class.forName ("redis.clients.jedis.Jedis");
// } catch (ClassNotFoundException e) {
// flag=false;
// }
//
// return flag;
//需求:导入通过注解属性值value指定坐标后创建Bean
//获取注解属性值 value
Map<String, Object> map = annotatedTypeMetadata.getAnnotationAttributes (ConditionOnClass.class.getName ());
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;
}
}
@Target({
ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)//注解生效的时机
@Documented
@Conditional (ClassCondition.class)
public @interface ConditionOnClass {
String[]value();
}
@Configuration
public class UserConfig {
@Bean
// @Conditional (ClassCondition.class)
//@ConditionOnClass("redis.clients.jedis.Jedis")
public User user() {
return new User ();
}
@Bean
@ConditionalOnProperty(name =