AOP(面向切面编程),官方定义就不讲了,可自行百度。按照我自己的理解就是,将代码片段动态的注入某一个已知的代码片段某一处。这样做的好处就是,在不改变原有代码情况下,又能扩充原有业务的功能。
AOP有两种实现方式:
1.动态代理
例子:
假设我们向给一个类的方法入口和出口各打印一行日志,但我们有不能改变原有代码。
1 package com; 2 3 public interface AlgorithmItf 4 { 5 void add(); 6 7 void del(); 8 9 void update(); 10 11 void find(); 12 } 13 14 package com; 15 16 public class Algorithm implements AlgorithmItf 17 { 18 public void add() 19 { 20 System.out.println("add..."); 21 } 22 public void del() 23 { 24 System.out.println("del..."); 25 } 26 public void update() 27 { 28 System.out.println("update..."); 29 } 30 public void find() 31 { 32 System.out.println("find..."); 33 } 34 } 35 36 37 38 package com; 39 40 import java.lang.reflect.InvocationHandler; 41 import java.lang.reflect.Method; 42 import java.lang.reflect.Proxy; 43 44 public class AopDyProxy<T> implements InvocationHandler 45 { 46 private T o; 47 48 public T createInstance(T t) 49 { 50 o=t; 51 return (T)(Proxy.newProxyInstance(o.getClass().getClassLoader(), o.getClass().getInterfaces(), this)); 52 } 53 54 @Override 55 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable 56 { 57 Object re=null; 58 System.out.println(method.getName()+" enter"); 59 re=method.invoke(o, args); 60 System.out.println(method.getName()+" exit"); 61 return re; 62 } 63 public static void main(String[] args) 64 { 65 AopDyProxy<AlgorithmItf> p=new AopDyProxy<AlgorithmItf>(); 66 AlgorithmItf a=p.createInstance(new Algorithm()); 67 a.add(); 68 a.update(); 69 } 70 71 }
2.静态代理