配置类里使用@Bean标注在方法上给容器注册组件,默认是单实例的,称为Full模式,也就是说,返回的组件永远相同。
@SpringBootApplication public class MainApplication { public static void main(String[] args) { //1.返回IOC容器 ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); //2.查看容器里面的组件 String[] names = run.getBeanDefinitionNames(); for (String name : names) { System.out.println(name); } //3.从容器中获取组件(通过name) Pet tom01 = run.getBean("tom",Pet.class); Pet tom02 = run.getBean("tom",Pet.class); System.out.println(tom01==tom02); //true,因为组件是单实例的 // 从容器中获取组件(通过配置类) MyConfig beans = run.getBean(MyConfig.class); User user = beans.user01(); User user01 = beans.user01(); System.out.println(user==user01); //true } }
但是组件是否为单实例可以通过 proxyBeanMethods方法修改
@Configuration(proxyBeanMethods = false)//这样就是多实例了,称为lite模式
一般有组件依赖的时候,我们使用Full模式。