当前位置: 代码迷 >> Web前端 >> JDK动态署理
  详细解决方案

JDK动态署理

热度:265   发布时间:2012-08-09 15:59:21.0
JDK动态代理
知识点

public class JDKProxy implements InvocationHandler {
private Object targetObject;//代理的目标对象
public Object createProxyInstance(Object targetObject){
this.targetObject = targetObject;
/*
* 第一个参数设置代码使用的类装载器,一般采用跟目标类相同的类装载器
* 第二个参数设置代理类实现的接口
* 第三个参数设置回调对象,当代理对象的方法被调用时,会委派给该参数指定对象的invoke方法
*/
return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(),
this.targetObject.getClass().getInterfaces(), this);
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
return method.invoke(this.targetObject, args);//把方法调用委派给目标对象
}
}
当目标类实现了接口,我们可以使用jdk的Proxy来生成代理对象。




照样实现步骤:

第一步:编写代理类

public class JDKProxy implements InvocationHandler {
private Object targetObject;//代理的目标对象
public Object createProxyInstance(Object targetObject){
this.targetObject = targetObject;
/*
* 第一个参数设置代码使用的类装载器,一般采用跟目标类相同的类装载器
* 第二个参数设置代理类实现的接口
* 第三个参数设置回调对象,当代理对象的方法被调用时,会委派给该参数指定对象的invoke方法
*/
   return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(),
this.targetObject.getClass().getInterfaces(), this);
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
return method.invoke(this.targetObject, args);//把方法调用委派给目标对象
}
}
当目标类实现了接口,我们可以使用jdk的Proxy来生成代理对象。

第二步:编写PersonServer。java和接口IPersonServer.java

public interface IPersonServer {

public abstract void save();

}


public class PersonServer implements IPersonServer {

private IPersonDao personDao;
private String name;

    public PersonServer(){}

/*
* 通过构造器来注入依赖对象
*/
public PersonServer(IPersonDao personDao, String name) {

this.name = name;
this.personDao = personDao;

}
public PersonServer(String name){
this.name=name;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public IPersonDao getPersonDao() {
return personDao;
}

// @Resource(name="mypersonDao")
// @Autowired
public void setPersonDao(IPersonDao personDao) {
this.personDao = personDao;
}

public void save() {
System.out.println("Test JDK Proxy");
}
}

第三步:编写单元测试

@Test
public void TestJDKProxy()
{
createJDKProxy proxy=new createJDKProxy();
//转换为实现接口
IPersonServer personServer=(IPersonServer)proxy.createProxyInstance(new PersonServer("liyong"));
personServer.save();
}
  相关解决方案