配置類里使用@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模式。