一与柑、步驟
1、用配置創(chuàng)建對(duì)象
image.png
2、在spring配置文件里開(kāi)啟aop的掃描操作
image.png
3榔袋、在增強(qiáng)的類(lèi)上用注解和方法上用具體的注解
image.png
二让蕾、代碼
切點(diǎn)user.java
package work.zhangdoudou.aop;
public class User {
public void addUser() {
System.out.println("addUser----------");
}
}
增強(qiáng)/通知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("前置增強(qiáng)------------");
}
@AfterReturning(value="execution(* work.zhangdoudou.aop.User.*(..))")
public void afterReturning() {
System.out.println("后置增強(qiáng)------------");
}
@After(value="execution(* work.zhangdoudou.aop.User.*(..))")
public void after() {
System.out.println("最終增強(qiáng)------------");
}
//環(huán)繞通知
@Around(value="execution(* work.zhangdoudou.aop.User.*(..))")
public void around(ProceedingJoinPoint point) throws Throwable {
//執(zhí)行之前
System.out.println("環(huán)繞-方法執(zhí)行之前----");
//執(zhí)行被增強(qiáng)的方法
point.proceed();
//執(zhí)行之后
System.out.println("環(huán)繞-方法執(zhí)行之后----");
}
//異常通知
@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 配置對(duì)象 -->
<bean id="user" class="work.zhangdoudou.aop.User"></bean>
<bean id="userAop" class="work.zhangdoudou.aop.UserAop"></bean>
<!--開(kāi)啟aop的操作 開(kāi)啟自動(dòng)代理 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>
測(cè)試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();
}
}
三、運(yùn)行結(jié)果
image.png