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);
}
}