TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
做项目的时候,由于要用到在struts2的Action类中利用spring的AOP来实现记录操作日志,
, z W7 F5 k! ?7 @3 b& m! z+ F
$ p1 D2 d6 J6 U7 n2 V3 Q在Action里面的方法中加上自定义annotation来实现记录操作功能,
+ M$ k F& O7 J0 J1 ^
! B6 Y: b' S3 S) ^( U- F. ]运行的时候页面提示NoSuchMethodException when Aspec,
# I W0 _- ?3 u3 i7 F+ I/ F8 [- w, U$ }4 Z4 e! u: |8 ?3 e
网上说是Action继承了ActionSupport导致的,
% h& x: K; @% u& W. v) `0 N0 P& u$ Y* |& B1 v4 E7 x2 R
后来在一个英文网站上找到了解决的方法,
* A4 s; V( ^" \ w7 o
: r# C- T' h, b, h* h只要在Spring的配置文件applicationContext中的<aop:aspectj-autoproxy/>改为<aop:aspectj-autoproxy proxy-target-class="true"/>就可以了。
2 G+ ] c/ A4 S8 j( v( u% P$ q! V! Z3 P" e, w# g- Q
, [" X$ L% ~6 d5 q: a. m* f% V+ ~$ t- m4 p
第一步:8 d W5 R2 c/ A( f F1 i9 D
5 G+ N' N# |* p3 o' X9 k在struts2的配置文件里加上以下一句:
4 @4 b& U0 Y8 A) F8 {- h+ k$ M2 Z9 \. ^$ p. U
//让struts2始终先考虑spring的自动装箱
/ t" l. @# {* @6 d<constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true" />- q: w |# X% c9 X
! p/ [9 J& F6 f+ a4 ]. V: W4 Q# p
+ ?0 l' }& h, C ~ n7 _( r" q
第二步:
/ z4 L: \+ i$ ~& a& q2 b, V- H# O& [) X. T! U! p' q
在配置AOP时,加上
& x2 z$ P) R0 Y$ C: U! N' u <!--通知spring使用cglib而不是jdk的来生成代理方法 AOP可以拦截到Controller(Action)-->' ]1 J: l1 l( k P
<aop:aspectj-autoproxy proxy-target-class="true"/>//关键是这句话,配置上就行了, Z% J+ r7 |# \- ~
6 t) E7 k; D- Q" i& @+ f7 ^. q4 O3 m/ I |
|