package com.albert.spring.proxy;
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 Object target;
public Object createUserDaoImp2(Object target)
{
this.target = target;
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(this.target.getClass());
/***
* cglib创建的代理对象,其实就是继承了要代理的目标类, 然后对目标类中所有非final方法进行覆盖,但在覆盖方法时会添加一些拦截代码
*/
enhancer.setCallback(this); // 注册回调器
return enhancer.create();
}
public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy)
throws Throwable
{
StudentDaoImpl udi = (StudentDaoImpl)target;
Object result = null;
if (udi.getName() != null)
{
// 前置通知
try
{
result = methodProxy.invoke(target, args);
// 后置通知
}
catch (Exception e)
{
e.printStackTrace();
// 例外通知
}
finally
{
// 最终通知
}
}
return result;
}
public static void main(String[] agrs)
{
CglibProxy cglibProxy=new CglibProxy();
StudentDaoImpl st= (StudentDaoImpl)cglibProxy.createUserDaoImp2(new StudentDaoImpl("test"));
st.addStudent();
}
}
分享到:
相关推荐
CglibProxy.java
### CGLib动态代理(CGLibProxy) CGLib(Code Generation Library)是另一个常用的动态代理库,它通过字节码技术生成目标对象的子类来实现代理。与JDK动态代理相比,CGLib不需要目标对象实现任何接口,可以对类...
CGLib,全称为Code Generation Library,是一个强大的高性能的代码生成库,它在Java世界中被广泛应用,尤其是在动态代理和AOP(面向切面编程)领域。CGLIB是由Evan Schooler创建的一个开源项目,目前已被Apache软件...
CGLIBProxy cglibProxy = new CGLIBProxy(userDao); UserDao proxyUserDao = (UserDao) cglibProxy.getProxyInstance(); proxyUserDao.saveUser(); } } ``` ### Javassist 代理 Javassist 是一个用于操作字节...
CglibProxy cglibProxy = new CglibProxy(); Programmer proxy = (Programmer) cglibProxy.getInstance(); proxy.develop(); ``` 总结来说,JDK动态代理和Cglib代理各有优缺点。JDK代理简单易用,适用于目标对象...
proxy,jdkproxy-transaction,jdkproxy-salary,day02-itheima11-spring-08-cglibproxy,day02-itheima11-spring-09-aop.xml,day02-itheima11-spring-10-aop.xml.advice,day02-itheima11-spring-11-aop.xml.exception等...
CglibProxy proxy = new CglibProxy(); RealSubject realSubject = (RealSubject) proxy.getInstance(new RealSubject()); realSubject.doSomething(); } } ``` 总结来说,代理模式在Java中主要用于增加额外...
CglibProxy proxy = new CglibProxy(); Target target = (Target) proxy.getInstance(new Target()); target.doSomething(); } } class Target { public void doSomething() { System.out.println("Target ...
在这个例子中,`CglibProxy`实现了`MethodInterceptor`接口,`getInstance()`方法创建了一个代理对象,该对象在调用`doSomething()`方法时会打印出额外的信息。 总结来说,Java动态代理是Java程序设计中的一个重要...
在Android开发中,动态代理(Dynamic Proxy)是一种强大的设计模式,它允许我们在运行时创建具有相同接口的新对象,这些新对象的行为与原始对象相同,但可以添加额外的功能或修改其行为。动态代理主要由Java标准库中...
MyService cglibProxyService = (MyService) new CglibProxy().getInstance(service); cglibProxyService.doSomething(); } } ``` 在这个例子中,我们定义了一个`MyService`接口和它的实现`MyServiceImpl`。然后...
在这个例子中,`CglibProxy`实现了`MethodInterceptor`接口,`enhancer.create()`会返回一个代理对象,调用代理对象的方法时会执行`intercept`方法。 总结来说,Java代理机制为我们提供了扩展和控制已有对象行为的...
在这个ProxyDemo中,`CglibProxy`和`ReflectionProxy`都实现了对目标方法调用的拦截,但CGLib在性能上通常优于反射,因为它创建的是子类对象,而反射则需要在运行时解析类信息。然而,反射提供了更大的灵活性,可以...
在这个例子中,`CglibProxy`实现了`MethodInterceptor`接口,它的`intercept()`方法会在目标方法执行前后插入自定义逻辑。 4. **在Spring中的应用**: 在Spring AOP中,如果目标对象没有实现接口,Spring会自动...
Service cglibProxy = (Service) enhancer.create(); cglibProxy.doSomething(); ``` CGlib代理通过继承目标类并覆写其方法来实现,因此即使目标类没有接口也可以进行代理。 总结来说,JDK静态代理适用于目标类...
public class CglibProxy implements MethodInterceptor { public Object getInstance(Target target) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(target.getClass()); enhancer....
在Spring框架中,CGLIB(Code Generation Library)代理是一种常用的动态代理机制,它允许我们对目标对象进行...通过1606SpringDay03-5-CglibProxy这个文件,你可以更详细地学习到关于Spring中CGLIB代理的实现和应用。
- **CGLIBProxy**:这个目录包含CGLIB代理的例子,可能有一个或多个目标类,以及CGLIB用来生成代理类的配置和逻辑。 通过学习和实践这些例子,你可以深入理解这三种代理模式的实现细节和应用场景,从而更好地在实际...