springのAop(xml配置)

7952 ワード

基礎知識:
   Beforeはブロック方法が実行される前に論理を実行する.
   Afterはブロック方法を実行した後に論理を実行します.
   Aoundはブロック方法の前後で論理を実行することができる.
   アフターサービス  リプリング  adviceは方法実行後に結果を返して実行します.
   アフターサービス  throwing adviceは方法実行中に異常を投げた時に実行します.
以下は実例です
1,一定の接麺類(ターゲット関数を強化するため)
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 come.supan.service;
public interface PersonService{
public void addPerson()
public int deletePerson();
)
package comp.supan.serviceimp;
import comp.supan.service.PersonService;
public class PersonServiceImp implements PersonService{
public void addPerson(){
System.out.println(「人員追加開始」)
System.out.println(「追加人員終了」)
)
public int deletePerson(){
return 0;
)
)
3、アクションクラスを定義する
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,appication Contect.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拡張:目標方法のパラメータは:[]
Aound強化:目標方法を実行する前に、アナログオープントランザクション.....
人員の追加を開始します
追加人員の終了
@Afterを強化して、日記を書きます.
@Afterが強化され、強化処理が施された目標方法は、addPersonである.
@After強化:目標方法のパラメータは:[]
Aound強化:目標方法は既に実行され、模擬は事務を終了する.
------------
AfterReturning強化:目標方法の戻り値を取得する:0
AfterReturning強化:アナログログ機能
AfterReturning強化:植え付けられた強化方法は:deletePerson
AfterReturning強化:アクセス先方法のパラメータは、[Ljava.lang.Object]@1534 fです.