上回书说到注解式的操作,本文讲XML式。
XML式AOP
1:依赖包,和注解式相同。
2:准备配置文件。和注解式相同。
下面准备一个接口:
package com.imooc.aspectJ.demo2;
public interface CustomerDao {
public void save();
public String update();
public void delete();
public void findOne();
public void findAll();
}
实现类
package com.imooc.aspectJ.demo2;
public class CustomerDaoImpl implements CustomerDao {
@Override
public void save() {
System.out.println("保存客户。。。");
}
@Override
public String update() {
System.out.println("修改客户。。。");
return "666666666";
}
@Override
public void delete() {
System.out.println("删除客户。。。");
}
@Override
public void findOne() {
System.out.println("查询一个客户。。。");
}
@Override
public void findAll() {
System.out.println("查询所有客户。。。");
}
}
切面类:
package com.imooc.aspectJ.demo2;
import org.aspectj.lang.ProceedingJoinPoint;
public class MyAspectXml {
//前置通知,这里方法名是随意的
public void before(){
System.out.println("XML前置增强=============");
}
//后置通知
public void afterReturning(Object result){
System.out.println("XML方式的后置通知============="+result);
}
//环绕通知,也要传入ProceedingJoinPoint的参数,用来执行目标类方法。
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("环绕前===========");
//此方法可以执行,也可以不执行。
Object obj = joinPoint.proceed();
System.out.println("环绕后===============");
return obj;
}
}
配置文件:
<?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">
<!--配置目标类-->
<bean id="customerDao" class="com.imooc.aspectJ.demo2.CustomerDaoImpl"></bean>
<!--配置切面类-->
<bean id="myAspectXml" class="com.imooc.aspectJ.demo2.MyAspectXml"></bean>
<!--aop配置-->
<aop:config>
<!--配置切入点-->
<aop:pointcut id="pointcut1" expression="execution(* com.imooc.aspectJ.demo2.CustomerDao.save(..))"></aop:pointcut>
<aop:pointcut id="pointcut2" expression="execution(* com.imooc.aspectJ.demo2.CustomerDao.update(..))"></aop:pointcut>
<aop:pointcut id="pointcut3" expression="execution(* com.imooc.aspectJ.demo2.CustomerDao.delete(..))"></aop:pointcut>
<!--指定切面类-->
<aop:aspect ref="myAspectXml">
<!--配置前置增强。method指定增强设置方法,point-ref指定配置好的切入点-->
<aop:before method="before" pointcut-ref="pointcut1"></aop:before>
<!--配置后置增强-->
<aop:after-returning method="afterReturning" pointcut-ref="pointcut2" returning="result"></aop:after-returning>
<!--环绕增强-->
<aop:around method="around" pointcut-ref="pointcut3"></aop:around>
</aop:aspect>
</aop:config>
</beans>
既然是XML配置进行AOP开发,配置文件当然是重头戏。不过主要的步骤也就三个:
1:配置目标类,无需多言。
2:配置切面类,这个也不用多说。
3:重要的是指定aop配置:<aop:config>具体内容见上面代码。
具体分析来说,XML方式和注解式的内容有很多相通之处。