Spring的AOP的基于AspectJ注解开发
将applicationContext.xml配置文件中的<aop:config></aop:config>中的内容,通过注解的方式,配置到切面类上。
1.1.1.1 创建项目,引入jar包
1.1.1.2 开始编写
将要被增强的类:
applicationcontext.xml的编写
测试类的编写:
1.1.2 Spring的注解的AOP的通知类型
1.1.2.1 @Before :前置通知
1.1.2.2 @AfterReturning :后置通知
1.1.3 Spring的注解的AOP的切入点的配置
1.1.3.1 Spring的AOP的注解切入点的配置
上述的设置,只针对单个方法配置单个通知
但是当我们希望有一个方法,拥有多个通知的时候,我们可以使用这种方法
将applicationContext.xml配置文件中的<aop:config></aop:config>中的内容,通过注解的方式,配置到切面类上。
1.1.1.1 创建项目,引入jar包
1.1.1.2 开始编写
将要被增强的类:
public class OrderDao {
public void save(){
System.out.println("保存订单");
}
public String delete(){
System.out.println("删除订单");
return "删除成功";
}
public void find(){
System.out.println("查看订单");
int avg = 124/0;
}
public void update(){
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"
xmlns:tx="http://www.springframework.org/schema/tx"
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
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
将目标类控制反转到Spring
<bean id="orderDao" class="com.liubo.spring.demo1.OrderDao"></bean>
将切面类控制反转到Spring
<bean id="myAspect" class="com.liubo.spring.demo1.MyAspect"></bean>
<aop:aspectj-autoproxy/>
</beans>
切面类的编写:
@Aspect
public class MyAspect {
@Before(value = "execution(* com.liubo.spring.demo1.OrderDao.save(..))")
public void myBefore(){
System.out.println("这是前置通知");
}
}
测试类的编写:
public class SpringDemo1 {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationcontext.xml");
@Test
public void demo1() {
OrderDao orderDao = ac.getBean("orderDao", OrderDao.class);
orderDao.save();
}
}
1.1.2 Spring的注解的AOP的通知类型
1.1.2.1 @Before :前置通知
1.1.2.2 @AfterReturning :后置通知
@AfterReturning(value="execution(* com.liubo.spring.demo1.OrderDao.delete(..))",returning="result")
public void myAfterReturn(Object result ){
System.out.println("这是一个后置带返回值的通知"+" "+result);
}
1.1.2.3
@Around
:环绕通知
@Around(value="execution(* com.liubo.spring.demo1.OrderDao.update(..))")
public Object myAround(ProceedingJoinPoint joinPoint) throws Throwable{
System.out.println("这是环绕通知的----前置通知");
Object object = joinPoint.proceed();
System.out.println("这是环绕通知的----后置通知");
return object;
}
1.1.2.4
@AfterThrowing
:异常抛出通知
@AfterThrowing(value="execution(* com.liubo.spring.demo1.OrderDao.find(..))",throwing="e")
public void myThrowing(Throwable e){
System.out.println("异常发生了");
System.out.println(e.getMessage());
}
1.1.2.5
@After
:最终通知
1.1.3 Spring的注解的AOP的切入点的配置
1.1.3.1 Spring的AOP的注解切入点的配置
上述的设置,只针对单个方法配置单个通知
但是当我们希望有一个方法,拥有多个通知的时候,我们可以使用这种方法
@AfterThrowing(value="MyAspect.pointcut1()",throwing="e")为切点增加通知
public void myThrowing(Throwable e){
System.out.println("异常发生了");
System.out.println(e.getMessage());
}
@Pointcut(value="execution(* com.liubo.spring.demo1.OrderDao.find(..))") 配置切点
private void pointcut1(){};