java动态代理(AOP)

Posted silenceshining

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java动态代理(AOP)相关的知识,希望对你有一定的参考价值。

一、使用jdk自带的动态代理机制:

  • 定义一个普通的接口及实现类;
  • 定义一个InvocationHandler的实现类用于织入横向插入的操作(此处为打印信息);
  • 生成接口的代理类;
  • 调用接口方法,实现动态代理。
  • package aopdemo.jdk;
    
    public interface INormalService 
    
        public void service();
    
    
    package aopdemo.jdk;
    
    public class NormalServiceImpl implements INormalService 
    
        @Override
        public void service() 
            System.out.println("invoke service");
    
        
    
    
    package aopdemo.jdk;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    
    public class MyInvocationHandler implements InvocationHandler 
    
        Object target;
    
        public MyInvocationHandler(Object target) 
            this.target = target;
        
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args)
                throws Throwable 
            System.out.println("before service");
            Object object = method.invoke(target, args);
            System.out.println("after service");
            return object;
        
    
    
    package aopdemo.jdk;
    
    import java.lang.reflect.Proxy;
    
    public class JdkProxyDemo 
    
        public static void main(String[] args) 
    
            INormalService normalService = new NormalServiceImpl();
            MyInvocationHandler handler = new MyInvocationHandler(normalService);
            INormalService iNormalService = (INormalService) Proxy
                    .newProxyInstance(normalService.getClass().getClassLoader(),
                            normalService.getClass().getInterfaces(), handler);
            iNormalService.service();
    
        
    
    

    执行结果为:

  • before service
    invoke service
    after service

以上是关于java动态代理(AOP)的主要内容,如果未能解决你的问题,请参考以下文章

(转)java动态代理与aop

java开发必学知识:动态代理

Java使用动态代理实现AOP

Java代理之(jdk静态代理/jdk动态代理/cglib动态代理/aop/aspectj)

java动态代理(AOP)

[JAVA]动态代理与AOP的千丝万缕