TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
做项目的时候,由于要用到在struts2的Action类中利用spring的AOP来实现记录操作日志,3 q4 V$ j! H" _8 T
7 J1 I, O0 [3 ^; w0 ]+ n+ S在Action里面的方法中加上自定义annotation来实现记录操作功能,
- d# t9 b4 [* @3 k. k, q( @# l# j8 ]( q5 x
运行的时候页面提示NoSuchMethodException when Aspec,
/ X1 @2 V2 {" ?6 D, u; [% `
v( Z* f8 b4 B/ S. q网上说是Action继承了ActionSupport导致的,9 ^- D, k% e9 `$ q% D. c) Z
3 n* B1 Z1 c8 g: G' ~& Q后来在一个英文网站上找到了解决的方法,# `/ i. x, m, F1 k3 |1 @8 |' \
! K$ c( W5 V. m2 i3 q" q+ b2 L' D只要在Spring的配置文件applicationContext中的<aop:aspectj-autoproxy/>改为<aop:aspectj-autoproxy proxy-target-class="true"/>就可以了。
$ o" q6 T0 F/ `* ]7 e' [
M+ n" u" l2 H, \8 J" F: i0 |) v/ R, X# l1 X
. k5 H' _& N/ e8 i; A
第一步:
9 ^! C% u" I1 J. C: E) G# i: C+ ?
! U' N) `, o0 ?0 J在struts2的配置文件里加上以下一句:
$ T# N$ t) c% u) b6 u' n t6 s+ N7 W" B+ \0 X5 y" p
//让struts2始终先考虑spring的自动装箱
4 H$ _6 ^% I& C. L% G% b/ a<constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true" />
6 w* l. o- [& k% u' L
% }" L& b9 o/ C. d7 p
: T1 q2 e8 A {0 u g. p |
0 T! ?1 ^5 L" J2 l. m2 `) [第二步:% A g, E3 R+ Q# m1 Z% c
3 v! ?$ g2 I$ o( G
在配置AOP时,加上
0 o6 X3 w$ q g0 ?7 Z! l <!--通知spring使用cglib而不是jdk的来生成代理方法 AOP可以拦截到Controller(Action)-->. {& ^3 U, Q9 s$ V5 {
<aop:aspectj-autoproxy proxy-target-class="true"/>//关键是这句话,配置上就行了,) p! m4 I$ H; @- _
& F* c8 F" e) }7 n9 y, S) K0 Z
|
|