7.@ImportResource导入原生配置文件

如何引入定义的原生xml文件呢:
在任意的组件标签标注的类上加上@ImportResource标签指定xml文件的路径:

例如:
    @Import({Person.class,Dog.class})
    //指定引入的配置文件类路径
    @ImportResource("classpath:bean.xml")
    @Configuration
    public class MyConfiguration {
        @Bean
        public Person getperson(){
            return new Person("吴孟达",18);
        }
        @Bean
        public Dog getDog(){
            return new Dog("刘丹",19);
        }
    }
此时测试:
    //输出为true
    System.out.println(run.containsBean("person"));
    
但是这里需要注意的是:
     @ImportResource("classpath:bean.xml")标签和@ConditionalOnBean标签的配合使用
     例子如下:
        //向容器中导入Person和Dog组件:name=包名.类名
        @Import({Person.class,Dog.class})
        //导入外部的xml文件
        @ImportResource("classpath:bean.xml")
        //标注当前类是配置类
        @Configuration
        //当容器中有cn.com.entity.Person的组件时,执行类下面所有的方法,但是此时容器中并没有该组件,所以类方法不执行,类上注解也不执行,xml文件没导入
        @ConditionalOnBean(name = "cn.com.entity.Person")
        public class MyConfiguration {
            @Bean
            public Person getperson(){
                return new Person("吴孟达",18);
            }
            @Bean
            public Dog getDog(){
                return new Dog("刘丹",19);
            }
        }
        测试:输出为false
            System.out.println(run.containsBean("person"));

但是若在次基础上改造下:
    @Import({Person.class, Dog.class})
    @ImportResource("classpath:bean.xml")
    @Configuration
    public class MyConfiguration {
        //将该标签放置在方法上:表示当容器中有这个组件时,执行标注的方法
        //解析:因为此时已经执行了@import标签,容器中已经有了cn.com.entity.Person标签,并且import标签已经执行成功
        //已经将xml文件中的组件注册到容器中了
        @ConditionalOnBean(name = "cn.com.entity.Person")
        @Bean
        public Person getperson() {
            return new Person("吴孟达", 18);
        }
    
        @Bean
        public Dog getDog() {
            return new Dog("刘丹", 19);
        }
    }

 

posted @ 2022-05-11 21:30  努力的达子  阅读(543)  评论(0编辑  收藏  举报