JAVA之AOP

Posted zincredible

tags:

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

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 }
View Code

 

2.静态代理

 

以上是关于JAVA之AOP的主要内容,如果未能解决你的问题,请参考以下文章

Java--Spring之AOP面向切面编程

Android AOP编程之AspectJ

Android AOP编程之AspectJ

Android AOP编程之AspectJ

每日一学之认识Spring中的AOP

Java开发Spring之AOP详解(xml--注解->方法增强事务管理(声明事务的实现))