@Configuration
public class MyConfiguration {
@Bean
public User user01(){
return new User("李四",18,"男");
}}
是一个配置类的代码,@Configuration表示在主程序启动的时候,将其中的@Bean加载到容器中(默认单例模式),此外配置类本身也是会加载到其中的。User组件的内容,方法名就是组件的id,返回类型是组件的类型,返回的值就是组件在容器中的类。
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
String[] names = run.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
MyConfiguration bean = run.getBean(MyConfiguration.class);
System.out.println(bean);
在主程序中写出以上代码,可以看到User组件和Configuration组件。
然而,在springboot2.X版本中@Configuration注解里面多了一个@proxyBeanMethod
这个默认是true,这个值表示Full模式。
@Configuration(proxyBeanMethods =false)
设置为false就表示lite模式。
他们的区别就是:
lite:Configuration中的组件互相调用的时候不会去检查是否已经存在。
Full:Configuration中的组件互相调用的时候会先检查一遍该组件是否存在,如果存在,那么就会直接调用已经存在的组件。
例子:
现在是false的状态,我们取出pet组件,再用MyConfiguration做出一个pet组件,发现他们不是同一个。
说明这种模式下,Myconfiguration会自己创建新的组件。
在Full模式下:
@Configuration(proxyBeanMethods =true)
发现两个竟然是同一个组件,原因是因为,在proxyBeanMethod设置为true的情况下,在MyConfiguration调用方法的时候,会先检验一遍,该组件是否存在,如果存在,那么就会直接指向该组件。这就叫组件依赖。在full模式下,会进行检查,而lite不会,所以,full模式运行更加快捷。
本人现在还是菜鸟,如果有错误请前辈指正。