TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
做项目的时候,由于要用到在struts2的Action类中利用spring的AOP来实现记录操作日志,
) f+ d7 W7 a5 M* |4 }* M9 r0 d9 V( V6 B+ @+ W4 N
在Action里面的方法中加上自定义annotation来实现记录操作功能,% ?. i1 U" G' X! u7 l
% L$ ~' X, U5 l ~/ P* I" K运行的时候页面提示NoSuchMethodException when Aspec,2 a7 Y9 C1 O6 B/ R
: ?/ E5 s' Z; z' p! u
网上说是Action继承了ActionSupport导致的,
3 v, o7 o- I2 o7 S- Y4 X! \! g
3 n) J1 N* \0 m3 l/ g; U6 Z后来在一个英文网站上找到了解决的方法,
2 J0 ~1 w5 `' }) S2 `' t. }) D* q! u$ @4 |
只要在Spring的配置文件applicationContext中的<aop:aspectj-autoproxy/>改为<aop:aspectj-autoproxy proxy-target-class="true"/>就可以了。
! w- |8 ^4 z2 c& ^/ G$ x1 ~! G; v. G6 w
8 X7 \1 L/ P$ h8 K9 J, b) \ k) N% e9 K
. \) o+ W9 m( `0 C
第一步:$ W6 a( @/ L% j1 K7 E. ?* w2 G$ |' ~
1 V8 z s( {( G! v$ a在struts2的配置文件里加上以下一句:) m7 h* w" b- f* r
# I6 t- n! J/ N7 `, j7 A0 I; N
//让struts2始终先考虑spring的自动装箱
# v7 \4 }# s3 G3 b<constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true" />2 R a$ F7 d% y) y. M% y6 x, Y- e
" x1 r* ~# W9 M, r( P1 ]) j; i; E( G9 v- j- }+ T r/ |4 M0 l
, ~1 h' f* _" _& N9 j( Z
第二步:, e, Q! T Z8 z
2 [5 R$ P# h5 v2 K在配置AOP时,加上
, u4 O8 Z4 O* u& { <!--通知spring使用cglib而不是jdk的来生成代理方法 AOP可以拦截到Controller(Action)-->6 A7 \2 v1 E4 A( K% h$ Q
<aop:aspectj-autoproxy proxy-target-class="true"/>//关键是这句话,配置上就行了,
5 q5 r/ C3 i' u; t3 k5 S7 a/ G1 o2 p+ \8 W$ s% x
|
|