中关村在线

软件

@Configuration注解使用详解

通过@Configuration注解来配置类

1、 @Configuration 是一个类级注解,用于表明该类是Bean定义的来源。通过在类中声明带有 @Bean 注解的公共方法,可以定义和注册Bean实例。这些方法的返回值将被Spring容器管理为Bean。此外,在同一个 @Configuration 类中,一个 @Bean 方法可以调用另一个 @Bean 方法,从而明确地建立Bean之间的依赖关系,实现依赖注入。

2、 当多个Bean存在依赖关系时,只需在一个Bean的方法中调用另一个Bean,即可清晰表达这种依赖,如下例所示。

3、 在之前的例子中,beanOne 通过构造函数接收对 beanTwo 的引用注入。

4、 只有在@Configuration类中定义的@Bean方法才能声明Bean之间的依赖关系,而在普通的@Component类中无法实现Bean依赖的声明。

5、 查找方法注入是一种较为冷门的高级特性,适用于单例Bean依赖原型Bean的场景。通过Java配置方式,能够更自然地实现这一设计模式,有效解决作用域冲突问题,提升容器管理对象的灵活性与准确性。

6、 示例展示查找方法的注入使用方式

7、 通过Java配置,可定义CommandManager的子类并重写其抽象方法createCommand(),用于获取新的原型命令对象。以下示例展示了具体的实现方式:创建子类,在该方法中返回所需的具体命令实例,从而实现对象的动态创建与管理,提升灵活性和可扩展性。

8、 关于Java配置的内部机制,可通过以下示例了解:一个被@Bean注解的方法被调用了两次,展示了其执行过程与行为特点。

9、 clientDao() 方法会被 clientService1() 和 clientService2() 各自调用一次。该方法每次执行都会创建一个新的 ClientDaoImpl 实例并返回,因此按照常规逻辑,两个服务将各自持有独立的实例。然而在 Spring 框架中,默认情况下 bean 是单例作用域的,这就可能引发问题——如何确保多次调用仍返回同一个实例?其背后的关键机制在于:所有标注为 @Configuration 的类在应用启动时会通过 CGLIB 技术生成子类。在这个生成的子类中,对 clientDao() 这样的方法调用并不会直接执行原方法体。相反,子类会先拦截调用,检查 Spring 容器中是否已存在对应名称和类型的 bean 实例。若已存在,则直接返回容器中的缓存实例;只有在未找到时,才会继续调用父类方法创建新实例,并将其纳入容器管理。这一过程实现了单例的保障,确保了多次调用仍返回同一对象。

展开全文
人赞过该文
内容纠错

相关电商优惠

评论

更多评论
还没有人评论~ 快来抢沙发吧~

读过此文的还读过

点击加载更多

内容相关产品

说点什么吧~ 0

发评论,赚金豆

收藏 0 分享
首页查报价问答论坛下载手机笔记本游戏硬件数码影音家用电器办公打印 更多

更多频道

频道导航
辅助工具