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实战系列](7)Spring注入方式之构造器注入

1. 构造器注入 基于构造器的注入通过调用带参数的构造器来实现,每个参数代表着一个协作者。 1.1 最简单形式 我们以下面的Student实体类为例进行说明: packa...
  • SunnyYoona
  • SunnyYoona
  • 2016年02月03日 18:39
  • 2728

spring构造器注入

一、声明一个简单的bean 直接来个角色bean public class Roles { private int id; private String roleName; public R...
  • zwz568017880
  • zwz568017880
  • 2015年06月28日 14:57
  • 6094

Spring IOC注入(二)构造器注入

上一篇写了IOC注入方法中的set方法,这一篇就说一下基于构造器的注入~ 基于构造器注入的方式: 配置元素 注意:在Bean中不用写set方法,但是要有相应的构造器 构造器注入有俩种形式 ,一个是根据...
  • qq_33642117
  • qq_33642117
  • 2016年07月15日 14:29
  • 674

Spring配置优化_构造器注入+自动装配

2014-05-16 09:01:08上课内容: 依赖注入的第二种注入方式:构造器注入  创建带参数的构造方法,参数类型为注入类的类型...
  • Jerome_s
  • Jerome_s
  • 2014年05月16日 10:57
  • 1650

深入学习Spring框架之二构造器注入方式装配Bean

这一节我们来看看怎么使用Spring创建我们的Bean对象。     容器是Spring的核心,Spring的容器有两种类型:Bean工厂,由BeanFactory接口定义,是最简单的容器;以及应用上...
  • lycyl
  • lycyl
  • 2016年09月06日 16:03
  • 1018

Spring 反射注入+全注解注入

Spring IoC容器会先把所有的Bean都进行实例化,不管是要用到的火鼠用不到的,如果你想暂时不进行Bean的实例化,要用到属性 lazy-init="true". Spring的三种注入...
  • u013358378
  • u013358378
  • 2016年12月15日 14:49
  • 1282

Spring的两种依赖注入方式:setter方法注入与构造方法注入

Spring的两种依赖注入方式:setter注入与构造方法注入,这两种方法的不同主要就是在xml文件下对应使用property和constructor-arg属性, 例如: property属性:(...
  • loster_Li
  • loster_Li
  • 2016年10月19日 21:41
  • 3427

Spring-依赖注入之构造器方式注入

构造器注入-带有参数的构造函数注入 项目结构如下: 1、新建第一个bean文件 PersonServiceBean.java: /* *@Author swxctx *@time 2016年9...
  • qq_28796345
  • qq_28796345
  • 2016年09月27日 18:37
  • 1086

Spring 装配Bean的构造注入

在spring装配bean中还有一种Set注入的替代,那就是构造参数的注入。set注入是一种直接方式,缺点是它假设了所 有的可变属性都可以通过set方法访问到。例如有些属性在创建时设置一次,以后不再改...
  • Scythe666
  • Scythe666
  • 2016年06月23日 10:40
  • 646

spring四种依赖注入方式 (set,构造器,工厂,注解 )

平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程...
  • qq1175421841
  • qq1175421841
  • 2016年07月11日 22:45
  • 4937
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring look-up获取器注入
举报原因:
原因补充:

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