TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
做项目的时候,由于要用到在struts2的Action类中利用spring的AOP来实现记录操作日志,
0 u. ?* Z; n6 \7 S! A7 n
6 K/ e- s* _4 p3 Z8 Y# p在Action里面的方法中加上自定义annotation来实现记录操作功能,5 K6 J2 v# l. X$ g) k1 t
! K& F" w# `1 P; E" E
运行的时候页面提示NoSuchMethodException when Aspec,
3 X5 P9 E7 f( ~- }8 S- H& D" d( A2 }# ]+ }
网上说是Action继承了ActionSupport导致的,
3 z5 k' p6 r+ ~4 ~" L( i A/ v2 m% Y/ w. n' Z+ I3 r
后来在一个英文网站上找到了解决的方法,# @0 {- u# o" H
- k8 |8 T9 s! j. ]- ~/ Y6 Q
只要在Spring的配置文件applicationContext中的<aop:aspectj-autoproxy/>改为<aop:aspectj-autoproxy proxy-target-class="true"/>就可以了。
- t8 m( y; h y( P+ h
8 A2 e6 y& i1 N! |& S; A8 z4 c! W1 p( H$ S
: O s+ r: @( ^( F
第一步:0 g6 E6 G; U9 [/ q( K- b
7 h8 ~$ ]# h3 T' O3 S在struts2的配置文件里加上以下一句:% T4 X' }4 y1 ]9 E& O) E
. ^3 \# ?( ^# L( L& N8 U) w
//让struts2始终先考虑spring的自动装箱8 L- B5 Q! [ T5 W
<constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true" />5 f+ X3 [! D# O
! d, {! N( e5 {. X$ O+ J! K
7 y8 Q/ ~" Y- A. E3 l! n4 m" y ^8 p; K. h- v
第二步:8 U5 s* C0 ~0 x7 Z' p, I9 G6 K
+ W7 K3 r5 I2 w' B/ {+ u在配置AOP时,加上
& q# R) ]) K, F% @# o" P: }. ] <!--通知spring使用cglib而不是jdk的来生成代理方法 AOP可以拦截到Controller(Action)-->
" l: i7 Z) i: m" ^. m! R1 |<aop:aspectj-autoproxy proxy-target-class="true"/>//关键是这句话,配置上就行了,
- B" _& E: _% c4 E& y r; b/ ^+ V- _: [: J( q
|
|