- 浏览: 142349 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
flyingcatjj:
很适合我这种刚接触的
myeclipse xfire 开发webservice实例 -
tangzlboy:
非常好,非常详细,非常中用。
linux入门 -
yzz9i:
楼主说的很是详细。
myeclipse xfire 开发webservice实例 -
zqx888191:
很再理阿!
老程序员的教诲 -
simplecat123:
...
SQLite数据读取
十 使用JDK中的Proxy技术实现AOP功能 通过代理对象来调用对象的方法,从而做出权限控制。 目标对象必须实现接口才能使用proxy技术创建代理对象。 PersonService.java view plaincopy to clipboardprint? 01.package cn.pf.aop.service; 02. 03.public interface PersonService { 04. public void save(String name); 05. public void update(String name, Integer personId); 06. public String getName(Integer personId); 07.} package cn.pf.aop.service; public interface PersonService { public void save(String name); public void update(String name, Integer personId); public String getName(Integer personId); } PersonServiceBean.java view plaincopy to clipboardprint? 01.package cn.pf.aop.service.impl; 02. 03.import cn.pf.aop.service.PersonService; 04. 05.public class PersonServiceBean implements PersonService { 06. private String user = null; 07. 08. public PersonServiceBean() { 09. 10. } 11. 12. public PersonServiceBean(String user) { 13. this.setUser(user); 14. } 15. 16. @Override 17. public String getName(Integer personId) { 18. System.out.println(this.getClass().getName()+" getName方法"); 19. return "pf"; 20. } 21. 22. @Override 23. public void save(String name) { 24. System.out.println(this.getClass().getName()+" save方法"); 25. } 26. 27. @Override 28. public void update(String name, Integer personId) { 29. System.out.println(this.getClass().getName()+" update方法"); 30. } 31. 32. public void setUser(String user) { 33. this.user = user; 34. } 35. 36. public String getUser() { 37. return user; 38. } 39. 40.} package cn.pf.aop.service.impl; import cn.pf.aop.service.PersonService; public class PersonServiceBean implements PersonService { private String user = null; public PersonServiceBean() { } public PersonServiceBean(String user) { this.setUser(user); } @Override public String getName(Integer personId) { System.out.println(this.getClass().getName()+" getName方法"); return "pf"; } @Override public void save(String name) { System.out.println(this.getClass().getName()+" save方法"); } @Override public void update(String name, Integer personId) { System.out.println(this.getClass().getName()+" update方法"); } public void setUser(String user) { this.user = user; } public String getUser() { return user; } } JDKProxyFactory.java view plaincopy to clipboardprint? 01.package cn.pf.aop; 02. 03.import java.lang.reflect.InvocationHandler; 04.import java.lang.reflect.Method; 05.import java.lang.reflect.Proxy; 06. 07.import cn.pf.aop.service.impl.PersonServiceBean; 08. 09.public class JDKProxyFactory implements InvocationHandler { 10. private Object targetObject; 11. 12. public Object createProxyIntance(Object targetObject){ 13. this.targetObject = targetObject; 14. return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(), 15. this.targetObject.getClass().getInterfaces(), this); 16. } 17. 18. @Override 19. public Object invoke(Object proxy, Method method, Object[] arg2) 20. throws Throwable { 21. PersonServiceBean personServiceBean = (PersonServiceBean)targetObject; 22. Object result = null; 23. if(personServiceBean.getUser() != null){ 24. result = method.invoke(targetObject, arg2); 25. } 26. return null; 27. } 28.} package cn.pf.aop; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import cn.pf.aop.service.impl.PersonServiceBean; public class JDKProxyFactory implements InvocationHandler { private Object targetObject; public Object createProxyIntance(Object targetObject){ this.targetObject = targetObject; return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(), this.targetObject.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] arg2) throws Throwable { PersonServiceBean personServiceBean = (PersonServiceBean)targetObject; Object result = null; if(personServiceBean.getUser() != null){ result = method.invoke(targetObject, arg2); } return null; } } AOPTest.java view plaincopy to clipboardprint? 01.package junit.test; 02. 03.import org.junit.Test; 04. 05.import cn.pf.aop.JDKProxyFactory; 06.import cn.pf.aop.service.PersonService; 07.import cn.pf.aop.service.impl.PersonServiceBean; 08. 09. 10.public class AOPTest { 11. @Test public void proxyTest(){ 12. JDKProxyFactory factory = new JDKProxyFactory(); 13. PersonService personService = (PersonService) factory.createProxyIntance(new PersonServiceBean()); 14. personService.save("111"); 15. } 16.} package junit.test; import org.junit.Test; import cn.pf.aop.JDKProxyFactory; import cn.pf.aop.service.PersonService; import cn.pf.aop.service.impl.PersonServiceBean; public class AOPTest { @Test public void proxyTest(){ JDKProxyFactory factory = new JDKProxyFactory(); PersonService personService = (PersonService) factory.createProxyIntance(new PersonServiceBean()); personService.save("111"); } } Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(), this.targetObject.getClass().getInterfaces(), this); 创建代理对象的时候,加入了该目标对象所有的接口,即对所有的方法进行监听,任何一个方法的调用都会触发代理对象的invoke方法。this表示触发哪个代理对象的invoke方法,这里我们设置当前代理对象。 调用personService的save方法的时候,可以理解为,save方法被监听,进入代理对象的invoke方法,如果user!=null,则invoke方法中调用了personService的save方法,如果user==null,则什么也不做。 通过反射技术调用方法其实可以简单的理解为 xxx.invoke(obj,args)返回的结果是obj.xxx(args) end 完毕!
发表评论
-
十八 Spring2.5+Hibernate3.3+Struts2整合开发
2011-07-04 17:16 766十八 Spring2.5+Hibernate3.3+Strut ... -
十七 Spring2.5+JPA+Struts1.3整合开发
2011-07-04 17:16 1187十七 Spring2.5+JPA+Struts1.3整合开发 ... -
十六 Spring2.5+Hibernate3.3+Struts1.3整合开发
2011-07-04 17:13 880十六 Spring2.5+Hibernate3.3+Strut ... -
十五 用xml方式配置事务
2011-07-04 17:11 790十五 用xml方式配置事务 ... -
十四 spring容器的声明式事务管理
2011-07-04 17:10 925spring在运行期(unchecked ... -
十三 Spring+JDBC组合开发
2011-07-04 17:09 913十三 Spring+JDBC组合开发 ... -
十二 spring的AOP编程
2011-07-04 17:06 1341Aspect(切面):指横切性关 ... -
十一 使用CGLIB实现AOP功能与AOP概念解释
2011-07-04 17:05 774十一 使用CGLIB实现AOP功能与AOP概念解释 前面 ... -
九 自动扫描和管理bean
2011-07-04 17:02 711九 自动扫描和管理bean ... -
八 @Autowire注解与自动装配
2011-07-04 17:01 825使用了@Autowired的注解方式,这种默认按类型查找符合的 ... -
七 编码剖析@Resource注解的实现原理
2011-07-04 17:00 1062七 编码剖析@Resource注解的实现原理 Itcas ... -
六 用@Resource注解完成属性装配
2011-07-04 16:58 1824六 用@Resource注解完成属性装配 java代 ... -
五 依赖注入
2011-07-04 16:57 709五 依赖注入 1>set注入方式 1 对象注入 ... -
四 spring管理bean的作用域
2011-07-04 16:57 924四 spring管理bean的作用域 先看配置 < ... -
三 实例化bean的方法
2011-07-04 16:56 681三 实例化bean的方法 1接口 package cn. ... -
二 开启spring之旅
2011-07-04 16:55 6891 首先下载spring 最佳答案 版本2.5.6,官 ... -
一 spring的介绍
2011-07-04 16:54 6731 Spring是什么 Spring是一个开源的控制反转(I ... -
Spring学习笔记(4)----Bean节点信息配置
2010-10-29 16:53 739默认情况下,Spring的Ioc容器启动时会初始化bean ... -
Spring学习笔记(3)----编码剖析Spring管理Bean的原理
2010-10-29 16:47 689Xml代码 <?xml versio ... -
Sping学习笔记(2)----实例化Bean的三种方式
2010-10-29 16:45 782Spring的实例化Bean有三种方式: 使用类构造器 ...
相关推荐
使用JDK中的Proxy技术实现AOP功能与使用CGLIB实现AOP功能
NULL 博文链接:https://countme.iteye.com/blog/1130188
AOP_1.入门及使用JDK中的Proxy技术实现
使用jdk proxy实现aop机制的一个小例子,写着给新手看看而已,老手们莫见笑
使用JDK中的Proxy技术实现AOP 使用CGLib实现AOP功能
Jdk动态代理,基于接口的代理示例 InovactionHandler Proxy
CGlib的Proxy实现AOP的示例、JDK的Proxy实现AOP的示例、通过spring注解方式实现AOP
使用动态代理实现AOP需要有四个角色:被代理的类,被代理类的接口,织入器,和InvocationHandler,而织入器使用接口反射机制生成一个代理类,然后在这个代理类中织入代码。被代理的类是AOP里所说的目标,...
1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间...
使用JDK中的Proxy技术实现AOP功能 16.使用CGLIB实现AOP功能与AOP概念解释 17.使用Spring的注解方式实现AOP入门 18.使用Spring的注解方式实现AOP的细节 19.使用Spring配置文件实现AOP 20.aspectj的切入点语法...
有一天在用回调模版的时候,忽然间又想到jdk自带的Proxy类似乎不是怎么好用,为何不把其做成回调模版呢,可以将其改造称类似spring Aop 代码如下: package com.fjx.proxy.up.test; import ...
对于使用业务接口的类,Spring默认会使用JDK动态代理来实现AOP。 Hibernate 的 二级缓存 学习案例 案例代码 接下来,就通过一个案例来演示Spring中JDK动态代理的实现过程,具体代码请参见教材3.2.1小节。 CGLIB代理 ...
静态代理--不适合企业开发,适合初学者理解代理。 jdk动态代理--适合企业级开发,但是它要求必须面向接口编程,假如目标类没有实现接口...spring 的AOP功能中 会根据目标类是否实现了接口来判断使用 jdk Proxy还是cglib
为了简单起见,例子没有没有使用任何第三方的AOP Framework, 而是利用Java语言本身自带的动态代理功能来实现AOP. 让我们先回到AOP本身,AOP主要应用于日志记录,性能统计,安全控制,事务处理等方面。它的主要...
spring之AOP(动态代理),包括jdk动态代理和CGLib动态代理
为了说明Spring的AOP原理,本人使用代理模式中的动态代理完成演示AOP编程的原理的演示。相信,如果你耐心看完整个程序(几乎一行注释一行代码),那么你对Spring这个东西就不是觉得有什么神秘了! 阅读对象:凡是喜爱...
简单的动态代理实现代码!文档参考博文Spring学习(3)AOP初步—JDK动态代理
Spring框架的JDK代理模式底层代码。有助理解Spring的Aop模式的代理
Spring AOP 使用的动态代理主要有两种方式:JDK 动态代理和 CGLIB 代理。 JDK 动态代理:用于代理实现了接口的类。Spring 会使用 java.lang.reflect.Proxy 类来创建代理对象。 CGLIB 代理:用于代理没有实现接口的...