同上一节一样,只不过注解改为了配置文件
同样创建接口类和实体类
接口类
package SpringAopxml;
public interface Userformula {
public int add(int i,int j);
public int sub(int i,int j);
public int mul(int i,int j);
public int div(int i,int j);
}
实体类:
不同点没有 注解。
package SpringAopxml;
public class formulaimpl implements Userformula {
@Override
public int add(int i, int j) {
// TODO 自动生成的方法存根
int result=i+j;
return result;
}
@Override
public int sub(int i, int j) {
// TODO 自动生成的方法存根
int result=i-j;
return result;
}
@Override
public int mul(int i, int j) {
// TODO 自动生成的方法存根
int result=i*j;
return result;
}
@Override
public int div(int i, int j) {
// TODO 自动生成的方法存根
int result=i/j;
return result;
}
}
切面类:
所有的通知方法,没有注解
package SpringAopxml;
import java.util.Arrays;
import org.aspectj.lang.JoinPoint;
public class LoggingAspect {
public void beformethod(JoinPoint joinPoint) {
//切入点方法名
String methodName = joinPoint.getSignature().getName();
//将切入点获取的值传入集合
Object [] args = joinPoint.getArgs();
System.out.println("The method " + methodName + " begins with " + Arrays.asList(args));
}
public void afterMethod(JoinPoint joinPoint){
String methodName = joinPoint.getSignature().getName();
System.out.println("The method " + methodName + " ends");
}
public void afterreturnning(JoinPoint joinPoint,Object result) {
String methodName=joinPoint.getSignature().getName();
System.out.println("The method"+methodName+"result:"+result);
}
public void afterthrowig(JoinPoint joinPoint,Exception ex) {
String methodname=joinPoint.getSignature().getName();
System.out.println("The method"+methodname+"exception:"+ex);
}
}
类写完了,开始xml配置:
- 创建一个XML文件
- 配置 实体bean
<!-- 配置bean -->
<bean id="userformula" class="SpringAopxml.formulaimpl"></bean>
3. 配置切面bean
<!-- 配置切面的bean -->
<bean id="aspectj" class="SpringAopxml.LoggingAspect"></bean>
4. 配置Aop
4.1 配置切入点
<!-- 配置切点表达式 -->
<aop:pointcut expression="execution(public int SpringAop.*.*(int, int))" id="pointcut"/>
4.2 配置Aop的切面
order 可以改变切面的位置
<!-- 配置切面 -->
<aop:aspect ref="aspectj" order="1">
4.3 配置通知
前置通知 方法名 切入点
<aop:before method="beformethod" pointcut-ref="pointcut"/>
后置通知 方法名 切入点
<aop:after method="afterMethod" pointcut-ref="pointcut"/>
返回通知 方法名 切入点 返回值
<aop:after-returning method="afterreturnning" pointcut-ref="pointcut" returning="result"/>
异常通知 方法名 切入点 异常信息
<aop:after-throwing method="afterthrowig" pointcut-ref="pointcut" throwing="ex"/>
配置完成。
总的xml文件
<?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-4.0.xsd">
<!-- 配置bean -->
<bean id="userformula" class="SpringAopxml.formulaimpl"></bean>
<!-- 配置切面的bean -->
<bean id="aspectj" class="SpringAopxml.LoggingAspect"></bean>
<!-- 配置AOP -->
<aop:config>
<!-- 配置切点表达式 -->
<aop:pointcut expression="execution(public int SpringAop.*.*(int, int))" id="pointcut"/>
<!-- 配置切面 -->
<aop:aspect ref="aspectj" order="1">
<!-- 配置前置通知 需要方法 切入点-->
<aop:before method="beformethod" pointcut-ref="pointcut"/>
<aop:after method="afterMethod" pointcut-ref="pointcut"/>
<aop:after-returning method="afterreturnning" pointcut-ref="pointcut" returning="result"/>
<aop:after-throwing method="afterthrowig" pointcut-ref="pointcut" throwing="ex"/>
</aop:aspect>
</aop:config>
</beans>
主函数同注解方式相同。运行结果相同。
sdau_20171819 发布了21 篇原创文章 · 获赞 14 · 访问量 7010 私信 关注