spring bean中子元素lookup-method和replaced-method

    spring bean中有两个子元素lookup-method和replaced-method,虽然不常用,但觉得很有用,拿出来聊聊。

   1.lookup-method

   通常称为获取器注入,spring in action中对它的描述是,一种特殊的方法注入,它是把一个方法声明为返回某种类型的bean,而实际要返回的bean是在配置文件里面配置的,可用在设计可插拔的功能上,接触程序依赖。

   首先创建一个父类

   

   创建其子类并覆盖who方法
   
   创建调用方法
  
   配置文件
   
   测试
   
  运行结果
   

   说明

   1.可以看到,只是调用了一个没有实现的抽象方法,就完成了执行,这貌似是不合理的(没有实现的抽象方法怎么可以被调用呢?)

   2.原因就在于,配置文件中的lookup-method的元素,它直接将kobe代表的bean作为getBean的返回值

   3.如果有一天我们不需要kobe的逻辑了,那就重新创建一个需要的bean,并将bean id设置为 lookup-method元素的bean属性值就可以了

2.replaced-method

   可以在运行时用新的方法替换旧的方法。还是继续按照上边的例子举例,如果我觉得kobe不行,yaoming行,那我就可以用yaoming替换kobe

   接着上边的例子,创建一个bean :Yao,要实现spring的MethodReplacer接口

   

    进行配置

    

  测试

  

  执行结果

   

   说明

   1.可以看到,执行who的时候,其实执行的是Yao中的方法,也就是说,被替换了

   2.lookup-method要执行新的逻辑,需要新加bean;replaced-method则是将之前执行的逻辑替换掉

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,除了使用注解方式,我们还可以使用XML配置来实现Spring Lookup Method。下面是一个使用XML配置的示例: 首先,定义一个抽象类: ``` public abstract class AbstractBean { public void doSomething() { getDependency().execute(); } public abstract Dependency getDependency(); } ``` 接下来,定义一个具体的子类: ``` public class ConcreteBean extends AbstractBean { private Dependency dependency; @Override public Dependency getDependency() { if (dependency == null) { dependency = createDependency(); } return dependency; } protected Dependency createDependency() { // 返回一个新的Dependency对象 } } ``` 注意到这里的`createDependency()`方法没有被`@Lookup`注解标记,这是因为我们将会在XML配置这个方法。 接下来,我们需要在XML配置这个类: ``` <bean id="concreteBean" class="com.example.ConcreteBean"> <lookup-method name="createDependency" bean="dependency"/> </bean> <bean id="dependency" class="com.example.Dependency"/> ``` 注意到这里的`lookup-method`元素,它告诉Spring在运行时为`createDependency()`方法生成一个代理,并将其返回值注入到`ConcreteBean`对象。 现在,我们可以在其他类注入`concreteBean`对象,并调用它的`doSomething()`方法,它将会使用`ConcreteBean`的`createDependency()`方法来获取一个新的`Dependency`对象,并执行它的`execute()`方法。 这就是使用XML配置的Spring Lookup Method的一个简单示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值