博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java之CGLIB动态代理
阅读量:5154 次
发布时间:2019-06-13

本文共 2256 字,大约阅读时间需要 7 分钟。

© 版权声明:本文为博主原创文章,转载请注明出处

CGLIB动态代理:

  CGLIB动态代理就是对指定的类生成一个子类,覆盖其中所有的方法并环绕增强

优势:

  - 1. 业务类只需要关注业务逻辑本身,保证了业务类的重用性

  - 2. 只需一个动态代理类就可以代理很多类,大大减少了代理类的规模,便于维护

  - 3. 接口变了,动态代理类也不需要任何改动

  - 4. 可以代理没有实现任何一个接口的类

劣势:

  - 1. 不可以对final修饰的类或方法进行代理

实例:

1.项目结构

2.pom.xml

4.0.0
org.proxy
DynamicProxy-CGlib
0.0.1-SNAPSHOT
jar
UTF-8
junit
junit
4.12
test
cglib
cglib
3.2.5

3.Hello.java

package org.proxy.DynamicProxy_CGlib;public class Hello {    	public void say(String name) {				System.out.println("Hello!" + name);			}	}

4.CGLibProxy.java

package org.proxy.DynamicProxy_CGlib;import java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;public class CGLibProxy implements MethodInterceptor {	private static CGLibProxy instance = new CGLibProxy();		private CGLibProxy() {		}		public static CGLibProxy getInstance() {				return instance;			}		@SuppressWarnings("unchecked")	public 
T getProxy(Class
cls) { return (T) Enhancer.create(cls, this); } public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { before(); Object result = proxy.invokeSuper(obj, args); after(); return result; } private void before() { System.out.println("Before"); } private void after() { System.out.println("After"); }}

5.TestCGLibDynamicProxy.java

package org.proxy.test;import org.junit.Test;import org.proxy.DynamicProxy_CGlib.CGLibProxy;import org.proxy.DynamicProxy_CGlib.Hello;public class TestCGLibDynamicProxy  {		@Test	public void testHello() {				Hello helloProxy = CGLibProxy.getInstance().getProxy(Hello.class);		helloProxy.say("Jack");			}	}

6.效果预览

 

参考:《架构探险-从零开始写Java Web框架》(黄勇著)

转载于:https://www.cnblogs.com/jinjiyese153/p/6933362.html

你可能感兴趣的文章
怎样将本地web项目部署到腾讯云服务器上?
查看>>
mkdir创建目录
查看>>
JavaScript基础篇
查看>>
色块图
查看>>
ganglia-gmond.conf配置文件
查看>>
【bzoj2819】Nim DFS序+树状数组+倍增LCA
查看>>
【bzoj1899】[Zjoi2004]Lunch 午餐 dp
查看>>
第7章 数组实验
查看>>
[转]Running JavaScript in an iOS application with JavaScriptCore
查看>>
SQL游标写入时触发
查看>>
两个应用的跳转
查看>>
Centos7,Docker-配置自动化环境镜像(python3.7+selenium 3.11+firefox 62+geckodriver 0.21)...
查看>>
篮球赛总结
查看>>
c#获取本机ip地址|获取本机的本地上网IP地址
查看>>
jmeter(二十)JMeter中返回Json数据的处理方法
查看>>
redis cluster 实践总结
查看>>
Lua的require和module小结
查看>>
Linux 平均负载 Load Average 详解
查看>>
二叉树的建立和遍历
查看>>
关于JavaScript中连等赋值那点事
查看>>