AOP_1.入门及使用JDK中的Proxy技术实现
2010-06-09 11:28
721 查看
one>> 概念
Aspect Oriented Programming(AOP),面向切面编程
two>> 图例
three>> JDK中的Proxy技术实现 例子
1.描述
拦截业务bean中的所有方法,在调用每个方法前判断客户是否拥有权限,有则调用,没有则作相关的处理
2.步骤
(1)工程图
(2)代码
JDKProxyFactory
PersonService
PersonServiceBean
User
AOPTest
testUserProxy测试结果为:
已成功的拦截到此方法!!登录用户为:李强
人员更新成功
testNOUserProxy测试结果为:
对你不起、你没有权限!
例子可以在我上传的资源里可以找到:
http://search.download.csdn.net/advsearch
Aspect Oriented Programming(AOP),面向切面编程
two>> 图例
three>> JDK中的Proxy技术实现 例子
1.描述
拦截业务bean中的所有方法,在调用每个方法前判断客户是否拥有权限,有则调用,没有则作相关的处理
2.步骤
(1)工程图
(2)代码
JDKProxyFactory
package com.umikawa.aop; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import com.umikawa.User.User; public class JDKProxyFactory implements InvocationHandler { //代理的目标对象 private Object targetObject; // 创建一个目标对象 public Object createProxyInstance(Object targetObject){ this.targetObject = targetObject; /* * 参数1设置代码使用的类装载器,一般采用跟目标类相同的类装载器 * 参数2设置代理类实现的接口(所以JDK实现AOP要想业务bean使用代理则必须实现一个接口) * 参数3设置回调对象,当代理对象的方法被调用时,会委派给该参数指定对象的invoke方法 */ return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(), this.targetObject.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result = null; if(User.USER_NAME!=null){// 模拟已经登录 System.out.println("已成功的拦截到此方法!!登录用户为:"+User.USER_NAME); result = method.invoke(this.targetObject, args); // 调用目标对象的方法 }else{ System.out.println("对你不起、你没有权限!"); } return result; } }
PersonService
package com.umikawa.service; public interface PersonService { public abstract void updatePerson(); }
PersonServiceBean
package com.umikawa.service.bean; import com.umikawa.service.PersonService; public class PersonServiceBean implements PersonService { /* (non-Javadoc) * @see com.umikawa.service.PersonService#updatePerson() */ public void updatePerson() { // 模拟数据库更新 System.out.println("人员更新成功"); } }
User
package com.umikawa.User; /* * 模拟登录 */ public class User { public static String USER_NAME; public static String getUSER_NAME() { return USER_NAME; } public static void setUSER_NAME(String uSERNAME) { USER_NAME = uSERNAME; } }
AOPTest
package junit.test; import org.junit.BeforeClass; import org.junit.Test; import com.umikawa.User.User; import com.umikawa.aop.JDKProxyFactory; import com.umikawa.service.PersonService; import com.umikawa.service.bean.PersonServiceBean; public class AOPTest { @BeforeClass public static void setUpBeforeClass() throws Exception { } // 模拟用户登录调用方法 @Test public void testUserProxy() { // 模拟登录 User.setUSER_NAME("李强"); // 持有目标对象的一个代理 PersonService personService = (PersonService)new JDKProxyFactory().createProxyInstance(new PersonServiceBean()); // 更新人员 personService.updatePerson(); } // 模拟用户未登录调用方法操作 @Test public void testNOUserProxy() { // 模拟非登录 User.setUSER_NAME(null); // 持有目标对象的一个代理 PersonService personService = (PersonService)new JDKProxyFactory().createProxyInstance(new PersonServiceBean()); // 更新人员 personService.updatePerson(); } }
testUserProxy测试结果为:
已成功的拦截到此方法!!登录用户为:李强
人员更新成功
testNOUserProxy测试结果为:
对你不起、你没有权限!
例子可以在我上传的资源里可以找到:
http://search.download.csdn.net/advsearch
相关文章推荐
- 使用JDK中的proxy技术实现AOP功能
- 15_传智播客Spring2.5视频教程_使用JDK中的Proxy技术实现AOP功能 3
- (9) 使用JDK中的Proxy技术实现AOP功能 以及 CGLIB生成代理
- (转)使用JDK中的Proxy技术实现AOP功能
- 使用JDK中的Proxy技术实现AOP功能
- 使用JDK中的Proxy技术实现AOP功能[动态代理]
- 使用JDK中的Proxy技术实现AOP功能
- 15_传智播客Spring2.5视频教程_使用JDK中的Proxy技术实现AOP功能
- 使用JDK中的Proxy技术实现AOP功能
- 15_传智播客Spring2.5视频教程_使用JDK中的Proxy技术实现AOP功能 2
- (8) 使用JDK中的Proxy技术实现AOP功能 以及 CGLIB生成代理
- 使用JDK中的Proxy技术实现AOP功能
- ITCAST视频-Spring学习笔记(使用JDK中的Proxy技术实现AOP功能)
- AOP_2.使用cglib中的Proxy技术实现
- 使用JDK中的Proxy技术实现AOP功能
- JDK中的Proxy技术实现AOP功能
- JDK中的Proxy技术实现AOP功能
- JDK中的Proxy技术实现AOP功能
- Spring(十)通过动态代理(JDK的Proxy)和cglib实现AOP技术
- 使用JDK中的Proxy技术来实现动态代理