【SpringBoot注解】@Configuration详解

作用:告诉SpringBoot这是配置类,相当于以前的配置文件

基本使用

  • 配置类里面使用@Bean标注在方法上给容器注册组件,默认是单实例的

 @Bean :给容器中添加组件。

以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例。

可以通过在@Bean注解里面赋值对组件起名,如@Bean("tom")

@Configuration
public class MyConfig {

    @Bean
    public User user01(){
        User zhangsan = new User("zhangsan", 18);
        return zhangsan;
    }

    @Bean("tom")
    public Pet pet01(){
        return new Pet("tomcat");
    }

}

通过控制台输出得知两次获取的是同一对象

@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        //1.返回我们的IOC容器
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);

        //2.从容器中获取组件
        Pet tom01 = run.getBean("tom", Pet.class);
        Pet tom02 = run.getBean("tom", Pet.class);
        System.out.println(tom01==tom02);
}
  • 配置类本身也是组件
    
  • @Configuration 注解属性 proxyBeanMethods:代理bean的方法
Full(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】

通过从容器获取组件,即可发现proxyBeanMethods为true时使用的时代理方法。

proxyBeanMethods为false,MyConfig组件为
com.atguigu.boot.config.MyConfig@6f95cd51

proxyBeanMethods为true ,MyConfig组件为com.atguigu.boot.config.MyConfig$$EnhancerBySpringCGLIB$$d5d2440@3956b302
  •  最佳实践,组件依赖必须使用Full模式(默认)

设置张三对象的宠物必须是tom组件,不能每次获取都要重新创建一个组件,此时必须使用Full模式

@Configuration
public class MyConfig {
   
    @Bean 
    public User user01(){
        User zhangsan = new User("zhangsan", 18);
        zhangsan.setPet(pet01());
        return zhangsan;
    }


    @Bean("tom")
    public Pet pet01(){
        return new Pet("tomcat");
    }

}

proxyBeanMethods为ture或false的区别

为false时,可以跳过检查,不会去查找这个组件在容器中是否已经有了,会直接创建新的组件,因此SpringBoot启动就会很快,为true时每一次获取都会检查是否有该组件,启动会很慢。

如果别的组件不依赖我们的组件,可以调整为false,否则,调整为true,可以保证依赖的组件就是容器中的组件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鲁蛋儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值