Jessy

而今听雨僧庐下,鬓已星星也。

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

阅读更多

扫码向博主提问

去开通我的Chat快问

luliuliu1234

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • Java
  • C++
  • JS
  • Oracle
  • MySQL
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/luliuliu1234/article/details/52366053
文章标签: spring bean
个人分类: Spring
想对作者说点什么? 我来说一句

注入器(万能注入器)

2010年08月28日 426KB 下载

没有更多推荐了,返回首页

不良信息举报

Spring look-up获取器注入

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