• 使用Spring基础组件导入、注册bean实例


    向IOC容器中注入bean的方式

    @Import:是导入组件的一种注解,是选择性的注入。

    • @Bean 注解
    1. @Configuration
    2. public class MainConfig {
    3. // @Bean 注解默认可以不指定bean的名称,IOC实例化后的实例名称就是这个方法名
    4. @Bean("person")
    5. // @Bean
    6. public Person person() {
    7. return new Person("老大", "30");
    8. }
    9. }
    • @Import 注解 导入
    1. @Configuration
    2. //@Import(Dog.class)
    3. @Import({Dog.class, Cat.class})
    4. public class MainConfig {
    5. @Bean("person")
    6. public Person person() {
    7. return new Person("小二", "28");
    8. }
    9. }
    • @Import 注解 + ImportSelector 
    1. public class TestImportSelector implements ImportSelector {
    2. @Override
    3. public String[] selectImports(AnnotationMetadata annotationMetadata) {
    4. // 方法不要返回null
    5. return new String[]{"org.xiaobuisme.example.cap6.Fish", "org.xiaobuisme.example.cap6.Tiger"};
    6. }
    7. }
    1. @Configuration
    2. //@Import(Dog.class)
    3. //@Import({Dog.class, Cat.class})
    4. @Import({Dog.class, Cat.class, TestImportSelector.class})
    5. public class MainConfig {
    6. @Bean("person")
    7. public Person person() {
    8. return new Person("老3", "20");
    9. }
    10. }
    • @Import + ImportBeanDefinitionRegistrar
    1. /**
    2. * ImportBeanDefinitionRegistrar:
    3. */
    4. public class TestImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    5. /**
    6. * containsBeanDefinition(): 是否存在某个类的定义
    7. * registerBeanDefinition(): 注册实例bean
    8. *
    9. * @param annotationMetadata 注解类信息
    10. * @param registry bean注册器
    11. */
    12. @Override
    13. public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry registry) {
    14. boolean beanDefinition1 = registry.containsBeanDefinition("org.xiaobuisme.example.cap6.Dog");
    15. boolean beanDefinition2 = registry.containsBeanDefinition("org.xiaobuisme.example.cap6.Cat");
    16. if (beanDefinition1 && beanDefinition2) {
    17. RootBeanDefinition beanDefinition = new RootBeanDefinition(Pig.class);
    18. registry.registerBeanDefinition("pig", beanDefinition);
    19. }
    20. }
    21. }
    1. @Configuration
    2. //@Import(Dog.class)
    3. //@Import({Dog.class, Cat.class})
    4. @Import({Dog.class, Cat.class, TestImportSelector.class, TestImportBeanDefinitionRegistrar.class})
    5. public class MainConfig {
    6. @Bean("person")
    7. public Person person() {
    8. return new Person("小4", "20");
    9. }
    10. }
    验证 以上方式是否可以成功注入实例bean
    1. import org.springframework.context.ApplicationContext;
    2. import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    3. import org.xiaobuisme.example.cap6.MainConfig;
    4. import org.xiaobuisme.example.cap6.Fish;
    5. import org.xiaobuisme.example.cap6.Pig;
    6. public class Test {
    7. public static void main(String[] args) {
    8. ApplicationContext anno = new AnnotationConfigApplicationContext(MainConfig.class);
    9. String[] beanNames = anno.getBeanDefinitionNames();
    10. for (String beanName : beanNames) {
    11. System.out.println(beanName);
    12. }
    13. // 验证通过导入组件工具TestImportSelector导入的类实例是否存在
    14. Fish fish = anno.getBean(Fish.class);
    15. System.out.println(fish);
    16. // 验证通过ImportBeanDefinitionRegistrar 工具导入的类实例是否导入成功
    17. Pig pig = anno.getBean(Pig.class);
    18. System.out.println(pig);
    19. }
    20. }

  • 相关阅读:
    水文科技新仪器——地埋式积水探测器
    Android 11适配
    【宏实现二进制奇偶位交换】
    【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter25-井井有条
    JAVA电子病历系统计算机毕业设计Mybatis+系统+数据库+调试部署
    uniapp 冒泡
    HuTool工具类 CollUtil 实现多个集合的交集、差集
    java word文档 转 html文件
    Emlog后台登录模板分享下载
    三、react组件的生命周期
  • 原文地址:https://blog.csdn.net/u011672034/article/details/132739373