`
ruruhuang
  • 浏览: 189552 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
阅读更多
对AOP的概念一直是蒙蒙融融的。而且看Spring的文档上面对AOP的叙述还是不够清楚。 甚至看了文档还是不知道怎样使用Spring AOP, 直到我看了这篇文章。http://www.javalobby.com/forums/thread.jspa?messageID=91951283&#91951283。 AOP重要的两个概念, Advice和PointCut。Advice --> what       你做的事情。PointCut --> where   你想在什么地方做事情。 也就是类中的那些方法(注意:现在Spring AOP还只支持Method  Interceptor)。 看看Spring中Advice的类的层次。

看看Pointcut的层次

Spring 提供了整合Advice和Pointcut的接口。

 这样我们只要提供PointcutAdvisor, 就能够知道在那个类的那些方法里面做什么事情了。

现在我们还需要另外一个类帮助我们实现AOP。( org.springframework.aop.framework.ProxyFactoryBean)

 

<!----><bean name="interceptorA" class="com.javalobby.tnt.spring.aop.InterceptorA"><!----><bean name="beforeAdviceA" class="com.javalobby.tnt.spring.aop.BeforeAdviceA"><!----><bean name="myRawController" class="com.javalobby.tnt.spring.aop.ExampleController">

<!----><bean name="myController" class="org.springframework.aop.framework.ProxyFactoryBean">  <property name="target" ref="myRawController">  <property name="interceptorNames">    <list>      <value>beforeAdviceA</value>      <value>beforeAdviceA</value>    </list>  </property></bean>
这样我们就对所有方法上面实现了beforeAdviceA,beforeAdviceA拦截。如果我们需要对这个类的特定方法进行拦截,如下
 
<!----><bean name="interceptorA" class="com.javalobby.tnt.spring.aop.InterceptorA"><!----><bean name="beforeAdviceA" class="com.javalobby.tnt.spring.aop.BeforeAdviceA"><!----><bean name="pointcut.advisor1" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor"> <property name="advice" ref="interceptorA"> <property name="mappedName" value="handleRequestInternal"></bean><!----><bean name="pointcut.advisor2" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor"> <property name="advice" ref="beforeAdviceA"> <property name="mappedName" value="handleRequestInternal"></bean><!----><bean name="myRawController" class="com.javalobby.tnt.spring.aop.ExampleController">
 
<!----><bean name="myController" class="org.springframework.aop.framework.ProxyFactoryBean">  <property name="target" ref="myRawController">  <property name="interceptorNames">    <list>      <value>pointcut.advisor1</value>      <value>pointcut.advisor2</value>    </list>  </property></bean>
我们就实现了对myRawController的handleRequestInternal方法进行拦截。

If you don&apost need direct (non-AOP&aposd) access to your bean, then it may be better for the simplicity of the file to just use an anonymous inner bean, rather than declaring the bean seperately to the proxy:

<!----><bean name="myController" class="org.springframework.aop.framework.ProxyFactoryBean">  <property name="target"><bean class="com.javalobby.tnt.aop.ExampleController"></property>  <property name="interceptorNames">    <list>      <value>beforeAdviceA</value>      <value>interceptorA</value>    </list>  </property></bean>

 详情请参考那篇文章。

    
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics