##什么是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. recv & recvfrom

    #include <sys/types.h> #include <sys/socket.h> ssize_t recv(int sockfd, void *buf, size_ ...

  2. IDEA、maven创建webapp项目

      maven官方入门指南:http://maven.apache.org/guides/getting-started/index.html 推荐跟着官方文档学习噢~   IDEA.maven创建w ...

  3. stm32f407 oled iic例程,成功点亮oled屏

    写了好久好久,写好多好多代码,终于把oled给驱起来了.话不多说,直接上图,欲要例程的,可以加我微 lichenpoo

  4. 关于SqlServer那些事1(回归基础)

    即将实习,回归基础总结,希望可以再好好打磨一下基础的一些东西 关于如何在重新修改表结构时该变其权限设置 步骤: 点击工具 进入选项 设计器 取消勾选阻止保存要求重新创建表的更改 关于创建创建数据库以及 ...

  5. tracebace用法

    介绍一下traceback 平时看到的程序的错误信息也就是traceback信息 举个简单例子: import traceback try: s = [1, 2, 3] print s[5] exce ...

  6. python3.2求和与最值

    #1到100求和sum1=0for x in range(101): sum1=sum1+xprint(sum1) #1到100偶数求和sum2=0for x in range(0,101,2): p ...

  7. 朴素贝叶斯分类器基本代码 && n折交叉优化

    自己也是刚刚入门.. 没脸把自己的代码放上去,先用别人的. 加上自己的解析,挺全面的,希望有用. import re import pandas as pd import numpy as np fr ...

  8. JS DOM操作案例

    显示隐藏表单文本内容 <input type="text" value="手机"> var text = document.querySelecto ...

  9. 制作的excel表格如何放到微信公众号文章中?

    制作的excel表格如何放到微信公众号文章中? 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件 ...

  10. C#算法设计排序篇之04-选择排序(附带动画演示程序)

    选择排序(Selection Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/681 访问. 选择排序是一种简 ...