1、初始逻辑:首先,来看下面的示例,具体看注释。
java
/** * 假设这是一个表示能够向目标发起链接的类 */ publicclassConnectionExample { publicvoidexecConnection() { System.out.println("ConnectionExample:链接到谷歌!"); } }
/** * 这是一个管理链接的类 * @author Administrator * */ publicclassConnManager { /** * 介绍:经过调用这个方法,能够获取一个链接对象,业务逻辑如方法体 * 说明:假设这是一个旧系统中遗留的或者第三方插件中默认的业务逻辑, * 整个类和方法你都不能更改或者更改太麻烦 */ publicConnectionExample createConnection(){ returnnewConnectionExample(); } }
<!-- 初始使用或者咱们引入Spring后的配置 --> <beanid="connManager"class="com.rc.sp.lookup.ConnManager"/>
publiccla***un { /** * 经过ConnManager的createConnection()方法能够得到初始的Connection, * 调用其execConnection()方法发起初始的链接请求,原有流程完毕 */ publicstaticvoidmain(String[] args) { ApplicationContext context = newClassPathXmlApplicationContext( "applicationContext.xml"); ConnManager manager = (ConnManager) context.getBean("connManager"); manager.createConnection().execConnection(); } }
运行结果:执行Run中的main()方法,控制台输出:ConnectionExample:链接到谷歌!spring
2、应用拓展:如今,假设须要对Connection作一个拓展,但愿能够链接到的目标是自定义的新目标,经过ConnectionExample的createConnection()获取的固然也是拓展的Connection对象。拓展很容易,怎样把这个拓展的Connection在调用createConnection()时取代默认业务逻辑产生的Connection对并返回,才是lookup-method的重点。app
/** * 针对默认的Connection拓展 */ publicclassConnectionExtends extendsConnectionExample { @Override publicvoidexecConnection() { System.out.println("ConnectionExtends:链接到百度!"); } }
<!-- spring配置 --> <beanid="connectionExtends"class="com.rc.sp.lookup.ConnectionExtends"/> <beanid="connManager"class="com.rc.sp.lookup.ConnManager"> <!-- 忽略createConnection()方法中的具体业务逻辑,直接返回自定义的bean的对象, 可是该bean必须与忽略逻辑的方法返回值执行不冲突 --> <lookup-methodname="createConnection"bean="connectionExtends"/> </bean>
运行结果:再次执行Run中的main()方法,控制台输出:ConnectionExtends:链接到百度!ide