@Enable注解原理(视频09)
4个
使用@import()将Javabean导入Spring容器中
@SpringBootApplication
@ComponentScan
@Async//异步处理。bean 类之上
//@EnableAsync使异步处理生效
//@Import({User.class,Role.class,MyConfiguration.class})//可以导入一个类,或者多个类
@Import({MyImportSelector.class})//使用importSelector的实现类进行设置,引入实现类对bean进行装配
importSelector的返回值必须是一个类的全程,该类会被Spring容器所托管
public class App {
public static void main(String[] args) {
ConfigurableApplicationContext context=SpringApplication.run(App.class, args);
System.out.println(context.getBean(User.class));
System.out.println(context.getBean(Role.class));
//System.out.println(context.getBeansOfType(Runnable.class));
context.close();
}
}
public class MyImportSelector implements ImportSelector{
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
// TODO Auto-generated method stub
return new String[] {
"com.lsq.springboot.User",
"com.lsq.springboot.Role"
};
}
}
可以通过importSelector的实现类,拿到注解的值,对拿到的值进行处理
两个需要注意的接口
ImportSelector //自动转入 ImportBeanDefinitionRegistrar//手动自己注入
public class MyImportSelector implements ImportSelector{
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
System.out.println(importingClassMetadata.getAnnotationAttributes(EnableLog.class.getName())
+"真的好无语");
return new String[] {
"com.lsq.springboot.User",
"com.lsq.springboot.Role"
};
}
}
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
BeanDefinitionBuilder bdb=BeanDefinitionBuilder.rootBeanDefinition(User.class);
BeanDefinition beanDefinition = bdb.getBeanDefinition();
registry.registerBeanDefinition("user", beanDefinition);
BeanDefinitionBuilder bdb2= BeanDefinitionBuilder.rootBeanDefinition(Role.class);
registry.registerBeanDefinition("role", bdb2.getBeanDefinition());
BeanDefinitionBuilder bdb3= BeanDefinitionBuilder.rootBeanDefinition(MyConfiguration.class);
registry.registerBeanDefinition(MyConfiguration.class.getName(), bdb3.getBeanDefinition());
}
}