springのAop(xml配置)
7952 ワード
基礎知識:
Beforeはブロック方法が実行される前に論理を実行する.
Afterはブロック方法を実行した後に論理を実行します.
Aoundはブロック方法の前後で論理を実行することができる.
アフターサービス リプリング adviceは方法実行後に結果を返して実行します.
アフターサービス throwing adviceは方法実行中に異常を投げた時に実行します.
以下は実例です
1,一定の接麺類(ターゲット関数を強化するため)
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、アクションクラスを定義する
@Before拡張、模擬実行権限チェック
@Before強化、強化処理をインプリメントするための目標方法は、addPersonです.
@Before拡張:目標方法のパラメータは:[]
Aound強化:目標方法を実行する前に、アナログオープントランザクション.....
人員の追加を開始します
追加人員の終了
@Afterを強化して、日記を書きます.
@Afterが強化され、強化処理が施された目標方法は、addPersonである.
@After強化:目標方法のパラメータは:[]
Aound強化:目標方法は既に実行され、模擬は事務を終了する.
------------
AfterReturning強化:目標方法の戻り値を取得する:0
AfterReturning強化:アナログログ機能
AfterReturning強化:植え付けられた強化方法は:deletePerson
AfterReturning強化:アクセス先方法のパラメータは、[Ljava.lang.Object]@1534 fです.
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です.