@Configuration与@Component区别

@Configuration与@Component区别

@Configuration注解源码中被@Component标注,所以说@Configuration同样也是一个组件在这里插入图片描述
相比于@Component注解,@Configuration注解中多了一个方法boolean proxyBeanMethods() default true;在这里插入图片描述
中文直译就是 代理bean的方法 ,它的默认值是true

经过以下代码测试出这个方法的作用

配置类

//proxyBeanMethods()方法默认值为true,所以就不写了
@Configuration
public class JavaConfig {

    @Bean 
    public User user(){
        User jack = new User("jack", 21);
        //user组件依赖了Pet组件(将tomCat注入进user)
        jack.setPet(tomCat());
        return jack;
    }

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

}

主程序

@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        //返回IOC容器
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
        //获取配置类对象
        JavaConfig bean1 = run.getBean(JavaConfig.class);
        //打印配置类对象
        System.out.println(bean1);
        User user = run.getBean("user",User.class);
        Pet tomCat = run.getBean("tomCat", Pet.class);
        System.out.println("user中的pet是否是容器中的pet:" + (user.getPet() == tomCat));
    }
}

返回的结果
在这里插入图片描述
然后将@Configuration注解的proxyBeanMethod方法的值修改为false

@Configuration(proxyBeanMethods = false)

其它不做改动,再进行测试

测试结果
在这里插入图片描述
两个测试结果的不同:

方法值为true的时候:

配置类的对象多了$$EnhancerBySpringCGLIB$$

user中注入的pet就是容器中的pet

方法值为false的时候:

配置类的对象少了$$EnhancerBySpringCGLIB$$

user中注入的pet不是容器中的pet,是新new出来的(但是属性值是一样的)

总结:

proxyBeanMethod()为true的时候,代理对象多了$$EnhancerBySpringCGLIB$$

EnhancerBySpringCGLIB是被SpringCGLIB增强了的对象

 Full(proxyBeanMethods = true)   每个@Bean被调用多少次返回的都是单实例的(全模式)

 Lite(proxyBeanMethods = false)  每个@Bean被调用多少次返回的都是新创建的  (轻量级模式)

使用场景

(proxyBeanMethods = true)

配置类中的组件中含有依赖关系,组件依赖必须使用Full模式默认

(proxyBeanMethods = false)

 配置类中的组件中没有依赖关系,如果方法为true,调用容器中的bean的时候,都会去检查是否含有bean中所需要的依赖bean,这是需要花费时间的,如果组件中没有依赖关系,就可以为false,省去检查是否有相对应的依赖bean的时间。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值