Spring @Configuration注解的Full和Lite模式详解

需积分: 5 0 下载量 123 浏览量 更新于2024-08-03 收藏 3KB MD 举报
@Configuration的Full和Lite模式 在 Spring 框架中,@Configuration 注解用于标记一个类作为配置类,该类中的方法将被用来生成 Bean 对象。但是,@Configuration 注解有两种模式:Full 模式和 Lite 模式。今天我们将深入探讨这两种模式的区别和应用场景。 Full 模式 Full 模式是 @Configuration 注解的默认模式。在 Full 模式下,Spring 会为配置类生成一个代理对象,该代理对象将负责管理所有的 Bean 对象。这种模式下,配置类中的方法将被调用一次,并且生成的 Bean 对象将被缓存起来,以便后续使用。 例如,在下面的代码中,我们定义了一个配置类 DataSourceConfig,该类中有两个方法:dataSource() 和 transactionManager()。在 Full 模式下,Spring 会生成一个代理对象,该代理对象将负责管理 dataSource 和 transactionManager 两个 Bean 对象。 ```java @Configuration public class DataSourceConfig { @Bean public DataSource dataSource() { return new DataSource(); } @Bean(name = "transactionManager") public DataSourceTransactionManager transactionManager() { return new DataSourceTransactionManager(dataSource()); } } ``` 在 Full 模式下,当我们调用 dataSource() 方法时,Spring 会生成一个代理对象,该代理对象将负责管理 dataSource Bean 对象。然后,当我们调用 transactionManager() 方法时,Spring 会使用缓存的 dataSource Bean 对象,而不是生成一个新的对象。 Lite 模式 Lite 模式是 @Configuration 注解的另外一种模式。在 Lite 模式下,Spring 不会生成代理对象,而是直接使用配置类中的方法来生成 Bean 对象。这种模式下,配置类中的方法将被调用多次,每次调用都会生成一个新的 Bean 对象。 例如,在下面的代码中,我们定义了一个配置类 AConfig,该类中有一个方法 b()。在 Lite 模式下,Spring 会直接使用 b() 方法来生成 Bean 对象,而不是生成代理对象。 ```java public class AConfig { @Bean public B b() { return new B(); } } ``` 在 Lite 模式下,当我们调用 b() 方法时,Spring 会直接生成一个新的 B 对象,而不是使用缓存的对象。 Full 模式和 Lite 模式的区别 Full 模式和 Lite 模式的主要区别在于是否生成代理对象。在 Full 模式下,Spring 会生成代理对象,该代理对象将负责管理所有的 Bean 对象,而在 Lite 模式下,Spring 不会生成代理对象,而是直接使用配置类中的方法来生成 Bean 对象。 Full 模式的生效条件 Full 模式的生效条件是: * 配置类上标注有 @Configuration 注解 * proxyBeanMethods 属性为 true(默认值) Lite 模式的生效条件 Lite 模式的生效条件是: * 配置类上标注有 @Component 注解 * 配置类上标注有 @ComponentScan 注解 * 配置类上标注有 @Import 注解 * 配置类上标注有 @ImportResource 注解 * 配置类中存在 @Bean 方法,但是没有任何注解 Full 模式和 Lite 模式是两种不同的配置模式,它们都有自己的应用场景。开发者需要根据实际情况选择合适的模式,以确保 Spring 框架的正确使用。