TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
做项目的时候,由于要用到在struts2的Action类中利用spring的AOP来实现记录操作日志,0 c0 K1 p3 t. c, f
- B7 j5 |. ?# }. p' ]% ]7 r在Action里面的方法中加上自定义annotation来实现记录操作功能,
$ @+ D" p5 x7 B, p" E# Y
, u1 e' `0 [; \8 I9 J运行的时候页面提示NoSuchMethodException when Aspec,
) Q6 p( T& q3 v
, L4 q. Y$ Q' }& Y8 W$ u网上说是Action继承了ActionSupport导致的,
/ B' }9 L2 h, z& O4 K1 g1 J- z
后来在一个英文网站上找到了解决的方法,* c, D0 `4 R4 G8 H) P1 q2 x
% b% p6 X; J5 I6 |3 E只要在Spring的配置文件applicationContext中的<aop:aspectj-autoproxy/>改为<aop:aspectj-autoproxy proxy-target-class="true"/>就可以了。
d/ N \& z3 T- x6 x5 y- k4 f' a% u$ l" ] n& R
. H _, S; v1 t" v5 Q+ {' h
- [: x, }/ Q3 c* h7 u7 n8 @第一步:
* q: O* O6 j( L& u
6 A5 ? c) L; l) A在struts2的配置文件里加上以下一句:
/ `0 ^) f7 z+ i3 H" o/ c/ ^! R8 Z& z3 i% h1 P
//让struts2始终先考虑spring的自动装箱
; t% [- C# O; x8 a% a<constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true" />
1 T5 ]+ N, D: L9 n
+ O, j- R$ Q* B: Z5 n# F
$ b3 S h+ A `7 m# L, p. O
3 t2 U6 A0 q4 e, {7 e3 d- t3 u# \5 g第二步:' I, P& H' t% E {) q% V: M: g
& d9 q; ~- l! J; ^5 T在配置AOP时,加上
* {+ Z! i" N3 A; u& Z7 Y( x <!--通知spring使用cglib而不是jdk的来生成代理方法 AOP可以拦截到Controller(Action)-->/ W; m S3 d/ L' h
<aop:aspectj-autoproxy proxy-target-class="true"/>//关键是这句话,配置上就行了,4 ], A) t' u5 R5 |5 J) n3 v; O2 f
# ]3 n. \& H7 H! G' x |
|