使用JDK中的Proxy技术实现AOP功能[动态代理]
2009-08-13 14:47
971 查看
1:Proxy代理条件:目标对象必须实现了接口
a:建一个工程,定义一个需要被拦截的业务bean(接口及实现)
代理类动态创建
测试:
a:建一个工程,定义一个需要被拦截的业务bean(接口及实现)
package cn.itcase.service; public interface PersonService { public void save(String name); public void update(String name,Integer perooid); public String getPersonName(Integer personId); } package cn.itcase.service.impl; import cn.itcase.service.PersonService; public class PersonSerciceBean implements PersonService { private String user = null;//业务需求,如果有权限(及user不为空)则容许执行方法。 public PersonSerciceBean() { } public PersonSerciceBean(String name) { this.user = name; } public String getPersonName(Integer personId) { // TODO Auto-generated method stub return "xxx"; } public void save(String name) { // TODO Auto-generated method stub System.out.println("我是save()方法"); } public void update(String name, Integer perooid) { // TODO Auto-generated method stub System.out.println("我是update()方法"); } public String getUser() { return user; } }
代理类动态创建
package cn.itcase.aop; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import cn.itcase.service.impl.PersonSerciceBean; public class JDKPROxyFactory implements InvocationHandler { private Object targetObject; public Object createProxyIntance(Object targetObject) { this.targetObject = targetObject; //第1个参数:类转载器,2个参数:代理对象要实现的接口,3个参数:回调【改类实现上面那个接口】,当拦截到方法时,则执行方法 return Proxy.newProxyInstance(this.targetObject.getClass() .getClassLoader(), this.targetObject.getClass().getInterfaces(), this); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub PersonSerciceBean bean = (PersonSerciceBean) this.targetObject; Object result = null; if (bean.getUser() != null) { method.invoke(targetObject, args); } return result; } }
测试:
package cn.itcase; import org.junit.BeforeClass; import org.junit.Test; import cn.itcase.aop.JDKPROxyFactory; import cn.itcase.service.PersonService; import cn.itcase.service.impl.PersonSerciceBean; public class AOPTest { @BeforeClass public static void setUpBeforeClass() throws Exception { } @Test public void proxyTest(){ JDKPROxyFactory factory=new JDKPROxyFactory(); PersonService service = (PersonService)factory.createProxyIntance(new PersonSerciceBean()); // (PersonService)factory.createProxyIntance(new PersonSerciceBean("xxx")); service.save(""); } }
相关文章推荐
- (8) 使用JDK中的Proxy技术实现AOP功能 以及 CGLIB生成代理
- 使用JDK中的Proxy技术实现AOP功能
- JDK核心API:使用动态代理实现AOP功能
- (转)使用JDK中的Proxy技术实现AOP功能
- 15_传智播客Spring2.5视频教程_使用JDK中的Proxy技术实现AOP功能 2
- 15_传智播客Spring2.5视频教程_使用JDK中的Proxy技术实现AOP功能 3
- Spring(十)通过动态代理(JDK的Proxy)和cglib实现AOP技术
- 使用JDK中的Proxy技术来实现动态代理
- 使用JDK中的Proxy技术实现AOP功能
- 使用JDK中的Proxy技术实现AOP功能
- 使用JDK中的proxy技术实现AOP功能
- aop学习总结一------使用jdk动态代理简单实现aop功能
- 15_传智播客Spring2.5视频教程_使用JDK中的Proxy技术实现AOP功能
- (9) 使用JDK中的Proxy技术实现AOP功能 以及 CGLIB生成代理
- ITCAST视频-Spring学习笔记(使用JDK中的Proxy技术实现AOP功能)
- 使用JDK中的Proxy技术实现AOP功能
- JDK使用InvocationHandler和Proxy实现动态代理
- Spring AOP的底层实现技术---JDK动态代理
- Java JDK动态代理(AOP)的实现原理与使用详析
- Java JDK 动态代理(AOP)使用及实现原理分析