Spring框架中的AOP使用详解
spring ioc注解一、引言:
Spring框架是目前最为流行的轻量级Java开发框架,它不仅提供了一个容器,而且提供了一个完整的IoC(Inverse of Control)解决方案,可用于构建企业级应用和互联网应用。Spring框架的一个核心功能就是AOP(Aspect Oriented Programming),它是编写业务逻辑和系统级服务领域特定概念所使用的一种编程方式,可以很好地实现业务逻辑和系统级服务的解耦。
二、AOP的基本概念:
1.切面(Aspect):一个关注点的模块化,即它是对横切关注点(例如日志记录、性能统计等)的模块化的实现。
2.连接点(Joinpoint):程序执行过程中明确的点,例如方法的调用或特定的异常抛出。
3.通知(Advice):在切面的某个特定连接点上执行的动作。
4.切入点(Pointcut):匹配连接点的断言,通知和一个切入点表达式关联,并在满足表达式的连接点上运行(例如,在某个类的某个方法执行之前)。
5.引入(Introduction):声明额外的方法或字段来提供一个类型的实现。
6.目标对象(Target object):被一个或多个切面所通知(Advice)的对象。也称为被通知(advised)对象。
7.代理(Proxy):向目标对象应用一个或多个切面后的结果,客户端只能看到代理对象的行为。    Spring AOP中的代理可以使用JDK动态代理或者CGLIB生成代理类。实际情况中,Spring AOP默认使用JDK动态代理生成代理类。
8.织入(Weaving):将切面与其他应用类型或对象链接创建一个新的聚合对象的过程。这些通知和新的聚合对象可以在运行时被调用。
三、AOP的应用场景:
1.日志记录:记录方法执行时间、方法执行日志等。
2.权限控制:在方法执行前和执行后进行权限校验。
3.性能监控:统计方法执行时间,检查性能瓶颈。
4.数据缓存:将返回结果缓存,以提升系统性能。
5.事务管理:在方法执行前开启事务,在方法执行后提交或回滚事务。
6.异常处理:在方法执行过程中,处理系统异常或业务异常等。
四、AOP的实现:
Spring AOP提供了两种类型的AOP:基于代理(Proxy-Based)的AOP和纯POJO(Plain Old Java Object)的AOP。基于代理的AOP可以使用JDK动态代理或CGLIB代理创建代理对象,而纯POJO是没有代理对象的,它使用装载时编织(Load-Time Weaving)进行织入。
基于代理的AOP是Spring中最常用的AOP形式,它通过在运行时生成代理对象,切入目标方法进行织入。基于代理的AOP有以下两种方式:
1. Schema Based:使用XML Schema配置AOP。这种方式下,需要在XML文件中使用“aop:aspect”表示一个切面,然后配置引入切面的目标类和方法,以及切面的动作。
例如:
<aop:aspectj-autoproxy />
<aop:config>
    <aop:aspect id="exceptionAspect" ref="exceptionAdvice">
        <aop:pointcut id="exceptionPointcut"
            expression="execution(* ample..business..*Service.*(..))" />
        <aop:after-throwing pointcut-ref="exceptionPointcut"
            method="handleException"
            throwing="bizException" />
    </aspect>
</aop:config>
2. Annotation Based:使用注解方式配置AOP。这种方式下,需要在目标类上使用@Aspect注解表示该类是切面,使用@Before、@After、@AfterReturning、@AfterThrowing、@Around等注解表示具体的通知(即动作)。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。