使用注解开发AspectJ,已在java代码中加入@Aspect,为什么在配置中再次定义切面
来源:3-7 切点命名
chen_muke
2020-07-05 07:59:13
<?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.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--开启AspectJ的注解开发,自动代理=====================-->
<aop:aspectj-autoproxy/>
<!--目标类===================-->
<bean id="productDao" class="com.imooc.aspectJ.demo1.ProductDao"/>
<!--定义切面-->
<bean class="com.imooc.aspectJ.demo1.MyAspectAnno"/>
</beans>
@Aspect
public class MyAspectAnno {
@Before(value="myPointcut1()")
public void before(JoinPoint joinPoint){
System.out.println("前置通知=================="+joinPoint);
}
@AfterReturning(value="myPointcut2()",returning = "result")
public void afterReturing(Object result){
System.out.println("后置通知=================="+result);
}
@Around(value="myPointcut3()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("环绕前通知================");
Object obj = joinPoint.proceed(); // 执行目标方法
System.out.println("环绕后通知================");
return obj;
}
@AfterThrowing(value="myPointcut4()",throwing = "e")
public void afterThrowing(Throwable e){
System.out.println("异常抛出通知=============="+e.getMessage());
}
@After(value="myPointcut5()")
public void after(){
System.out.println("最终通知==================");
}
@Pointcut(value="execution(* com.imooc.aspectJ.demo1.ProductDao.save(..))")
private void myPointcut1(){}
@Pointcut(value="execution(* com.imooc.aspectJ.demo1.ProductDao.update(..))")
private void myPointcut2(){}
@Pointcut(value="execution(* com.imooc.aspectJ.demo1.ProductDao.delete(..))")
private void myPointcut3(){}
@Pointcut(value="execution(* com.imooc.aspectJ.demo1.ProductDao.findOne(..))")
private void myPointcut4(){}
@Pointcut(value="execution(* com.imooc.aspectJ.demo1.ProductDao.findAll(..))")
private void myPointcut5(){}
}2回答
好帮手慕小脸
2020-07-05
同学你好,并没有重复。在类上添加注解@Aspect是为了声明该类是个切面类。
而在xml中定义切面类是为了对切面类进行管理,从而对目标类进行代理

如果我的回答解决了你的疑惑,请采纳,祝学习愉快。
好帮手慕小脸
2020-07-05
同学你好,在xml中定义切面是为了对切面类进行管理。

如果这里不对切面类进行管理,它无法给目标类进行代理的
同学可以注释掉试试。注释前:
注释后:

如果不配置切面类,我们就不知道该如何给目标类在哪里做增强,做怎样的增强
如果我的回答解决了你的问题,请采纳,祝学习愉快.
相似问题