spring中的方法注入详解

来源:互联网 发布:守望先锋数据 编辑:程序博客网 时间:2024/06/13 20:33

spring中的方法注入详解

lookup-method

        当单例的BeanA,需要注入一个非单例的BeanB时,希望每一次调用BeanB都会返回一个全新的BeanB实例,但是由于BeanA只实例化了一次,导致每次调用BeanB时,返回的都是同一个BeanB。

  • 一般来说,通过让BeanA实现BeanFactoryAware接口,让BeanA有直接访问IoC容器的能力,来解决上述问题。
public BeanB getBeanB(){    return (BeanB)factory.getBean("beanB");}

该实现方法,让Bean的定义与Spring框架直接绑定在一起,破坏了软件工程中低耦合的原则,不提倡。

  • 使用lookup-method:lookup-method的实现依赖于java的cglib类包,所以使用lookup-method必须要导入该包。
public abstract BeanA{    abstract BeanB getBeanB();}<bean id="beanB" class="***" scope="prototype"/><bean id="beanA" class="***.BeanA">    <!--每次调用getBeanB时,都会产生一个新的BeanB对象-->    <lookup-method name="getBeanB" bean="beanB"/></bean>

replaced -method

        目标:使用BeanB中的方法,来替换BeanA的某一个方法。

  • BeanB实现MethodReplacer接口
  • 在BeanB的定义中实现MethodReplacer中的reimplement方法
  • 在配置文件中指定BeanA被替换的方法
public class BeanA(){    public *** hello(){        ...    }}public class BeanB implements MethodReplacer{    public Object reimplement(Object arg0, Method arg1,Object[] arg2){        ...    }}<bean id="beanB" class="***"/><bean id="beanA" class="***">    <replaced-method name="hello" replacer="beanB"></replaced-method></bean>
以上为博主个人对spring方法注入的简单理解,如有不到之处,欢迎批评指正。