##什么是aop思想?

首先老办法我们一起先看看官网是咋描述的?

它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。而剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹。

用通俗易懂的话说aop思想就是指 “纵向重复,横向抽取”

画个图我们来解释一下吧



如上图,过滤器1=过滤器2=过滤器3 =过滤器。代码重复严重,我们就把重复的代码拿出来,放到一个通知里,如果我们需要的话就调用他。这样达到了快捷简单有效的方法。

##Spring着手搭建aop

首先引入我们的jar包



https://download.csdn.net/download/qq_36622149/10638299。

接下来我们再学习一下aop的黑话(名词介绍):



接下来我们就需要开始准备我们的advice和point cut 对象了。这些名词的意思若看不懂请看下图,每一个颜色的框框代表其中指向的代码



如果大家对本帖有什么疑问欢迎加入我们的交流群共同探讨 欢迎加入外包项目交流群,群聊号码:698466938

下面我们需要着手准备两个对象,一个是接口对象(本例用的是userservice),另一个是通知对象,也就是advice。



转载请保留原贴地址,https://blog.csdn.net/qq_36622149/article/details/82258210谢谢。


@Repository("userservice")
public class UserservierImpl implements UserService {
@Override
public void savedata() {
System.out.println("这里是需要增强的代码,因为如果保存我,需要打开事务才可以。");
} }

@Component("myadvice")
public class Myadvice {
public void before () {
System.out.println("这里是增强的代码,也就是重复代码。(打开事务)");
}
}



转载请保留原贴地址,https://blog.csdn.net/qq_36622149/article/details/82258210谢谢。

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" 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-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd ">
<context:component-scan base-package="cn.tsu"></context:component-scan>
<aop:config>
<aop:pointcut expression="execution(* cn.tsu.serviceImpl.*servierImpl.*(..))" id="es"/>
<aop:aspect ref="myadvice">
<aop:before method="before" pointcut-ref="es"/>
</aop:aspect>
</aop:config>
</beans>

最后再发一下Demo的junit测试。

@RunWith(SpringJUnit4ClassRunner.class) //使用junit4直接创建aoolication容器,不需要自己创建了
//相当于ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
@ContextConfiguration("classpath:applicationContext.xml")
public class AopDemo { @Resource(name="userservice") //相当于注入内容userservice us = (Userservice) ac.getBean("userservice");
public UserService us; //这里是接口父类,不是impl。 直接注入内容 @Test
public void test() {
us.savedata();
} }

运行结果:

这里除了before方法,还有其他方法,一共有5种方法,大家有兴趣的可以自己再百度测试一下。如果大家对本帖有什么疑问欢迎加入我们的交流群共同探讨 欢迎加入外包项目交流群,群聊号码:698466938。

转载请保留原贴地址,https://blog.csdn.net/qq_36622149/article/details/82258210谢谢。

如果大家对本帖有什么疑问欢迎加入我们的交流群共同探讨 欢迎加入外包项目交流群,群聊号码:698466938。

