Spring look-up获取器注入

获取器注入是一种特殊的方法注入,它是把一个方法声明为返回某种类型的bean,但实际要返回的bean是在配置文件里配置的,此方法可z爱设计有些可插拔功能上,接触程序依赖,我们看下具体应用:

我们首先创建一个父类
```
pubic class User{
    public void showMe(){
        System.out.println("i am user");
    }
}
```
创建其子类并覆盖showMe方法
```
public class Teacher extends User{
    public void showMe(){
        System.out.println("i am teacher");
    }
}
```
创建调用方法
public abstract class GetBeanTest{
    public void showMe(){
    this.getBean().showMe();
}

public abstract User getBean();
}
创建测试方法
public class Main{
    public static void main(String[] args){
    ApplicationContext bf = new ClassPathXmlApplication("test/lookup/lookupTest.xml");
    GetBeanTest test = (GetBeanTest)bf.getBean("getBeanTest");
    test.showMe();
}
}

到现在为止,除了配置文件外,整个测试方法就完成了,如果之前没有接触过获取器注入可能会有疑问:抽象方法还没有被实现,怎么可以直接调用呢?答案在Spring为我们提供的获取器中,我们看看配置文件的配置:
(只列出需自己手动添加的配置)

<bean id="getBeanTest" class="......GetBeanTest">
    <look-method name="getBean" bean="teacher"/>
</bean>
<bean id="teacher" class="....Teacher"/>

在配置文件中,我们看到了源码解析中提到的lookup-method子元素,这个配置完成的功能是动态的将teacher所代表的bean作为getBean的返回值,运行测试方法我们将会看到控制台上的输出:i am Teacher

当我们的业务变更或在其他情况下,teacher里面的业务逻辑已经不再符合我们的业务要求,需要进行替换怎么办呢?这是我们需要增加新的逻辑类:

public class Studetn extends Usser{
    public void showMe(){
        System.out.println("i am student");
    }
}

同时修改配置文件:

<bean id="getBeanTest" class=".....getBeanTest">
    <lookup-method name="getBean" bean="student"/>
</bean>

<bean id="teacher" class="...Teacher"/>
<bean id="student" class="...Student"/>

再次运行测试类,你会发现不一样的结果:i am student

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值