spring之Aop(xml配置)

基础知识:
Before是在所拦截方法执行之前执行一段逻辑。
After 是在所拦截方法执行之后执行一段逻辑。
Around是可以同时在所拦截方法的前后执行一段逻辑。
after returning advice 在方法执行后返回一个结果后执行。
after throwing advice 在方法执行过程中抛出异常的时候执行。

下面是实例:
1,一定切面(Aspect)类(用来增强目标函数)
package com.supan.aspect;
import java.util.Arrays;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
public class FourAdviceTest {
public void authority(JoinPoint jp){
System.out.println("@Before增强,模拟执行权限检查");
System.out.println("@Before增强,被植入增强处理的目标方法是:" +
jp.getSignature().getName());
System.out.println("@Before增强:目标方法的参数是:"+
Arrays.toString(jp.getArgs()));
}
public void log(JoinPoint jp){
System.out.println("@After增强,写日志");
System.out.println("@After增强,被植入增强处理的目标方法是:" +
jp.getSignature().getName());
System.out.println("@After增强:目标方法的参数是:"+
Arrays.toString(jp.getArgs()));
}
public void processTx(ProceedingJoinPoint jp) throws java.lang.Throwable{
System.out.println("Around增强:执行目标方法之前,模拟开启事务。。。。。。");
//获取执行目标函数的参数
// Object[] args = jp.getArgs();
Object rvt = jp.proceed();
System.out.println("Around增强:目标方法已经执行,模拟结束事务");
}
public void afterReturnning(JoinPoint jp, Object rvt) throws java.lang.Throwable{
System.out.println("AfterReturning增强:获取目标方法返回值:" + rvt);
System.out.println("AfterReturning增强:模拟记录日志功能");
System.out.println("AfterReturning增强:被植入的增强方法为:" + jp.getSignature().getName());
System.out.println("AfterReturning增强:访问目标方法的参数为:" + jp.getArgs());
}
}


2,定义Service类;
package com.supan.service;
public interface PersonService {
public void addPerson();
public int deletePerson();
}
package com.supan.serviceimp;
import com.supan.service.PersonService;
public class PersonServiceImp implements PersonService {
public void addPerson() {
System.out.println("开始添加人员");
System.out.println("添加人员结束");
}
public int deletePerson() {
return 0;
}
}
3,定义Action类
package com.supan.action;
import com.opensymphony.xwork2.ActionSupport;
import com.supan.service.PersonService;
public class PersonAction extends ActionSupport {
private PersonService ps;
private String name;
private int age;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}

public PersonService getPs() {
return ps;
}
public void setPs(PersonService ps) {
this.ps = ps;
}
public String addPerson(){
ps.addPerson();

System.out.println("----------------------");
ps.deletePerson();
return null;
}
}


4,配置struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<package name="default" namespace="/" extends="json-default">
<action name="addPerson" class="personAction" method="addPerson">
<result name="success">/person/personResult.jsp</result>
</action>
</package>
</struts>

5,配置applicationContext.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"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="personAction" class="com.supan.action.PersonAction">
<property name="ps" ref="personService"></property>
</bean>
<bean id="personService" class="com.supan.serviceimp.PersonServiceImp"></bean>
<!--定义一个切面类,该类是pojo的java类,该类中的方法用来增强目标函数 -->
<bean id="fourAdviceBean" class="com.supan.aspect.FourAdviceTest"></bean>
<!-- aop的配置用来进行切面编程 -->
<aop:config>
<!-- 定义aspect切面类 -->
<aop:aspect id="fourAdviceAspect" ref="fourAdviceBean">
<aop:before pointcut="execution(* com.supan.serviceimp.*.add*(..))" method="authority"/>
<aop:after pointcut="execution(* com.supan.serviceimp.*.add*(..))" method="log"/>
<aop:around pointcut="execution(* com.supan.serviceimp.*.add*(..))" method="processTx"/>
<!-- 注意如果目标函数有返回值,则一定要配置returning的参数,否则会报错 -->
<aop:after-returning pointcut="execution(* com.supan.serviceimp.*.delete*(..))" returning="rvt" method="afterReturnning"/>
</aop:aspect>
</aop:config>
</beans>

6,请求的jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<s:form action="addPerson">
<s:textfield label="姓名" name="name"></s:textfield>
<s:textfield label="年龄" name="age"></s:textfield>
<s:textfield label="地址" name="address"></s:textfield>
<s:submit name="添加"></s:submit>
</s:form>
</body>
</html>

7,点击submit后的后台输出:
@Before增强,模拟执行权限检查
@Before增强,被植入增强处理的目标方法是:addPerson
@Before增强:目标方法的参数是:[]
Around增强:执行目标方法之前,模拟开启事务。。。。。。
开始添加人员
添加人员结束
@After增强,写日志
@After增强,被植入增强处理的目标方法是:addPerson
@After增强:目标方法的参数是:[]
Around增强:目标方法已经执行,模拟结束事务
----------------------
AfterReturning增强:获取目标方法返回值:0
AfterReturning增强:模拟记录日志功能
AfterReturning增强:被植入的增强方法为:deletePerson
AfterReturning增强:访问目标方法的参数为:[Ljava.lang.Object;@153d14f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值