cglib-nodep-2.2.3.jar第三方JAR包动态代理使用
来源:互联网 发布:多益网络面试 策划 编辑:程序博客网 时间:2024/06/02 05:37
引入 cglib-nodep-2.1_3.ja包
cglib产生的代理类是目标类的子类
定义接口,让切面都继承它,方便加入到动态代理方法 的那个类中使用
在SalaryInterceptor类中使用 private List<Interceptor> interceptors;
1 package cn.itcast.cglibproxy.salary;2 3 public interface Interceptor {4 public void interceptor();5 }
Logger .java
1 package cn.itcast.cglibproxy.salary; 2 3 public class Logger implements Interceptor{ 4 5 @Override 6 public void interceptor() { 7 // TODO Auto-generated method stub 8 System.out.println("logging"); 9 }10 11 }
其他类都继承 Interceptor接口
Privilege.java
1 package cn.itcast.cglibproxy.salary; 2 3 public class Privilege implements Interceptor{ 4 5 @Override 6 public void interceptor() { 7 // TODO Auto-generated method stub 8 System.out.println("privilege"); 9 }10 11 }
Security.java
1 package cn.itcast.cglibproxy.salary; 2 3 public class Security implements Interceptor{ 4 5 @Override 6 public void interceptor() { 7 // TODO Auto-generated method stub 8 System.out.println("security"); 9 }10 11 }
等等
目标对象
1 package cn.itcast.cglibproxy.salary;2 3 public class SalaryManagerImpl {4 public void showSalary() {5 System.out.println("查看工资");6 }7 }
核心
1 package cn.itcast.cglibproxy.salary; 2 3 import java.lang.reflect.Method; 4 import java.util.List; 5 6 import net.sf.cglib.proxy.Enhancer; 7 import net.sf.cglib.proxy.MethodInterceptor; 8 import net.sf.cglib.proxy.MethodProxy; 9 10 public class SalaryInterceptor implements MethodInterceptor{11 12 13 private Object target;14 15 private List<Interceptor> interceptors;16 17 public SalaryInterceptor(Object target,List<Interceptor> interceptors){18 this.target = target;19 this.interceptors = interceptors;20 }21 //返回动态代理对象22 public Object createProxy(){ //增强对象23 Enhancer enhancer = new Enhancer();24 enhancer.setCallback(this);25 enhancer.setSuperclass(this.target.getClass());26 return enhancer.create();27 }28 //酷似jdk中的 invoke方法29 //arg3中存放方法的代理相关参数30 @Override31 public Object intercept(Object arg0, Method arg1, Object[] arg2,32 MethodProxy arg3) throws Throwable {33 // TODO Auto-generated method stub34 for(Interceptor interceptor:interceptors){35 interceptor.interceptor();36 }37 arg1.invoke(this.target, arg2);38 return null;39 }40 41 42 }
测试
1 package cn.itcast.cglibproxy.salary; 2 3 import java.lang.reflect.Proxy; 4 import java.util.ArrayList; 5 import java.util.List; 6 7 import org.junit.Test; 8 9 public class SalaryTest {10 @Test11 public void test(){12 Object target = new SalaryManagerImpl();13 Logger logger = new Logger();14 Security security = new Security();15 Privilege privilege = new Privilege();16 List<Interceptor> interceptors = new ArrayList<Interceptor>();17 interceptors.add(logger);18 interceptors.add(security);19 interceptors.add(privilege);20 //返回的是目标类型的子类21 SalaryInterceptor interceptor = new SalaryInterceptor(target, interceptors);22 SalaryManagerImpl proxy = (SalaryManagerImpl)interceptor.createProxy();23 proxy.showSalary();24 }25 }
aop:
1、切面
事务、日志、安全性框架、权限等都是切面 相当于例子中的 Logger Privilege
2、通知
切面中的方法就是通知 上面类的方法
3、目标类 SalaryManagerImpl类
4、切入点 在方法SalaryInterceptor 中的intercept方法中判断条件 ,什么条件调用目标方法
只有符合切入点,才能让通知和目标方法结合在一起
5、织入:
形成代理对象的方法的过程
好处:
事务、日志、安全性框架、权限、目标方法之间完全是松耦合的
0 0
- cglib-nodep-2.2.3.jar第三方JAR包动态代理使用
- 动态代理AOP的配置(包括cglib-nodep-2[1].2.2 jar包)
- cglib动态代理(需导入cglib-nodep-2.1_3.jar)
- cglib的jar包实现动态代理
- 第三方jar包
- android 如何使用第三方jar包
- Android中使用第三方jar包
- Eclipse使用第三方jar包
- mapreduce中使用第三方jar包
- hadoop使用第三方jar包
- hadoop如何使用第三方jar包
- java使用第三方jar包
- 使用maven 安装第三方jar包
- android jar 第三方包
- Android 第三方jar包
- MapReduce 第三方jar包
- spark 第三方jar包
- 修改第三方jar包
- NOIP2016参后感
- Java注解全解析(三)——编译时注解示例
- ajax返回servlet的值
- Android页面布局
- Android快速开发系列 10个常用工具类
- cglib-nodep-2.2.3.jar第三方JAR包动态代理使用
- 【Demo记录】悬浮窗—通过服务显示栈顶app包名到悬浮窗
- Git 常用命令及场景
- 对组件的引用(refs)
- java中枚举的使用
- AOP面向切面编程简介
- Python爬虫初识
- 因为文件一事差点怀疑编译器,三份代码对比
- OC正则表达式的简单使用