spring 的aop操作,基于aspectj的注解
2018-06-07 本文已影响4人
DouDouZH
一、步骤
1、用配置创建对象
![](https://img.haomeiwen.com/i7900186/4c03f3933dd96ba5.png)
2、在spring配置文件里开启aop的扫描操作
![](https://img.haomeiwen.com/i7900186/0f2b6dc92ed3aabe.png)
3、在增强的类上用注解和方法上用具体的注解
![](https://img.haomeiwen.com/i7900186/43cbc5a9abf45953.png)
二、代码
切点user.java
package work.zhangdoudou.aop;
public class User {
public void addUser() {
System.out.println("addUser----------");
}
}
增强/通知UserAop.java
package work.zhangdoudou.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class UserAop {
//在方法上用注解配置
@Before(value="execution(* work.zhangdoudou.aop.User.*(..))")
public void before() {
System.out.println("前置增强------------");
}
@AfterReturning(value="execution(* work.zhangdoudou.aop.User.*(..))")
public void afterReturning() {
System.out.println("后置增强------------");
}
@After(value="execution(* work.zhangdoudou.aop.User.*(..))")
public void after() {
System.out.println("最终增强------------");
}
//环绕通知
@Around(value="execution(* work.zhangdoudou.aop.User.*(..))")
public void around(ProceedingJoinPoint point) throws Throwable {
//执行之前
System.out.println("环绕-方法执行之前----");
//执行被增强的方法
point.proceed();
//执行之后
System.out.println("环绕-方法执行之后----");
}
//异常通知
@AfterThrowing(value="execution(* work.zhangdoudou.aop.User.*(..))")
public void afterThrowing() {
System.out.println("异常通知-----------");
}
}
配置applicationContext.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:context="http://www.springframework.org/schema/context"
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/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
<!--1 配置对象 -->
<bean id="user" class="work.zhangdoudou.aop.User"></bean>
<bean id="userAop" class="work.zhangdoudou.aop.UserAop"></bean>
<!--开启aop的操作 开启自动代理 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>
测试Test2.java
package work.zhangdoudou.test;
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import work.zhangdoudou.aop.Book;
import work.zhangdoudou.aop.User;
public class Test2 {
@Test
public void test() {
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
User user=(User)context.getBean("user");
user.addUser();
}
}
三、运行结果
![](https://img.haomeiwen.com/i7900186/fbb1274084d1dde1.png)