zoukankan      html  css  js  c++  java
  • 利用CGLib实现动态代理实现Spring的AOP

    当我们用Proxy 实现Spring的AOP的时候, 我们的代理类必须实现了委托类的接口才能实现。 而如果代理类没有实现委托类的接口怎么办? 那么我们就可以通过CGLib来实现

    package cn.gbx.aop;
     
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
     
    import cn.gbx.service.impl.PersonService;
     
    public class ProxyFactory implements InvocationHandler{
        private Object targetObject;
         
        public Object createProxyInstance(Object targetObject) {
            this.targetObject = targetObject;
            return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(),
                    this.targetObject.getClass().getInterfaces(), 
                    this);
        }
     
        @Override
        public Object invoke(Object proxy, Method method, Object[] args)
                throws Throwable {
            PersonService service = (PersonService) this.targetObject;
            Object result = null;
            if (service.getUser() != null) {
                result = method.invoke(this.targetObject, args);
            }
            return result;
        }
    }
    

      

    AOP中的一些概念:

    Aspect(切面):指横切性关注点的抽象即为切面,它与类相似,只是两者的关注点不一样,类是对物体特征的抽象,而切面横切性关注点的抽象.

    joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点,实际上joinpoint还可以是field或类构造器)

    Pointcut(切入点):所谓切入点是指我们要对那些joinpoint进行拦截的定义.

    Advice(通知):所谓通知是指拦截到joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知

    Target(目标对象):代理的目标对象

    Weave(织入):指将aspects应用到target对象并导致proxy对象创建的过程称为织入.

    Introduction(引入):在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.

  • 相关阅读:
    分布式锁_00_资源帖
    JVM_总结_03_Java发展史
    JVM_总结_02_Java技术体系
    JVM_总结_00_资源帖
    分布式事务_03_2PC框架raincat源码解析-事务提交过程
    Java企业微信开发_15_查询企业微信域名对应的所有ip
    分布式事务_02_2PC框架raincat源码解析-启动过程
    Disruptor_学习_00_资源帖
    Git_学习_09_Commit message 和 Change log 编写指南
    分布式_事务_01_2PC框架raincat快速体验1
  • 原文地址:https://www.cnblogs.com/E-star/p/3560684.html
Copyright © 2011-2022 走看看