论坛首页 招聘求职论坛

关于Spring AOP中的@target

浏览 8615 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-05-24   最后修改:2012-05-24
这个版块人气旺,所以就发这里了。
问题是这样的:
Spring AOP中,@Target(xxx),表示对标记有xxx注解的类,做代理。
我想对某些类或者某些方法做代理,达到@Transcational的效果,
即标记类,该代理类所有public方法,标记方法,则代理该方法。
但是使用中发现,所有的bean都被代理过了,str也被代理了!
me.aop.Bean1有@Tag标记,me.aop.Bean2没有
为什么会这样,哪里理解错了???
路过的达人们发表下高见啊!
XML文件:
<aop:config>
		<aop:aspect ref="someAdvice">
			<aop:before pointcut="@target(tag)" method="beforeAdvice" arg-names="tag"/>
		</aop:aspect>
	</aop:config>
	
	<bean id="someAdvice" class="me.aop.SomeAdvice" />
	
	<bean id="bean1" class="me.aop.Bean1" />
	<bean id="bean2" class="me.aop.Bean2">
		<property name="str" ref="str"/>
	</bean>
	
	<bean id="str" class="java.lang.String">
		<constructor-arg index="0" value="123"/>
	</bean>

   发表时间:2012-05-24  
看到你这个代码,我表示很蛋疼。

0 请登录后投票
   发表时间:2012-05-24   最后修改:2012-05-24
shine_sun 写道
看到你这个代码,我表示很蛋疼。


理解这个XML没难度吧?
0 请登录后投票
   发表时间:2012-05-25   最后修改:2012-05-25
好吧,这样冷清的回帖在意料中;
通过expression表达式配置AOP没成功,换成BeanPostProcess+AnnotationMatchingPointcut方式实现;
但是我倾向于前一种方式,因为后一种意味着 代理 会发生于Bean生命周期中的2个步骤,即代理和后置处理,
生成的class也会变成这样 xxx$CGLIBxxx$CGLIBxxx,从安全、代码结构等角度来看,都是不优雅的。
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics