HiiHahWIKI - making some notes for... -
Java:SpringMVCでAOPする
をテンプレートにして作成
開始行:
*Java:SpringMVCでAOPする [#o8dfd31f]
SpringMVCでAOPをしようとしたときにしたときにちょっとハマ...
***前提 [#q6b5e237]
-Spring3.1を使用
-SpringMVCは既に動作している状況
***依存ライブラリの追加 [#j6a32ed2]
以下の依存ライブラリをpomに追加します。
-spring-aop
-aspectjrt
-aspectjweaver
-cglib
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2</version>
</dependency>
***SpringBean定義への設定追加 [#z43f0ad8]
AOPするには、SpringMVCのDispatcherServletが読み込むBean定...
-<context:component-scan .../>
-<mvc:annotation-driven />
-<context:annotation-config/>
-<aop:aspectj-autoproxy> </aop:aspectj-autoproxy>
ちなみに、小生の環境では、上2つはSpringMVCを動作させるた...
***AOPするクラスを作成 [#r01e7804]
以下のサンプルはアノテーションベースです。
簡単な仕様は以下のとおり。
-PointCutはパッケージ名が*..controllerであるクラスのすべ...
-AdviceはAround
@Aspect
@Component
public class MyAspect {
@Around ("execution(* *..controller.*.*(..))")
public Object before(ProceedingJoinPoint pjp){
Log log = LogFactory.getLog(pjp.getSignature().getDecl...
log.debug(pjp.getSignature() + ":" + pjp.getArgs() + "...
Object ret = null;
try {
ret = pjp.proceed();
} catch (Throwable e) {
// TODO 自動生成された catch ブロック
log.error(e.getStackTrace(), e);
}
return ret;
}
}
ちなみに、備忘のためにPointCutの構文を。
execution(メソッドの修飾子▲メソッドの戻り値型▲パッケージ...
-メソッドの修飾子、パッケージ名、クラス名、throwsは省略可能
-パッケージをワイルドカードで指定する場合は、*..と記述す...
-メソッドの引数に「..」を指定すると、何でも一致するように...
***ちょっとハマったこと [#q70d0fd4]
最初は、依存関係に以下の3つしか入れてなくて、
-spring-aop
-aspectjrt
-aspectjweaver
こんなエラーが出ました。
1 03, 2014 5:36:25 午後 org.springframework.web.servlet....
重大: Context initialization failed
org.springframework.beans.factory.BeanCreationException:...
………………………
Initialization of bean failed; nested exception is org.s...
して、「cglib」を依存関係に足したらうまく行ったって感じで...
終了行:
*Java:SpringMVCでAOPする [#o8dfd31f]
SpringMVCでAOPをしようとしたときにしたときにちょっとハマ...
***前提 [#q6b5e237]
-Spring3.1を使用
-SpringMVCは既に動作している状況
***依存ライブラリの追加 [#j6a32ed2]
以下の依存ライブラリをpomに追加します。
-spring-aop
-aspectjrt
-aspectjweaver
-cglib
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2</version>
</dependency>
***SpringBean定義への設定追加 [#z43f0ad8]
AOPするには、SpringMVCのDispatcherServletが読み込むBean定...
-<context:component-scan .../>
-<mvc:annotation-driven />
-<context:annotation-config/>
-<aop:aspectj-autoproxy> </aop:aspectj-autoproxy>
ちなみに、小生の環境では、上2つはSpringMVCを動作させるた...
***AOPするクラスを作成 [#r01e7804]
以下のサンプルはアノテーションベースです。
簡単な仕様は以下のとおり。
-PointCutはパッケージ名が*..controllerであるクラスのすべ...
-AdviceはAround
@Aspect
@Component
public class MyAspect {
@Around ("execution(* *..controller.*.*(..))")
public Object before(ProceedingJoinPoint pjp){
Log log = LogFactory.getLog(pjp.getSignature().getDecl...
log.debug(pjp.getSignature() + ":" + pjp.getArgs() + "...
Object ret = null;
try {
ret = pjp.proceed();
} catch (Throwable e) {
// TODO 自動生成された catch ブロック
log.error(e.getStackTrace(), e);
}
return ret;
}
}
ちなみに、備忘のためにPointCutの構文を。
execution(メソッドの修飾子▲メソッドの戻り値型▲パッケージ...
-メソッドの修飾子、パッケージ名、クラス名、throwsは省略可能
-パッケージをワイルドカードで指定する場合は、*..と記述す...
-メソッドの引数に「..」を指定すると、何でも一致するように...
***ちょっとハマったこと [#q70d0fd4]
最初は、依存関係に以下の3つしか入れてなくて、
-spring-aop
-aspectjrt
-aspectjweaver
こんなエラーが出ました。
1 03, 2014 5:36:25 午後 org.springframework.web.servlet....
重大: Context initialization failed
org.springframework.beans.factory.BeanCreationException:...
………………………
Initialization of bean failed; nested exception is org.s...
して、「cglib」を依存関係に足したらうまく行ったって感じで...
ページ名: