文档章节

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
码字总数 84165
作品 0
武汉
私信 提问
深入 Spring Boot : 快速集成 Dubbo + Hystrix

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

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

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

xiaoheike
2016/04/15
0
0
透过现象看原理:详解 Spring 中 Bean 的 this 调用导致 AOP 失效的原因

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

光闪
05/16
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

没有更多内容

加载失败,请刷新页面

加载更多

Pycharm上Django的使用 Day8

1.添加新条目 1>编写用于添加新条目的表单 在forms.py中创建一个与模型Entry相关联的表单 1处给字段'text'指定一个空标签 2处定义小部件widgets,widgets是一个HTML表单元素 2>定义new_entry...

不会TC的猫
12分钟前
1
0
MongoDB副本集

MongoDB介绍 早期版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主 目前已经淘汰master-slave模式,改为副本集,这种模式下有一个...

chencheng-linux
25分钟前
1
0
WebService 客户端记录

https://blog.csdn.net/qiuhan/article/details/49487009

呼呼南风
25分钟前
0
0
七牛云彭垚:智能平台的创新和发展

2018 年 11 月 14 日至 11 月 18 日,第二十届中国国际高新技术成果交易会(简称高交会)在深圳成功举办,七牛云作为国内领先的以数据智能和视觉智能为核心的企业级云计算服务商受邀参展。 ...

七牛云
32分钟前
0
0
Java内存模型原理,你真的理解透彻了吗?

内存模型产生背景 在介绍 Java 内存模型之前,我们先了解一下物理计算机中的并发问题,理解这些问题可以搞清楚内存模型产生的背景。 物理机遇到的并发问题与虚拟机中的情况有不少相似之处,物...

小刀爱编程
37分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部