AOP
面向切面编程(Aspect Oriented Programming)
在纵向流程中添加横切面,不需要修改原有程序代码
- 高扩展性
- 原有功能释放部分逻辑
常用概念
切点 pointcut
前置通知 before advice
实现 MethodBeforeAdvice
接口
后置通知 after advice
实现 AfterReturningAdvice
接口
环绕通知 around advice
实现 MethodInteceptor接口
异常通知 throws advice
实现 ThrowsAdvice
接口
所有功能总称 切面
织入 把切面嵌入到原有功能
依赖jar包
aopalliance(1).jar
aspectjweaver.jar
<?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">
<!-- 前置通知bean>
<bean id="myBefore" class=""></bean>
<!-- 切面配置-->
<aop:config>
<!--配置切点 -->
<aop:pointcut expression="execution(* com.jhl.test.Demo.demo2(..))" id="p1"/>
<aop:advisor advice-ref="myBefore" pointcut-ref="p1"/>
</aop:config>
AspectJ
配置信息
<aop:config>
<aop:aspect ref="">
<aop:pointcut expression="" id=""/>
<!-- 异常通知 throwing 异常对象名 与参数名一致-->
<aop:after-throwing method="" pointcut-ref="" throwing=""/>
</aop:aspect>
</aop:config>
注解
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
<!--扫描-->
<context:component-scan base-package=""/>
<!-- true cglib 动态代理 false JDK动态店里 -->
<aop:aspectj-autoproxy proxy-target-class="false"></aop:aspectj-autoproxy>
</beans>
- @Compoent Bean的注解
- @Pointcut 切点的注解
- @Aspect 切面
- @Before 前置通知