Spring look-up获取器注入

原创 2016年08月30日 07:23:23

获取器注入是一种特殊的方法注入,它是把一个方法声明为返回某种类型的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

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Spring look-up获取器注入

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

低头族,Look Up!

从你的手机上抬起头来,世界从此不同……
  • foruok
  • foruok
  • 2015-05-22 07:38
  • 3828

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

spring 获取对象方式

spring 获取对象方式

P2947 [USACO09MAR]仰望Look Up

题目描述 Farmer John's N (1 Each cow is looking to her left toward those with higher index numb...

如何在非注入类中,获取spring容器

如何在非注入类中,获取spring容器

Spring中Resource(资源)的获取

Spring中获取资源的方式一共有以下四种: 通过Resource接口获取资源 通过ResourceLoader接口获取资源 通过ApplicationContext获取资源 将resource注入到...

Java类获取spring 容器的bean的几种方式

http://blog.sina.com.cn/s/blog_9c7ba64d0101evar.html 常用的5种获取spring 中bean的方式总结: 方法一:在初始化时保存...

java中注解的使用与实例 (二)

java 注解,从名字上看是注释,解释。但功能却不仅仅是注释那么简单。注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解...

Bean获取Spring容器

在前几篇的博客中,都是程序先创建Spring容器,再调用Spring容器的getBean()方法来获取Spring容器中的Bean。在这种访问模式下,程序中总是持有Spring容器的引用。那么,为了让...

spring项目中使用监听器时获取spring中注入的service

转载自:http://blog.lifw.org/post/46428852 1.在java web项目中我们通常会有这样的需求:当项目启动时执行一些初始化操作,例如从数据库加载...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)