为我准备学习和理解spring
特留下代码笔记:
参考:
http://dev.csdn.net/author/labile/e70c97cb7f504d35b7b5350e7810cc5a.html
代码感想:
没个方法都或多或少需要环境参数(如: jdbc的conn ,hbn的session...等等 ),方法结束后又要关闭。
何不用proxy代理并用配置文件的方法来 关,开session 等
如:以下是我的想法并不是实际可用
实际代码:希望spring可以向我上面的方法配置好用来取代下面的实际代码 ^_^
结果:
Hello World!
after method invoke!
before method invoke!
刘凯毅
after method invoke!
特留下代码笔记:
参考:
http://dev.csdn.net/author/labile/e70c97cb7f504d35b7b5350e7810cc5a.html
代码感想:
没个方法都或多或少需要环境参数(如: jdbc的conn ,hbn的session...等等 ),方法结束后又要关闭。
何不用proxy代理并用配置文件的方法来 关,开session 等
如:以下是我的想法并不是实际可用
配置:
< class name =" HelloWorldImpl " >
< function name ="set*" />
< function name ="getName" >
< proxyBegin artt="name" value ="liukaiyi" />
//使用Proxy来赋值 name那在实现代码中就可以不用去关注象 session 等属性的开关了
//proxy中配置下 , 在实现类中 就使用 就可以了
< proxyBegin ref ="HelloWorldHandler.doBefter" args ="null" />
< proxyEnd ref ="HelloWorldHandler.doAfter" args ="null" />
</ function >
< function = name="sayHelloWorld">
<proxyEnd ref ="HelloWorldHandler.doAfter" args ="null" />
</ function >
</ class >
代码:
HelloWorld hw = ( HelloWorld )Factory.getBean( "HelloWorldImpl" );
hw.getName();
结果是:
before method invoke!
刘凯毅
after method invoke!
在此 我只是想象,spring 还没有看,但我认为spring 这个著名的框架应该在这方面有很好的实现。
< class name =" HelloWorldImpl " >
< function name ="set*" />
< function name ="getName" >
< proxyBegin artt="name" value ="liukaiyi" />
//使用Proxy来赋值 name那在实现代码中就可以不用去关注象 session 等属性的开关了
//proxy中配置下 , 在实现类中 就使用 就可以了
< proxyBegin ref ="HelloWorldHandler.doBefter" args ="null" />
< proxyEnd ref ="HelloWorldHandler.doAfter" args ="null" />
</ function >
< function = name="sayHelloWorld">
<proxyEnd ref ="HelloWorldHandler.doAfter" args ="null" />
</ function >
</ class >
代码:
HelloWorld hw = ( HelloWorld )Factory.getBean( "HelloWorldImpl" );
hw.getName();
结果是:
before method invoke!
刘凯毅
after method invoke!
实际代码:希望spring可以向我上面的方法配置好用来取代下面的实际代码 ^_^
package
test.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import junit.framework.TestCase;
public class TestProxy extends TestCase {
protected void setUp() throws Exception {
super .setUp();
}
public void testProxy(){
HelloWorld hw = new HelloWorldImpl();
InvocationHandler handler = new HelloWorldHandler(hw);
HelloWorld proxy = (HelloWorld) Proxy.newProxyInstance(
hw.getClass().getClassLoader(),
hw.getClass().getInterfaces(),
handler);
proxy.sayHelloWorld();
System.out.println();
proxy.setName( " liukaiyi " );
proxy.getName();
}
}
interface HelloWorld {
void sayHelloWorld() ;
void getName();
void setName(String name);
}
class HelloWorldImpl implements HelloWorld {
private String name = "" ;
public void setName(String name) {
this .name = name;
}
public void sayHelloWorld() {
System.out.println( " Hello World! " );
}
public void getName() {
System.out.println( this .name);
}
}
class HelloWorldHandler implements InvocationHandler {
// 要代理的原始对象
private Object objOriginal;
/**
* 构造函数。
* @param obj 要代理的原始对象。
*/
public HelloWorldHandler(Object obj) {
this .objOriginal = obj ;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result = null ;
String meName = method.getName();
if (meName.indexOf( " set " ) >- 1 ){
return method.invoke( this .objOriginal ,args);
}
if ( meName.equals( " getName " ) ){
// 方法调用之前
doBefore(); // 仿佛是AOP的影子,呵呵
}
// 调用原始对象的方法
result = method.invoke( this .objOriginal ,args);
// 方法调用之后
doAfter();
return result ;
}
private void doBefore() {
System.out.println( " before method invoke! " );
}
private void doAfter() {
System.out.println( " after method invoke! " );
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import junit.framework.TestCase;
public class TestProxy extends TestCase {
protected void setUp() throws Exception {
super .setUp();
}
public void testProxy(){
HelloWorld hw = new HelloWorldImpl();
InvocationHandler handler = new HelloWorldHandler(hw);
HelloWorld proxy = (HelloWorld) Proxy.newProxyInstance(
hw.getClass().getClassLoader(),
hw.getClass().getInterfaces(),
handler);
proxy.sayHelloWorld();
System.out.println();
proxy.setName( " liukaiyi " );
proxy.getName();
}
}
interface HelloWorld {
void sayHelloWorld() ;
void getName();
void setName(String name);
}
class HelloWorldImpl implements HelloWorld {
private String name = "" ;
public void setName(String name) {
this .name = name;
}
public void sayHelloWorld() {
System.out.println( " Hello World! " );
}
public void getName() {
System.out.println( this .name);
}
}
class HelloWorldHandler implements InvocationHandler {
// 要代理的原始对象
private Object objOriginal;
/**
* 构造函数。
* @param obj 要代理的原始对象。
*/
public HelloWorldHandler(Object obj) {
this .objOriginal = obj ;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result = null ;
String meName = method.getName();
if (meName.indexOf( " set " ) >- 1 ){
return method.invoke( this .objOriginal ,args);
}
if ( meName.equals( " getName " ) ){
// 方法调用之前
doBefore(); // 仿佛是AOP的影子,呵呵
}
// 调用原始对象的方法
result = method.invoke( this .objOriginal ,args);
// 方法调用之后
doAfter();
return result ;
}
private void doBefore() {
System.out.println( " before method invoke! " );
}
private void doAfter() {
System.out.println( " after method invoke! " );
}
}
结果:
Hello World!
after method invoke!
before method invoke!
刘凯毅
after method invoke!