博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.4 spring- lookup-method 子元素的使用与解析
阅读量:6949 次
发布时间:2019-06-27

本文共 2280 字,大约阅读时间需要 7 分钟。

1. lookup-method的应用:

1.1 子元素lookup-method 似乎不是很常用,但是在某些时候他的确是非常有用的属性,通常我们称它为 "获取器注入" .

  引用 "Spring In Action " 中的一句话.  

  '获取器注入是一种特殊的方法注入,它是把一个方法声明为返回某种类型的bean,但实际上,返回的bean是配置文件里面配置的,此方法可用在设计一些可插拔的功能上,解除程序依赖'

1.2 我们来看看具体的应用:

  1.2.1 首先我们创建一个父类,

1 public class Person {2 3     public void showMe() {4         System.out.println("I am person ,what about you ?");5     }6 }

   1.2.2 创建其子类,并覆盖其showMe()方法,

1 public class Theacher extends Person { 2  3     /* 4      * (non-Javadoc) 5      *  6      * @see test.lookup.method.entity.Person#showMe() 7      */ 8     @Override 9     public void showMe() {10         System.out.println("I am a theacher,");11     }12 }

  1.2.3 创建调用方法

1 public abstract class GetBean {2 3     private void showMe() {4         this.getBean().showMe();5     }6 7     public abstract Person getBean();8 9 }

  1.2.4 创建测试类

1 public class Main { 2  3     public static String XML_PATH = "test\\lookup\\method\\entity\\applicationContxt.xml"; 4  5     public static void main(String[] args) { 6         try { 7             Resource resource = new ClassPathResource(XML_PATH); 8             XmlBeanFactory beanFactory = new XmlBeanFactory(resource); 9             GetBean bean = (GetBean) beanFactory.getBean("getBean");10             System.out.println(bean);11             bean.getBean().showMe();12         }13         catch (Exception e) {14             e.printStackTrace();15         }16     }17 }

  1.2.5 配置文件如下

 

在配置文件中,我们看到了  lookup-method  子元素, 这个配置完成的功能就是动态地将teacher所代表的bean作为getBean的返回值,那么当我们的业务需要变更的或者需要替换的情况下我们只需要修改配置文件

 

 

 至此,我们已经初步了解了lookup-method的作用,这是我们去看看Spring 的源码;

1 /** 2      * Parse lookup-override sub-elements of the given bean element. 3      */ 4     public void parseLookupOverrideSubElements(Element beanEle, MethodOverrides overrides) { 5         NodeList nl = beanEle.getChildNodes(); 6         for (int i = 0; i < nl.getLength(); i++) { 7             Node node = nl.item(i); 8             //仅当在Spring默认Bean的子元素下, 9             //且为

上面的代码很熟悉,似乎与parseMetaElement的代码大同小异,

最大的区别就是在数据存储上面使用LookupOverride 类型的实体来进行数据承载,并记录在AbstractBeanDefinition中的methodOveride 属性中.

 

 

转载地址:http://uthnl.baihongyu.com/

你可能感兴趣的文章
Clarke and five-pointed star
查看>>
设计模式系列2-----C++实现责任链模式(Chain of Responsibility)
查看>>
20189312任方园《网络攻防》第六次作业
查看>>
929. Unique Email Addresses
查看>>
php
查看>>
职场人的“存在主义”哲学
查看>>
全互联结构D***综合配置示例
查看>>
在路上【我与51CTO的故事】
查看>>
演示:外部全局地址与外部局部地址的使用案例
查看>>
Elasticsearch集群监控与报警原理解析
查看>>
离开网易的转型之路2:无悔选择测试之路-路上的抉择、进取
查看>>
2014年中回首与展望
查看>>
局域网共享
查看>>
mysql建表-主键-索引-外键
查看>>
Android Studio第三十期 - 介绍几种网络请求方式写法
查看>>
计划任务导致的邮件系统故障
查看>>
《从零开始学Swift》学习笔记(Day 35)——会使用下标吗?
查看>>
盛大私有化和陈天桥的土皇帝心态
查看>>
Exchange Server 2013 公网发布疑难解答
查看>>
Oracle 12c dataguard云上挖坑记--为某机场贵宾业务部署oracle 12c到云端
查看>>