一、在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
二、主要作用:日志记录,性能统计,安全控制,事务处理,异常处理等等。
三、AOP:我们通常称为面向切面编程,这个切面有什么不一样的地方呢?相对于原来使用的OOP,我们在这个基础上面加入其它相关逻辑而不影响本身的实现逻辑。通俗一点就是在原来执行中加入:之前、之后、return、异常、环绕等处理。目的介绍代码耦合,并且不会影响原来的逻辑。常用的方式就是日志了,日志收集,异常处理等。
四、实现过程:
1)需要被处理的例子
public class AspectTest { public void test() { System.out.println("test"); } }
2)需要对相应对象进行的处理类
@Aspect public class AspectHandler { @Before("execution(* *.*(..))") public void before() { System.out.println("before"); } @After("execution(* *.*(..))") public void after() { System.out.println("after"); } }
备注:execution:表达式可以自己百度,我这里有一个例子
3)spring-bean.xml配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <aop:aspectj-autoproxy/> <bean class="com.pinnet.aop.AspectHandler"/> <bean id="aspectTest" class="com.pinnet.aop.AspectTest"/> </beans>
4)测试
public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring-bean.xml"); AspectTest aspectTest = (AspectTest) context.getBean("aspectTest"); aspectTest.test(); }
五、源码部分:这里分两部分了讲,主要是aop的实现过程,以及动态代理过程