由于spring整合了aop,所以不用写原生的aop,直接引入坐标,然后相关配置一个,如下
1、导入AOP相关坐标
2、创建目标接口和目标类(内部有切点)
3、创建切面类(内部有增强方法)
4、将目标类和切面类的对象创建权交给spring
5、在applicationContext.xml中配置织入关系
6、测试代码
具体过程:
第一步: 在pom.xml里面导入如下坐标
<dependencies> <dependency>   <groupId>org.springframework</groupId>   <artifactId>spring-context</artifactId>   <version>5.0.5.RELEASE</version> </dependency> <dependency>   <groupId>junit</groupId>   <artifactId>junit</artifactId>   <!--版本必须大于等于4.12-->   <version>4.12</version> </dependency> <!--导入aop需要的坐标--> <dependency>   <groupId>org.springframework</groupId>   <artifactId>spring-core</artifactId>   <version>5.0.5.RELEASE</version> </dependency> <dependency>   <groupId>org.aspectj</groupId>   <artifactId>aspectjweaver</artifactId>   <version>1.8.4</version> </dependency>
第二步: 在src/main/java/com.huanf目录下新建aop目录
第三步: 在aop目录里面新建Target类,写入如下
//目标类,该类的save方法会被Advice类增强public class Target implements TargetInterface {  public void save() {     System.out.println("save方法正在启动 -- xml方式实现aop"); }}
第四步: 在aop目录下新建TargetInterface接口,写入如下
public interface TargetInterface { public void save();}
第五步: 在aop目录下新建MyAspect类,写入如下
public class MyAspect { public void before_met(){     System.out.println("前置增强 -- xml方式实现aop"); }}
第六步: 在src/main/resources目录下新建applicationContext.xml,里面写入如下
 <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"> <!--配置目标对象,我们会在src/test/java/com.huanf.test/AopTest类里面进行测试target--> <bean id="target" class="com.huanf.aop.Target"></bean> <!--配置切面对象--> <bean id="myAspecT" class="com.huanf.aop.MyAspect"></bean> <!--配置织入,内部要配置: 哪些方法(其实指的就是切点)需要进行哪些增强(其实指定就是前置增强、后置增强、其它增强)--> <aop:config>     <!--声明切面,即指定上面的id作为切面,不然上面我们写的id="myAspecT"只是一个普通的bean,当声明了之后myAspecT就不再是普通的bean,而是切面-->     <aop:aspect ref="myAspecT">         <!--切面=切点+通知,通知也称为增强。before表示前置增强,method表示哪个方法(在MyAspect类里面的哪个方法)要进行前置增强。         pointcut表示切点,execution里面表示对Target类的save方法增强。下面那行的execution括号里面的叫'切点表达式'-->         <aop:before method="before_met" pointcut="execution(public void com.huanf.aop.Target.save())"/>         <!--上面那行的意思: 当访问save方法时,save方法会进行前置增强,前置增强的代码在MyAspect类的before_met方法里面-->     </aop:aspect> </aop:config> <!--把上面那个<aop:config>标签注释掉,那么我们在com.huanf.test.AopTest类里面测试的就是未增强的save方法--> <!--如果要增强别的方法的话,就把execution括号里面的全限定名改掉即可--></beans>
第七步: 测试。创建目录src/test/java,右键java目录,创建com.huanf.test.AopTest类。首先,在pom.xml里面添加如下
<!--引入测试aop的包--><dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-test</artifactId>      <version>5.0.5.RELEASE</version></dependency>然后,在AopTest类里面写入如下
xxxxxxxxxx//测试AOP动态代理(SpringJUnit4ClassRunner.class) //指定运行引擎是括号里的("classpath:applicationContext.xml") //指定使用的配置文件是src/main/resources/applicationContext.xmlpublic class AopTest {     //我们要测com.huanf.aop.Target类里面的save方法(调用save方法需要去com.huanf.aop.TargetInterface里面,才有具体的调用),    //所以要引入(注入)applicationContext.xml里面id为target的bean    private TargetInterface target_itf;        //写一个测试方法    public void test1(){        target_itf.save();    }}
这节课讲的是从0到1,下节课会解释其中的细节