一、使用注解(基于Aspect)
1、spring不会自动去寻找注解,必须告诉spring那个包下的类有注解
1.1 先引入xmlns:context命名空间
<context:component-scan base-package="com.bjsxt.advice"></context:component-scan>
2、@Component
2.1 相当于<bean/>
2.2 如果没有参数,把类名首字母变小写,相当于<bean id=" "/>
2.3 也可以 @Component(" 自定义名称 ")
3、实现步骤:
3.1、在spring配置文件中设置注解在哪些包中
<context:component-scan base-package="com.bjsxt.advice,com.bjsxt.test"></context:component-scan>
3.2、在Demo类中添加 @Componet
3.2.1 在方法上添加 @Pointcut(" ") 定义切点
@Component public class Demo { @Pointcut("execution(* com.bjsxt.test.Demo.demo1())") public void demo1(){ System.out.println("demo1"); } }
3.3、在通知类中配置
3.3.1 @Component 类被spring管理
3.3.2 @Aspect 相当于<aop:aspect/> 表示通知方法在当前类中
@Component @Aspect public class Advice { @Before("com.bjsxt.test.Demo.demo1()") public void mybefore(){ System.out.println("前置通知111"); } @After("com.bjsxt.test.Demo.demo1()") public void myafter(){ System.out.println("后置通知2222"); } @AfterThrowing("com.bjsxt.test.Demo.demo1()") public void mythrow(){ System.out.println("异常通知3333"); } @Around("com.bjsxt.test.Demo.demo1()") public Object myarround(ProceedingJoinPoint p) throws Throwable{ System.out.println("环绕前置"); Object result = p.proceed(); System.out.println("环绕后置"); return result; } }