aop思想以及环境搭建(记录自己的一小步)1.1的更多相关文章

  1. faster-rcnn(testing): ubuntu14.04+caffe+cuda7.5+cudnn5.1.3+opencv3.0+matlabR2014a环境搭建记录

    python版本的faster-rcnn见我的另一篇博客: py-faster-rcnn(running the demo): ubuntu14.04+caffe+cuda7.5+cudnn5.1.3 ...

  2. py-faster-rcnn(running the demo): ubuntu14.04+caffe+cuda7.5+cudnn5.1.3+python2.7环境搭建记录

    第一次写博客,以此纪念这几天安装caffe,跑faster-rcnn的血泪史.在此特别感谢网络各路大神,来自全球各地,让我能从中汲取营养,吸取经验,总结规律. faster-rcnn分为matlab版 ...

  3. RobotFramework测试环境搭建记录

    Robotframwork测试环境搭建记录 1.安装Python2.7(https://www.python.org/) 在环境变量path中加入“C:\Python27” 安装后的验证方法为在命令行 ...

  4. (转载)PHP环境搭建-记录

    PHP环境搭建-记录   转于 http://jingyan.baidu.com/article/fcb5aff797ec41edaa4a71c4.html php5.5 做了大量的更新,在与apac ...

  5. Mac OSX系统中Hadoop / Hive 与 spark 的安装与配置 环境搭建 记录

    Mac OSX系统中Hadoop / Hive 与 spark 的安装与配置 环境搭建 记录     Hadoop 2.6 的安装与配置(伪分布式) 下载并解压缩 配置 .bash_profile : ...

  6. Android 环境搭建记录

    Android 环境搭建记录 官网 https://developer.android.com/ studio 下载地址 官方下载 jikexueyuanwiki 国内镜像 studio历史版本 安装 ...

  7. ubuntu16+zabbix3.4+grafana环境搭建记录

    最近研究了zabbix,稍后放上环境搭建教程,建议想学习搭建的同学记得参考zabbix官网

  8. 1.OpenGL mac开发环境搭建记录

    1.安装GLEW 和GLFW,转摘至:https://www.cnblogs.com/pretty-guy/p/11357793.html 2.开始测试,整个工程报错,关键信息如下: code sig ...

  9. linux环境搭建记录

    第一次搭建环境,部署服务,在此记录一下过程 1.项目用到的hosts设置好 2.mkdir data,在data文件夹下建server,log,soft,resource路径,上载jdk.zip到so ...

随机推荐

  1. luogu P3403 跳楼机 同余最短路

    LINK:跳楼机 很早之前就想学的一个东西.发现这个东西果然神奇. 我们要找到 所有的 w满足 \(w=1+ax+by+cz\).且 \(1\leq w\leq h\) 暴力枚举是不行的. 做法是这样 ...

  2. 玩转 SpringBoot2.x 之整合邮件发送

    序 在实际项目中,经常需要用到邮件通知功能.比如,用户通过邮件注册,通过邮件找回密码等:又比如通过邮件发送系统情况,通过邮件发送报表信息等等,实际应用场景很多. 原文地址:https://www.mm ...

  3. 使用Flask开发简单接口(4)--借助Redis实现token验证

    前言 在之前我们已开发了几个接口,并且可以正常使用,那么今天我们将继续完善一下.我们注意到之前的接口,都是不需要进行任何验证就可以使用的,其实我们可以使用 token ,比如设置在修改或删除用户信息的 ...

  4. asp.net 远程模型验证

    有这样一些场景,我们需要模型验证,某些字段不允许重复,但是又不希望在数据访问层增加一堆额外逻辑判断.我们需要数据访问层简洁,这种模型验证在进去Action之前,验证不通过直接告诉前端. 一个特性,继承 ...

  5. Hibernate配置文件和映射文件详解

    Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架. 我们先看一下官方文档所给出的,Hibernate 体系结构的高层视图: 其中PO=P ...

  6. C++ 对象的初始化

    目录 默认初始化 默认构造函数(default constructor) 构造函数初始值列表(cosntructor initializer list) 直接初始化和拷贝初始化 拷贝构造函数(copy ...

  7. 关于Dapper实现读写分离的个人思考

    概念相关     为了确保多线上环境数据库的稳定性和可用性,大部分情况下都使用了双机热备的技术.一般是一个主库+一个从库或者多个从库的结构,从库的数据来自于主库的同步.在此基础上我们可以通过数据库反向 ...

  8. 源码剖析Springboot自定义异常

    博主看到新服务是封装的自定义异常,准备入手剖析一下,自定义的异常是如何进行抓住我们请求的方法的异常,并进行封装返回到.废话不多说,先看看如何才能实现封装异常,先来一个示例: @ControllerAd ...

  9. 【BJOI2018】求和 - 倍增LCA

    题目描述 $master$ 对树上的求和非常感兴趣.他生成了一棵有根树,并且希望多次询问这棵树上一段路径上所有节点深度的$k$次方和,而且每次的$k$可能是不同的.此处节点深度的定义是这个节点到根的路 ...

  10. 如何隐藏win32 控制台程序的console窗口 2011-06-17 17:59

    加上 即可 // 隐藏窗口#pragma   comment(linker,   "/subsystem:\"windows\"  /entry:\"mainC ...