springbootconfiguration相当于哪些注解,springboot配置类注解

  springbootconfiguration相当于哪些注解,springboot配置类注解

  00-1010 1.@配置注释2。@bean注释3。单一实例4。配置类也是容器5的一个组件。直接调用配置类中的person1()方法6。Proxybeanmethods 3354代理bean方法。

  00-1010用法:作用于类动作:告诉SpringBoot这是一个配置类,相当于Spring中的xml配置文件。

  @Configuration //告诉SpringBoot这是一个配置class==配置文件公共类Config {}

  00-1010用法:配置类使用@Bean标签为方法中的IoC容器注册组件。默认也是单实例的功能:在容器中添加组件相当于Spring中xml配置文件中的bean label。理解:将方法名作为组件的id。返回的类型是组件类型。返回值是容器中组件的实例。

  @Configuration //告诉SpringBoot这是一个Configuration class==Configuration file public class Config { @ Bean//向容器添加组件。使用方法名作为组件的id。返回的类型是组件类型。返回值是容器中组件的实例,public person 1(){ return new person( Mr . Yu ,21, male );} @Bean(customize) //id值也可以指定public person 2(){返回新人(小明,20,男);}}在主程序类中打印出我们的IoC容器中的对象,看看我们的person1和customize是否被添加到容器中。

  @ springbootapplicationpublic类主应用程序{ public static void main(string[]args){//1。返回我们的IOC容器可配置应用上下文Run=spring Application . Run(main Application . class,args);//2.检查容器中的组件字符串[]names=run . getbeandetificationnames();for(String name : names){ system . out . println(name);} } }输出结果:

  您可以看到,输出中有两个对象被放入IoC容器。

  

目录

@Bean注释也是IoC容器中的单个实例。

 

  公共静态void main (string [] args) {//1。返回我们的IOC容器可配置应用上下文Run=spring Application . Run(main Application . class,args);//2.检查容器中的组件字符串[]names=run . getbeandetificationnames();for(String name : names){ system . out . println(name);}//单实例person1=run.getbean (person1 ,person . class);person person 2=run . get bean( person 1 ,person . class);System.out.println(人员1==人员2 : (人员1==人员2));}输出结果:

  

1.@Configuration注解

@SpringBootAppli

 

  cationpublic 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); } //配置类本身也是组件 Config bean = run.getBean(Config.class); //com.ysw.boot.config.Config$$EnhancerBySpringCGLIB$$4aa44992@381d7219 System.out.println(bean); }}输出结果:

  

com.ysw.boot.config.Config$$EnhancerBySpringCGLIB$$4aa44992@381d7219

 

  

 

  

5.直接调用配置类里面的person1()方法

如果我们直接调用配置类里面的person1()方法会发生什么情况,它是从IoC容器中拿还是直接new一个对象呢

 

  在new一个配置类出来的情况下,调用person1方法,它返回的是new出来的对象但是如果我们从容器中取得的配置类,无论再去掉用多少次person1方法,它始终返回的都是同一个单实例对象,也就是从IoC容器中拿的对象。

@SpringBootApplicationpublic 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); } //配置类本身也是组件 Config bean = run.getBean(Config.class); //获取到的本身就是代理对象 //com.ysw.boot.config.Config$$EnhancerBySpringCGLIB$$4aa44992@381d7219 System.out.println(bean); //如果我们直接调用person1方法,它是从IoC容器中拿还是直接new一个对象呢, //在new一个配置类出来的情况下,调用person1方法,它返回的是new出来的对象 Config config = new Config(); Person person3 = config.person1(); Person person4 = config.person1(); System.out.println("person3 == person4 :"+ (person3 == person4)); //但是如果我们从容器中取得的配置类,无论再去掉用多少次person1方法,它始终返回的都是同一个单实例对象,也就是从IoC容器中拿的对象。 //如果@Configuration(proxyBeanMethods = true)代理对象调用方法。SpringBoot总会检查这个组件是否在容器中有; //保持组件单实例 Person person5 = bean.person1(); Person person6 = bean.person1(); System.out.println("person5 == person6 :"+ (person5 == person6)); }}

输出结果:

 

  

 

  

 

  

6.proxyBeanMethods——代理bean的方法

从容器中获取到的配置类对象输出结果:

 

  

com.ysw.boot.config.Config$$EnhancerBySpringCGLIB$$4aa44992@381d7219

 

  

在上述的输出结果中我们可以看到从容器中获取到的配置类对象本身就是一个被SpringCGLIB增强了的代理对象

 

  @Configuration()默认设置的是proxyBeanMethods = true。如果@Configuration(proxyBeanMethods = true),就是代理对象调用方法。SpringBoot总会检查这个组件是否在容器中已有,调用配置类中的方法时会返回容器中已有的组件(即IoC容器中已存在的对象)。如果@Configuration(proxyBeanMethods = false),就不是代理对象调用方法,SpringBoot不会检查这个组件是否在容器中已有,调用配置类中的方法时会返回新对象。

@Configuration(proxyBeanMethods = false)

 

  

举例: 把上述5中的@Configuration()改为@Configuration(proxyBeanMethods = false)

 

  输出结果为:

  

 

  总结:

  Full模式(proxyBeanMethods = true):保证每个@Bean方法被调用多少次返回的组件都是单实例的Lite模式(proxyBeanMethods = false):每个@Bean方法被调用多少次返回的组件都是新创建的组件依赖必须使用Full模式默认。其他默认是否Lite模式配置类组件之间无依赖关系用Lite模式加速容器启动过程,调用配置类中的方法时,SpringBoot每次都不会判断对象在容器中是否已经存在,减少了判断过程配置类组件之间有依赖关系,调用配置类中的方法时,SpringBoot每次都会判断对象在容器中是否已经存在,方法会被调用得到之前单实例组件,用Full模式到此这篇关于SpringBoot配置@Configuration注解和@bean注解的文章就介绍到这了,更多相关SpringBoot配置内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: