知识点
【
使用前提条件:
【
/*
* 如果这个代理的类没有实现接口就不能使用JDK中的动态代理
* 这时需要使用第三方的.jar CGLIB实现代理
*
*/
】
public class CGLIBProxy implements MethodInterceptor {
private Object targetObject;//代理的目标对象
public Object createProxyInstance(Object targetObject){
this.targetObject = targetObject;
Enhancer enhancer = new Enhancer();//该类用于生成代理对象
enhancer.setSuperclass(this.targetObject.getClass());//设置父类
enhancer.setCallback(this);//设置回调用对象为本身
return enhancer.create();
}
public Object intercept(Object proxy, Method method, Object[] args,
MethodProxy methodProxy) throws Throwable {
return methodProxy.invoke(this.targetObject, args);
}
}
CGLIB可以生成目标类的子类,并重写父类非final修饰符的方法。
】
实现步骤:
第一步:在spring解压包中找到cglib-nodep-2.1_3.jar文件并导入
第四步:编写PersonServerCGLIB类
public class PersonServerCGLIB {
private IPersonDao personDao;
private String name;
public PersonServerCGLIB(){}
/*
* 通过构造器来注入依赖对象
*/
public PersonServerCGLIB(IPersonDao personDao, String name) {
this.name = name;
this.personDao = personDao;
}
public PersonServerCGLIB(String name){
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public IPersonDao getPersonDao() {
return personDao;
}
// @Resource(name="mypersonDao")
// @Autowired
public void setPersonDao(IPersonDao personDao) {
this.personDao = personDao;
}
public void save() {
System.out.println("Test CGLIB Proxy");
}
}
第三步:编写CGLIB代理类
public class createCGLIBProxy implements MethodInterceptor{
/*
* 如果这个代理的类没有实现接口就不能使用JDK中的动态代理
* 这时需要使用第三方的.jar CGLIB实现代理
*
*/
private Object targeObject;
public Object createCGLIBProxy(Object targeObject)
{
this.targeObject=targeObject;
Enhancer enhancer=new Enhancer();
//设置父类 这里代理类需要继承这个父类 和JDK实现类似
enhancer.setSuperclass(this.targeObject.getClass());
enhancer.setCallback(this);
return enhancer.create();
}
public Object intercept(Object object, Method method, Object[] arg2,
MethodProxy methodProxy) throws Throwable {
Object object1=null;
PersonServerCGLIB personServer=(PersonServerCGLIB)this.targeObject;
if(personServer.getName()!=null || "".equals(personServer.getName()))
{
object1=methodProxy.invoke(this.targeObject, arg2);
}
return object1;
}
}
第四步 :编写单元测
@Test
public void TestCGLIBProxy()
{
createCGLIBProxy proxy=new createCGLIBProxy();
//PersonServer personServer=(PersonServer)proxy.createProxyInstance(new PersonServer("liyong"));
//这里转换为代理类而不是接口原因是这个类没有实现任何接口
PersonServerCGLIB personServer=(PersonServerCGLIB)proxy.createCGLIBProxy(new PersonServerCGLIB("liyong"));
personServer.save();
}
使用CGLIB生成代理
原创青年IT男1 博主文章分类:spring学习笔记 ©著作权
文章标签 使用CGLIB生成代理 父类 代理类 动态代理 文章分类 前端开发
上一篇:AOP中的概念
下一篇:EL表达式和JSTL标签快速入门
-
Cglib动态代理
cglib动态代理
cglib动态代理 -
强制使用CGLIB实现动态代理@EnableAspectJAutoProxy(proxyTargetClass = true)
AOP
java spring 开发语言 动态代理 AOP -
使用CGLIB生成代理
知识点【使用前提条件: 【 /* * 如果这个代理的类没有实现接口就不能
使用CGLIB生成代理 父类 代理类 jar -
【spring】Cglib动态代理的使用
cglib代理使用ASM对字节码进行操作生成新的类,从而实现对对象方法的增强。我们都知道Java中自带了一个动态代理,那我们
spring 动态代理 jdk代理 cglib asm -
CGLIB代理使用与原理详解
JDK中提供的生成动态代理类的机制有个鲜明的特点是:某个类必须有实现的接口,而生成的代理类也只能
cglib动态代理 代理类 java 目标对象 -
springAOP(CGLIB代理)
Spring AOP----CGLIB代理1.为什么要有CGLIB代理2.CGLIB代理的原理3.例子3.1创建一个spring的项目3.2创
springAOP CGLIB实现SpringAOP CGLIB代理原理 CGLIB代理未实现接口的类