【Spring】@Configuration

@Configuration在Spring中的作用

示例

@Configuration注解在Spring开发中作用于配置类上,结合@Bean注解来创建一些单例的bean注册到Spring容器中,@Configuration的作用其实可以理解为用来保证bean是单例的,先写段代码看下用与不用这个注解有没有区别:
CustomerService和UserService简单的写个构造函数输出一下
在这里插入图片描述
配置类中customerService()调用了userService方法,在没有加@Configuration注解的时候UserService的构造方法被调用的两次。
在这里插入图片描述
而加了@Configuration注解之后UserService的构造函数只被调用了一次。
在这里插入图片描述

源码分析

在这里插入图片描述
查看方法调用栈,从Spring应用上下文的refresh()方法一路调用到enhanceConfigurationClasses()方法,该方法接收ConfigurableListableBeanFactory参数,即Spring的bean工厂,Spring从bean工厂中获取BeanDefinitionNames进行遍历,对其中的全配置类(包含CONFIGURATION_CLASS_FULL属性)进行cglib代理:
在这里插入图片描述
那么为什么被代理了就能保证单例了呢?
在这里插入图片描述
查看cglib代理类源码,可以发现userService和customerService方法都增加了一个判断,这块确实还没看明白,不过猜测一下应该是先去beanFactory中getSingleton一下,如果没有获取到的话,才去创建这个bean。

猜你喜欢

转载自blog.csdn.net/hansirl/article/details/106166412
今日推荐