`
chenhongwei0924
  • 浏览: 42479 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

CglibProxy

阅读更多
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

    CglibProxy.java

    JAVA动态代理

    ### CGLib动态代理(CGLibProxy) CGLib(Code Generation Library)是另一个常用的动态代理库,它通过字节码技术生成目标对象的子类来实现代理。与JDK动态代理相比,CGLib不需要目标对象实现任何接口,可以对类...

    cglib(动态代理)

    CGLib,全称为Code Generation Library,是一个强大的高性能的代码生成库,它在Java世界中被广泛应用,尤其是在动态代理和AOP(面向切面编程)领域。CGLIB是由Evan Schooler创建的一个开源项目,目前已被Apache软件...

    Java 动态代理.md

    CGLIBProxy cglibProxy = new CGLIBProxy(userDao); UserDao proxyUserDao = (UserDao) cglibProxy.getProxyInstance(); proxyUserDao.saveUser(); } } ``` ### Javassist 代理 Javassist 是一个用于操作字节...

    16-Java代理模式的学习笔记1

    CglibProxy cglibProxy = new CglibProxy(); Programmer proxy = (Programmer) cglibProxy.getInstance(); proxy.develop(); ``` 总结来说,JDK动态代理和Cglib代理各有优缺点。JDK代理简单易用,适用于目标对象...

    spring练习项目.7z

    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等...

    代理模式-静态动态代理-jdk动态代理-cglib动态代理

    CglibProxy proxy = new CglibProxy(); RealSubject realSubject = (RealSubject) proxy.getInstance(new RealSubject()); realSubject.doSomething(); } } ``` 总结来说,代理模式在Java中主要用于增加额外...

    Java代理实战Demo

    CglibProxy proxy = new CglibProxy(); Target target = (Target) proxy.getInstance(new Target()); target.doSomething(); } } class Target { public void doSomething() { System.out.println("Target ...

    java动态代理(JDK和cglib)共10页.pdf.z

    在这个例子中,`CglibProxy`实现了`MethodInterceptor`接口,`getInstance()`方法创建了一个代理对象,该对象在调用`doSomething()`方法时会打印出额外的信息。 总结来说,Java动态代理是Java程序设计中的一个重要...

    Android-Android中动态代理的使用

    在Android开发中,动态代理(Dynamic Proxy)是一种强大的设计模式,它允许我们在运行时创建具有相同接口的新对象,这些新对象的行为与原始对象相同,但可以添加额外的功能或修改其行为。动态代理主要由Java标准库中...

    示例代码:java动态代理和cglib代理的简单例子

    MyService cglibProxyService = (MyService) new CglibProxy().getInstance(service); cglibProxyService.doSomething(); } } ``` 在这个例子中,我们定义了一个`MyService`接口和它的实现`MyServiceImpl`。然后...

    java 代理demo

    在这个例子中,`CglibProxy`实现了`MethodInterceptor`接口,`enhancer.create()`会返回一个代理对象,调用代理对象的方法时会执行`intercept`方法。 总结来说,Java代理机制为我们提供了扩展和控制已有对象行为的...

    java cglib和反射demo

    在这个ProxyDemo中,`CglibProxy`和`ReflectionProxy`都实现了对目标方法调用的拦截,但CGLib在性能上通常优于反射,因为它创建的是子类对象,而反射则需要在运行时解析类信息。然而,反射提供了更大的灵活性,可以...

    简单实现Cglib子类代理

    在这个例子中,`CglibProxy`实现了`MethodInterceptor`接口,它的`intercept()`方法会在目标方法执行前后插入自定义逻辑。 4. **在Spring中的应用**: 在Spring AOP中,如果目标对象没有实现接口,Spring会自动...

    JAVA JDK静态代理、动态代理、CGlib代理的代码演示

    Service cglibProxy = (Service) enhancer.create(); cglibProxy.doSomething(); ``` CGlib代理通过继承目标类并覆写其方法来实现,因此即使目标类没有接口也可以进行代理。 总结来说,JDK静态代理适用于目标类...

    代理模式(Proxy Pattern)完整示例代码

    public class CglibProxy implements MethodInterceptor { public Object getInstance(Target target) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(target.getClass()); enhancer....

    spring03-5

    在Spring框架中,CGLIB(Code Generation Library)代理是一种常用的动态代理机制,它允许我们对目标对象进行...通过1606SpringDay03-5-CglibProxy这个文件,你可以更详细地学习到关于Spring中CGLIB代理的实现和应用。

    java中的三种代理模式

    - **CGLIBProxy**:这个目录包含CGLIB代理的例子,可能有一个或多个目标类,以及CGLIB用来生成代理类的配置和逻辑。 通过学习和实践这些例子,你可以深入理解这三种代理模式的实现细节和应用场景,从而更好地在实际...

Global site tag (gtag.js) - Google Analytics