一、初始逻辑:首先,来看下面的示例,具体看注释。
1
2
3
4
5
6
7
8
/**
* 假设这是一个表示可以向目标发起连接的类
*/
publicclassConnectionExample {
publicvoidexecConnection() {
System.out.println("ConnectionExample:连接到谷歌!");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* 这是一个管理连接的类
* @author Administrator
*
*/
publicclassConnManager {
/**
* 介绍:通过调用这个方法,可以获取一个连接对象,业务逻辑如方法体
* 说明:假设这是一个旧系统中遗留的或者第三方插件中默认的业务逻辑,
* 整个类和方法你都不能更改或者更改太麻烦
*/
publicConnectionExample createConnection(){
returnnewConnectionExample();
}
}
1
2
1
2
3
4
5
6
7
8
9
10
11
12
publicclassRun {
/**
* 通过ConnManager的createConnection()方法可以获得初始的Connection,
* 调用其execConnection()方法发起初始的连接请求,原有流程完毕
*/
publicstaticvoidmain(String[] args) {
ApplicationContext context = newClassPathXmlApplicationContext(
"applicationContext.xml");
ConnManager manager = (ConnManager) context.getBean("connManager");
manager.createConnection().execConnection();
}
}
运行结果:执行Run中的main()方法,控制台输出:ConnectionExample:连接到谷歌!
二、应用拓展:现在,假设需要对Connection做一个拓展,希望可以连接到的目标是自定义的新目标,通过ConnectionExample的createConnection()获取的当然也是拓展的Connection对象。拓展很容易,怎样把这个拓展的Connection在调用createConnection()时取代默认业务逻辑产生的Connection对并返回,才是lookup-method的重点。
1
2
3
4
5
6
7
8
9
/**
* 针对默认的Connection拓展
*/
publicclassConnectionExtends extendsConnectionExample {
@Override
publicvoidexecConnection() {
System.out.println("ConnectionExtends:连接到百度!");
}
}
1
2
3
4
5
6
7
运行结果:再次执行Run中的main()方法,控制台输出:ConnectionExtends:连接到百度!
阅读(1881) | 评论(0) | 转发(0) |