________________初学springboot8

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

}

 

}

 

posted @ 2018-07-23 13:00  637  阅读(87)  评论(0编辑  收藏  举报