如果不适用接口,那么必须自己定义通知类并在xml配置文件中设置!
不使用接口完成AOP,很大概率Spring使用的是cglib动态代理
Log2.java
package com.atstudy.log;
/**
* 不使用接口完成AOP,很大概率Spring使用的是cglib动态代理
*/
public class Log2
{
/**
* 用于前置通知的方法
*/
public void before()
{
System.out.println("方法调用了...");
}
/**
* 用于最终通知的方法
*/
public void after()
{
System.out.println("方法执行完了...");
}
}
spring.xml 此处只粘贴关键代码
<bean id="log2" class="com.atstudy.log.Log2"></bean>
<!--配置不使用接口的AOP-->
<aop:config>
<!--
在指定切入点使用Log2完成前置通知和后置通知
-->
<aop:aspect ref="log2">
<!--配置切入点-->
<aop:pointcut id="qrd" expression="execution(* com.atstudy.controller.*.*(..))"/>
<!--
配置前置通知:
在指定包中的所有类中的所有方法前执行的通知
添加Log2中的before方法,作为前置通知,并关联pointcut切入点
method属性表示Log2中的那个方法作为前置通知的方法
-->
<aop:before method="before" pointcut-ref="qrd"></aop:before>
<!--
配置最终通知:
在指定的包中的所有类的所有方法执行后执行
添加Log2中的after方法,作为最终通知,并关联pointcut切入点
-->
<aop:after method="after" pointcut-ref="qrd"></aop:after>
</aop:aspect>
</aop:config>
性代码,其他和上面AOP一样,此处省略
通过测试test进行测试