这个是导入原先spring加载bean的配置文件,现在有这样一个spring的xml文件,如下:
现在打印一下spring容器中是否包含这两个bean
package com.mxx.boot;
import com.mxx.boot.bean.User;
import com.mxx.boot.configure.MxxConfigure;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
/**
* @Author mxx
* @Date 2024/10/14 10:57
* @Version 1.0
*/
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run= SpringApplication.run(DemoApplication.class, args);
String[] names = run.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
Boolean flag= run.containsBean("user02");
Boolean flag2= run.containsBean("pet02");
System.out.println(flag);
System.out.println(flag2);
}
}
结果如下:
如果使用@ImportResource注解,如下:
package com.mxx.boot.configure;
import com.mxx.boot.bean.Pet;
import com.mxx.boot.bean.User;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
/**
* @Author mxx
* @Date 2024/10/14 16:17
* @Version 1.0
* 1、配置类里面使用@Bean标注在方法上给容器注册一个bean,默认是单实例的
* 2、配置类本身也是组件
* 3、proxyBeanMethods:代理bean的方法
* full:每个bean调用方法都去创建新的对象。
* light:如果组件调用方法,springboot只会调用一次,如果再调用,直接从容器中拿,不会重新创建新的对象。
* 4、@Import({User.class, DBHelper.class})
* 给容器中自动创建出这两个类型的组件、默认组件的名字就是全类名
* 5、@ImportResource("classpath:beans.xml")导入spring的配置文件
*/
@Configuration// 告诉springboot这是一个配置类=配置文件
@ImportResource("classpath:beans.xml")
public class MxxConfigure {
// @Bean(name="tom")
public Pet pet(){
return new Pet("tomcat");
}
/**
* 外部无论对配置类中的组件注册方法调用多少次,springboot总会调用一次配置类中配置方法,给容器中注册组件
* @return
*/
@ConditionalOnBean(name="tom")
@Bean //给容器添加一个组件,以方法名作为组件的id,返回类型是组件类型。返回的值是bean实例
public User user01(){
return new User("mxx", 18);
}
}
再次运行结果如下: