spring方法注入

 时间:2024-10-12 03:37:08

1、在大多数应用程序场景中,容器中的大多数bean都是 单例。当单例bean需要与另一稍僚敉视个单例bean协作或非单例bean需要与另一个非单例bean协作时,通常通过将一个bean定义为另一邗锒凳审个bean的属性来处理依赖关系。当bean生命周期不同时会出现问题。

spring方法注入

2、假设单例bean A需要使用非单例(原型)bean B,可能是在A上的每个方法调用上。容器只创建一次单例bean A,因此只有一次机会来设置属性。每次需要时,容器都不能为bean A提供bean B的新实例。

3、解决方案是放弃一些控制反转。你可以做一个水瑞侮瑜bean到容器通过实现 ApplicationContextAware 接口,并通过制作 getBean("B") 到容器调用请求(典型新)bean B实例的实例每次豆A需要它。以下示例显示了此方法:

spring方法注入

4、前面的内容是不可取的,因为业务代码知道并耦合到Spring Framework。方法注入是Spring IoC容器的一个高级功能,可以让您干净地处理这个用例。

spring方法注入

5、Lookup方法注入是容器覆盖容器管理bean上的方法并返回容器中另一个命名bean的查找结果的能力。查找通常涉及原型bean,Spring Framework通过使用CGLIB库中的字节码生成来动态生成覆盖该方法的子类来实现此方法注入。

6、对于 CommandManager 前面代码片段中的类,Spring容器动态地覆盖 createCommand() 方法的实现。该 CommandManager 班没有任何Spring的依赖,如下例所示:

spring方法注入

7、在包含要注入的方法的客户端类中( CommandManager 在本例中),要注入的方法需要以下形式的签名:

spring方法注入

8、如果方法是 abstract ,则动态生成的子类实现该方法。否则,动态生成的子类将覆盖原始类中定义的具体方法。请考虑以下示例:

spring方法注入
spring方法注入

9、只要需要bean 的新实例,标识为bean的bean 茧盯璜阝就会 commandManager 调用自己的 createCommand()方法 myCommand 。 m烤恤鹇灭yCommand 如果实际需要,您必须小心将bean 部署为原型。如果它是单例,myCommand 则每次返回相同的bean 实例。

10、或者,在基于注释的组件模型中,您可以通过 @Lookup 注释声明查找方法,如以下示例所示:

spring方法注入

11、或者,更具惯用性,您可以依赖于针对查找方法的声明返回类型解析目标bean:

spring方法注入

12、请注意,您通常应该使用具体的存根实现来声明这种带注释的查找方法,以使它们与Spring的组件扫描规则兼容,其中默认情况下抽象类被忽略。此限制不适用于显式注册或显式导入的bean类。

spring方法注入
  • linux/windows 文件777权限修改方法
  • pycharm怎么安装material theme ui
  • Windows下安装Redis服务
  • Windows平台下OpenSSH如何安装与配置
  • eclipse如何修改指定项目的JDK版本
  • 热门搜索
    手抄报感恩老师 庆祝国庆节手抄报 书香校园手抄报内容 端午节手抄报句子大全 科学家的故事手抄报 端午节的手抄报怎么画 国防手抄报简单又字少 关于心理的手抄报 小学安全教育手抄报 五一节手抄报