Spring学习心得(14)--cglib动态代理
来源:互联网 发布:卖家开通淘宝客条件 编辑:程序博客网 时间:2024/06/05 02:56
cglib动态代理与jdk代理的区别:
首先要把导入工作环境中
//日志类:public class Logger implements interceptor{ @Override public void interceptor() { System.out.println("logging"); }}//权限类public class Privilege implements interceptor { @Override public void interceptor() { System.out.println("privilege"); }}//安全框架类public class SecurityAssist implements interceptor { @Override public void interceptor() { System.out.println("i am security assist"); }}//目标类public class showSalaryImpl{ public void showSalary() { System.out.println("show salary"); }}/** * 拦截器类,与jdk动态代理不一样的是,这里实现的时methodInterceptor接口。 * 而jdk的是invocationHandler接口 */public class showSalaryInterceptor implements MethodInterceptor { //导入目标类 private Object target; //导入切面 private List<interceptor> interceptors; //用构造函数方法给它们赋值 public showSalaryInterceptor(Object target,List<interceptor> interceptors) { this.target = target; this.interceptors=interceptors; } /** * 这个就是相对于jdk的invoke方法 * argo-2跟jdk的invoke的前三个参数一样 * arg3是新增的,有查看方法名称等功能 */ @Override public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable { //先运行完拦截器里面的内容再操作 for(interceptor interceptor1:interceptors){ interceptor1.interceptor(); } arg1.invoke(this.target, arg2); return null; } /**获取代理对象。。固定写法 * 这个方法也可以写在客户端上, * @return */ public Object getProxy(){ Enhancer enhancer=new Enhancer(); enhancer.setCallback(this); enhancer.setSuperclass(this.target.getClass()); return enhancer.create(); }}//测试类:public class testCGlib { @Test public void testCGLIB(){ //新建切面对象 Logger logger=new Logger(); Privilege privilege=new Privilege(); SecurityAssist assist=new SecurityAssist(); //把切面对象加到集合众 List<interceptor> interceptors=new ArrayList<interceptor>(); interceptors.add(logger); interceptors.add(privilege); interceptors.add(assist); //新建目标类对象 Object target=new showSalaryImpl(); //新建拦截器对象 showSalaryInterceptor interceptor=new showSalaryInterceptor(target,interceptors); //新建代理对象 showSalaryImpl showSalary=(showSalaryImpl) interceptor.getProxy(); //操作 showSalary.showSalary(); }}运行结果:
0 0
- Spring学习心得(14)--cglib动态代理
- 【Spring】cglib动态代理例子
- Spring学习心得(0)--动态代理
- Spring学习心得(13)-- jdk动态代理
- spring的AOP(三)----Cglib动态代理
- spring 代理(静态代理&动态代理&cglib代理)
- Spring AOP基础-CGLib动态代理
- Spring泛形注入,CGLIB动态代理
- CGLib动态代理(转载)
- 动态代理(JDK + cglib)
- spring AOP 动态代理 jkd动态代理和cglib动态代理 hibernate使用cglib延迟加载
- Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
- Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
- Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
- Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
- Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
- Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
- Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
- AM335x uboot 移植
- 如何将单体应用改造为微服务
- Android学习笔记之蓝牙
- Zookeeper 集群+kafka集群+kafka manager搭建
- 路径不显示图片
- Spring学习心得(14)--cglib动态代理
- JAVA面试题及答案解析
- Tensorflow transfer learning fine tunning 改进图像训练结果实践
- ACM日记_17.3.14——输入均为独立字母与数字时的处理
- Centos 启动盘制作与安装
- mac,finder ,dock
- javascript Math.random的使用
- V4L2采集图像基本流程
- Java复制文件:字节流、字符流、数据流