使用Proxy反射类实现AOP动态代理技术
来源:互联网 发布:古筝教学软件 编辑:程序博客网 时间:2024/05/17 22:16
Spring框架实现了AOP技术,但是,在没有支持框架的情况下,仅仅使用JDK 的反射包,还是可以实现AOP的。也
然后写一个实现这个接口的实现类
下面就是最重要的构建反射类工厂的代码了
首先把需要反射的类传进来,然后使用proxy创建这个类实例和实现这个类的所有接口,最后是一个回调,调用factory
因为工厂创建的类已经实现了接口,所以可以直接使用接口调用。整体来说,使用JDk 的Proxy方法还是非常简单
就是说,对于一个类,可以对其所有的方法进行反射控制拦截权限,然后决定是否允许调用,下面我们来写一个这样的
实现的例子。
首先建立一个接口,
- package com.bird.service;
- public interface PersonService {
- public void save(String name);
- public void update(String name, Integer personid);
- public String getPersonName(Integer personid);
- }
然后写一个实现这个接口的实现类
- package com.bird.service.impl;
- import com.bird.service.PersonService;
- public class PersonServiceBean implements PersonService {
- private String user = null;
- public String getUser() {
- return user;
- }
- public PersonServiceBean() {
- }
- public PersonServiceBean(String user) {
- this.user = user;
- }
- @Override
- public void save(String name) {
- System.out.println("我是save()方法");
- }
- @Override
- public void update(String name, Integer personid) {
- System.out.println("我是uodate()方法");
- }
- @Override
- public String getPersonName(Integer personid) {
- System.out.println("我是getPersonName()方法");
- return "xxx";
- }
- }
下面就是最重要的构建反射类工厂的代码了
- package com.bird.aop;
- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.Method;
- import java.lang.reflect.Proxy;
- import com.bird.service.impl.PersonServiceBean;
- /**
- * 使用proxy实现方法的拦截
- * @author Bird
- *
- */
- public class JDKProxyFactory implements InvocationHandler{
- private Object targetObject;
- public Object creatProxyInstance(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[] args)
- throws Throwable {
- PersonServiceBean bean = (PersonServiceBean)this.targetObject;
- Object result = null;
- if(bean.getUser() != null){
- result = method.invoke(targetObject, args);
- }
- return result;
- }
- }
首先把需要反射的类传进来,然后使用proxy创建这个类实例和实现这个类的所有接口,最后是一个回调,调用factory
工厂的一个实现方法。这个方法里面来判断是否满足权限控制条件,如果满足,就将调用请求发送给具体的类,然后
执行相应的方法,如果不满足,返回空,也就是不能执行任何方法。
测试情况如下
- package junit.test;
- import org.junit.Test;
- import com.bird.aop.JDKProxyFactory;
- import com.bird.service.PersonService;
- import com.bird.service.impl.PersonServiceBean;
- public class AOPTest {
- @Test
- public void test(){
- JDKProxyFactory factory = new JDKProxyFactory();
- PersonService service = (PersonService)factory.creatProxyInstance(new PersonServiceBean());
- service.getPersonName(123);
- }
- }
因为工厂创建的类已经实现了接口,所以可以直接使用接口调用。整体来说,使用JDk 的Proxy方法还是非常简单
的。
1 0
- 使用Proxy反射类实现AOP动态代理技术
- 使用Proxy反射类实现AOP动态代理技术
- 使用JDK中的Proxy技术实现AOP功能[动态代理]
- 使用Java动态代理技术实现AOP
- 反射实现AOP动态代理
- AOP实现原理(动态代理和反射技术)
- java中的动态代理Proxy实现AOP
- 使用JDK中的Proxy技术来实现动态代理
- 使用Java的Proxy类实现动态代理(Dynamic Proxy)
- Spring(十)通过动态代理(JDK的Proxy)和cglib实现AOP技术
- 反射实现 AOP 动态代理模式
- 反射实现 AOP 动态代理模式
- 反射实现 AOP 动态代理模式(Spring AOP实现原理)
- AOP + 动态代理 + Proxy模式
- 使用反射生成JDK动态代理---动态代理和AOP
- (9) 使用JDK中的Proxy技术实现AOP功能 以及 CGLIB生成代理
- (8) 使用JDK中的Proxy技术实现AOP功能 以及 CGLIB生成代理
- Spring AOP实现基础动态代理(Proxy)
- 光标悬停显示文字和执行方法
- poj1094 Sorting It All Out
- source insight增加注释宏
- MinGw在cmd下运行C
- 计算机概念:抽象和具象的关系和联系
- 使用Proxy反射类实现AOP动态代理技术
- 字串的连接最长路径查找
- Inline Hook 之(监视任意函数)
- WPF C# VS2013 TextBox控件 限制只能输入数字
- Ios导航栏返回到指定的页面
- 线程使用举例
- jsp页面中判空及date类型数据的格式化展示
- 安卓流氓应用破门而入,泄露机主真实身份
- 移植MATLAB神经网络算法到MFC平台