码迷,mamicode.com
首页 > 编程语言 > 详细

springAOP 的pointcut

时间:2015-08-18 11:33:28      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

 <bean id="amqFilter" class="com.xxx.hotel.base.aspectj.AmQConsumerFilter"/>

    <aop:config proxy-target-class="true">
        <aop:aspect ref="amqFilter">
            <aop:before method="beforeOnMessage" arg-names="message"
                        pointcut="execution(* xxx.amq.MessageListener.onMessage(..)) and args(message)"/>
        </aop:aspect>
    </aop:config>

那么pointcut后边的表达式说明了哪些方法需要被aop所执行,可以有args()  @args()   execution()   target()  @target()  @annotation等来定义或组合(&& , || , !)

 

其中比较常见的是execution,例子如下:

 

任意公共方法的执行

execution(public * *(..))

 

 

任意一个以get开头的方法的执行

execution(* get*(..))

 

 

hotelService接口的任意方法

execution(* com.balfish.hotel.service.HotelService.*(..))

 

 

service包里的任意方法的执行

execution(* com.balfish.hotel.service.*.*(..))

 

 

service包和所有子包里的任意类的任意方法的执行

execution(* com.balfish.hotel.service..*.*(..)) 

总结:靠近(..)的是方法,靠近.*(..)的是类或接口

 

 

 

Pointcut 可以通过Java注解和XML两种方式配置,如下所示:

<aop:config>
    <aop:aspectref="aspectDemo">
        <aop:pointcutid="pointcut"expression="execution(* com.balfish.spring.aop.pointcut..JoinPointTest.*(..))"/>
        <aop:before pointcut-ref="pointcut" method="beforeAdvice" />
    </aop:aspect>
</aop:config>

@Component
@Aspect
public class AspectDemo {
    //@Pointcut("execution(* com.balfish.spring.aop.pointcutexp..JoinPointObjP2.*(..))")
    //@Pointcut("within(com.balfish.spring.aop.pointcutexp..*)")
    //@Pointcut("this(com.balfish.spring.aop.pointcutexp.Intf)")
    //@Pointcut("target(com.balfish.spring.aop.pointcutexp.Intf)")
    //@Pointcut("@within(org.springframework.transaction.annotation.Transactional)")
    //@Pointcut("@annotation(org.springframework.transaction.annotation.Transactional)")
    @Pointcut("args(String)")
    public void pointcut() {
    }
    @Before(value = "pointcut()")
    public void beforeAdvice() {
        System.out.println("pointcut1 @Before...");
    }

 

springAOP 的pointcut

标签:

原文地址:http://www.cnblogs.com/balfish/p/4738891.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!