先在xml文件里配置上aop和context,用context来开启注解扫描,aop生成增强对象
<?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.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 开启注解扫描-->
<context:component-scan base-package="cn.zsp.spring5.aopnno"></context:component-scan>
<!--开启Aspect生成增强对象-->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>
这是一个被增强类:
package cn.zsp.spring5.aopnno;
import org.springframework.stereotype.Component;
@Component
public class User {
public void add(){
// int i=12/0;
System.out.println("这是我要演示的方法");
}
}
这是增强类
package cn.zsp.spring5.aopnno;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
@Component
@Aspect //生成代理对象
public class UserProxy {
@Before(value = "execution(* cn.zsp.spring5.aopnno.User.add(..))")
public void before(){
System.out.println("这是在方法前调用");
}
@After(value = "execution(* cn.zsp.spring5.aopnno.User.add(..))")
public void after(){
System.out.println("这个方法类似异常中的finally");
}
@AfterReturning(value = "execution(* cn.zsp.spring5.aopnno.User.add(..))")
public void afterReturn(){
System.out.println("这个方法会在方法返回后调用");
}
@AfterThrowing(value = "execution(* cn.zsp.spring5.aopnno.User.add(..))")
public void afterThrowing(){
System.out.println("这个方法会在发生错误的时候调用");
}
@Around(value = "execution(* cn.zsp.spring5.aopnno.User.add(..))")
public void around(ProceedingJoinPoint point) throws Throwable {
System.out.println("around环绕前");
point.proceed();
System.out.println("around环绕后");
}
}
这是我的测试类
package cn.zsp.spring5.testdemo;
import cn.zsp.spring5.aopnno.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDemo {
@Test
public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
User user = context.getBean("user", User.class);
user.add();
}
}