1、导入 AOP 库,里面包含 aspectj 的库。
2、配置文件中需要配置 aspectj 的支持(红色标注处)1
2
3
4
5
6
7
8
9
10
11<?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-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<span style="color:#ff0000;"><aop:aspectj-autoproxy />;</span>
<bean id="aspectBean" class="com.jayxhj.ch08.pojos.AspectBean" />
<bean id="userService" class="com.jayxhj.ch08.bean.UserServicesImpl" />
</beans>
3、在 AspectBean 中配置切入点1
2
3
4
5
6
7
8
9
10packagecom.jayxhj.ch08.pojos;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect // 必须放在类的前面
public class AspectBean {
1、导入 AOP 库,里面包含 aspectj 的库。
2、配置文件中需要配置 aspectj 的支持(红色标注处)
<?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-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd “>
<aop:aspectj-autoproxy />
<bean id=“aspectBean” class=“com.jayxhj.ch08.pojos.AspectBean” />
<bean id=“userService” class=“com.jayxhj.ch08.bean.UserServicesImpl” />
</beans>
3、在 AspectBean 中配置切入点 1
2
3
4
5
6
7
8
9
10packagecom.jayxhj.ch08.pojos;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect // 必须放在类的前面
publicclass AspectBean {
@Pointcut(“execution( com...Service.(..))”) // 切入点表达式
private void all() {
}; // 签名
// 声明签名和切入点表达式
@Before(“all()”)
public void checkAuth() {
}
@After(“all()”)
public void release() {
}
@AfterReturning(returning=”result”,pointcut=”execution( com...Service.(..))”)
public void log(Object result) {
}
@AfterThrowing(pointcut=”execution( com...Service.(..))”,throwing=”ex”)
public void processException(Throwable ex) {
}
@Around(“all()”)
public void proceedInTrans(ProceedingJoinPoint joinpoint) throws Throwable {
}
}
注意事项:使用 aspectj 配置增强时 AfterReturning 和 AfterThrowing 的参数需匹配。
基于 Annotation 配置 AOP 的两种方式:
- 在每个方法前单独配置;(五种增强都能使用)
- 将切入点表达式抽离出来,在需要调用时调用;(AfterReturning 和 AfterThrowing 的参数需匹配,不能使用)