java动态代理(AOP)

本文详细介绍并演示了如何利用JDK自带的动态代理机制实现AOP(面向切面编程)。通过定义接口、实现类及InvocationHandler,文章展示了如何生成接口的代理类,并在调用接口方法时织入额外的操作,如打印信息。

一、使用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

转载于:https://www.cnblogs.com/silenceshining/p/11129688.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值