文档章节

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

参考链接

 

© 著作权归作者所有

共有 人打赏支持
上一篇: 自定义注解
下一篇: java 乱码
Germmy
粉丝 4
博文 255
码字总数 84257
作品 0
武汉
私信 提问
深入 Spring Boot : 快速集成 Dubbo + Hystrix

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

小致dad
2018/07/02
0
0
hibernate persist update 方法没有正常工作(不保存数据,不更新数据)

工程结构 问题描述 在工程中通过spring aop的方式配置事务,使用hibernate做持久化。在代码实现中使用hibernate persit()方法插入数据到数据库,使用hibernate update()方法更新数据。问题是...

xiaoheike
2016/04/15
0
0
Spring 框架,生态圈有什么优势

上次面试被问到这个问题 之前了解的很肤浅,回答就是: Spring是一个框架,很多接口和写法都是约定俗成的,如果哪个员工离职或更换岗位,接受的不会对代码太陌生 还有就是最经典的 IOC,AOP...

AkataMoKa
2016/03/25
562
10
SpringAOP详细配置与使用

前言:本篇为复习总结之用,主要说明了下SpringAOP的概念,包含了Spring官方给的概念结合我自己的理解,配置其中包括了xml以及annotation方式。 SpringAOP简介: 面向切面编程(Aspect Orie...

菜鸟腾飞
01/05
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

没有更多内容

加载失败,请刷新页面

加载更多

深入理解JVM—JVM内存模型

深入理解JVM—JVM内存模型 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存...

onedotdot
25分钟前
1
0
MVC、MVCS、MVVM、MVP、VIPER等这么多架构模式哪一个好呢?

在项目开启阶段,其中一个很重要的环节就是选架构。 那么面对目前已知的这么多架构模式我们该怎么选择呢?这确实是个很让人头疼的问题! 下面我就在这里梳理一下目前常见的一些架构模式。 先...

Java干货分享
今天
3
0
简单模仿配置文件的反射机制

//Student类 public class Student { public void love() { System.out.println("python"); } } //Tesy类 public class Tesy { public static void main(String[] args) throws Exceptio......

南桥北木
今天
2
0
你真的需要了解一下CSS变量 var()的用法

当Web项目变得越来越大时,他的CSS会变得像天文数字那么大而且还变得混乱。为了帮助我们解决这个问题,新的CSS变量很快就会出现在主流浏览器中,它让开发人员能够重用并轻松编辑重复出现的C...

前端小攻略
今天
1
0
嵌入式应用选择合适的微控制器

为嵌入式应用选择微控制器有几个原因,即低成本,高集成度,增加可靠性,节省空间等。 准备所需硬件接口列表使用微控制器的基本硬件框图,准备一份微控制器需要支持的所有外设接口的列表。微...

linux-tao
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部