文档章节

Spring Aop Demo 真实

Germmy
 Germmy
发布于 2017/06/01 16:04
字数 496
阅读 0
收藏 0

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 截获参数

参考链接

 

© 著作权归作者所有

共有 人打赏支持
Germmy
粉丝 3
博文 251
码字总数 81776
作品 0
武汉
深入 Spring Boot : 快速集成 Dubbo + Hystrix

背景 Hystrix 旨在通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包,以...

小致dad
07/02
0
0
阿里老司机带你使用Spring框架快速搭建Web工程项目

摘要:Spring 框架是一个开源的 Java 平台,它为容易而快速的开发出耐用的 Java 应用程序提供了全面的基础设施。借助于Spring框架可以快速搭建Web工程项目,本文中阿里巴巴高级开发工程师嵛山...

萌萌怪兽
05/15
0
0
Spring AOP 简单demo

做的很简单,大致是用到了AOP的注解方式。个人感觉Spring AOP真的很不错。可以做日志处理等。 先贴代码: 1. 接口 IUser.java package com.jushi.aop; public interface IUser { public Stri...

LoongMint
2010/07/16
0
0
Spring3.2 AOP 分析

Spring3.2 AOP个人分析: AOP, 即Aspect-Oriented-Programming, 面向切面编程, 又一Spring的核心,被广泛应用,如在Spring-tx中都有用到,其好处是实现松耦合的外围处理程序,先说些理论吧。...

ihaolin
2014/01/17
0
0
透过现象看原理:详解 Spring 中 Bean 的 this 调用导致 AOP 失效的原因

原文出处:光闪 前言 在我们使用Spring时,可能有前辈教导过我们,在bean中不要使用this来调用被@Async、@Transactional、@Cacheable等注解标注的方法,this下注解是不生效的。 那么大家可曾...

光闪
05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql在查询结果前加序号

在查询结果前加序号: set @rn=0; select @rn:=@rn+1 as 序号,你查询的结果集

lyle_luo
20分钟前
1
0
webpack 工作原理

暂无内容

agenyun
28分钟前
1
0
iOS返回指定控制器或者关闭自己当前控制器

RT。。。 这种情况其实很常见,比如,从A界面进入B界面在进入C界面,如果返回时,直接从C回到A,怎么做?或者说无限跳转进入BCDEF...XYZ。。。之后直接返回某一个界面,怎么做? 其实这种的有...

RainOrz
28分钟前
1
0
超好用的在线PDF转Word网站,真后悔没早发现

把PDF转成Word还是经常干的事情。 然而,下载一大堆软件来干这件简单的事情还是显得过于繁琐和复杂。 何况很多网上的软件安装常常出问题,在度娘里面搜索,然后下载又会经常遇到钓鱼网站,电...

dillonxiao
31分钟前
1
0
文章收藏

对接口或者方法进行性能测试的工具contiperf: http://www.ltesting.net/ceshi/ceshijishu/xncs/2012/1127/205747.html...

月下狼
34分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部