Spring Aop Demo 真实
博客专区 > Germmy 的博客 > 博客详情
Spring Aop Demo 真实
Germmy 发表于11个月前
Spring Aop Demo 真实
  • 发表于 11个月前
  • 阅读 0
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

Spring Aop分成2种,一种是用AspectJ,另一种是用纯Spring Aop.

用Aspect就是可以用注解,比如@Aspect,@PonitCut这些,看起来比较酷炫,但是得额外引入包,比如aspectjrt.jar,aspectweaver.jar。

我个人还是比较喜欢纯Spring Aop的,干净纯粹。

具体代码如下:

1、application.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
           "><!-- 要添加最后2行 -->


    <context:annotation-config />
    <context:component-scan base-package="com.bjsxt2"/>
    <bean id="logInterceptor" class="com.bjsxt2.aop.LogInterceptor"></bean>
    <aop:config>
        <aop:pointcut expression="execution(public * com.bjsxt2.service..*.add(..))"
                      id="servicePointcut"/>
        <aop:pointcut expression="execution(public * com.bjsxt2.dao..*.*(..))"
                      id="daoPointcut"/>

        <aop:aspect id="logAspect" ref="logInterceptor">
            <aop:before method="before"  pointcut-ref="servicePointcut" />
            <aop:before method="AfterReturning"  pointcut-ref="daoPointcut" />
        </aop:aspect>

    </aop:config>


</beans>

注意:<aop:pointcut>可以配置多个,在<aop:config>这个大标签内就行,但是要在<aop:aspect>上方才行。

 

2、代码有点多,我就不一一列出来了,直接放上git地址:

git@git.oschina.net:iPhone2020/testaop.git

------------------------------------

常见的疑问:

1、join point和point cut是什么区别:

join point和point cut本质上是一回事,join point是抽象的概念,point cut是实际的拦截点。

2、point cut怎么用

2.1、就是一个表达式,表示到底拦截哪个类哪个方法。

2.2、如果是用AspectJ,那么一般会定义在一个方法上,然后Advice引用这个方法如下:

package com.bjsxt.aop;

/**
 * Created by germmy on 17/5/27.
 */

        import org.aspectj.lang.annotation.After;
        import org.aspectj.lang.annotation.AfterReturning;
        import org.aspectj.lang.annotation.AfterThrowing;
        import org.aspectj.lang.annotation.Aspect;
        import org.aspectj.lang.annotation.Before;
        import org.aspectj.lang.annotation.Pointcut;
        import org.springframework.stereotype.Component;

@Aspect
@Component
public class LogInterceptor {
    @Pointcut("execution(public * com.bjsxt.service..*.add(..))")
    public void myMethod(){};

    /*@Before("execution(public void com.bjsxt.dao.impl.UserDAOImpl.save(com.bjsxt.model.User))")*/
    @Before("myMethod()")
    public void before() {
        System.out.println("method staet");
    }
    @After("myMethod()")
    public void after() {
        System.out.println("method after");
    }
    @AfterReturning("execution(public * com.bjsxt.dao..*.*(..))")
    public void AfterReturning() {
        System.out.println("dao方法执行完了吧,嘿嘿");
    }
    @AfterThrowing("execution(public * com.bjsxt.dao..*.*(..))")
    public void AfterThrowing() {
        System.out.println("method AfterThrowing");
    }
}

 

3、Advice,就是拦住后到底要干嘛,比如打印一句您权限不足。

 

4、Spring Aop 截获参数

参考链接

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 3
博文 152
码字总数 55875
×
Germmy
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: