aop思想以及环境搭建(记录自己的一小步)1.1
##什么是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的更多相关文章
- 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 ...
- py-faster-rcnn(running the demo): ubuntu14.04+caffe+cuda7.5+cudnn5.1.3+python2.7环境搭建记录
第一次写博客,以此纪念这几天安装caffe,跑faster-rcnn的血泪史.在此特别感谢网络各路大神,来自全球各地,让我能从中汲取营养,吸取经验,总结规律. faster-rcnn分为matlab版 ...
- RobotFramework测试环境搭建记录
Robotframwork测试环境搭建记录 1.安装Python2.7(https://www.python.org/) 在环境变量path中加入“C:\Python27” 安装后的验证方法为在命令行 ...
- (转载)PHP环境搭建-记录
PHP环境搭建-记录 转于 http://jingyan.baidu.com/article/fcb5aff797ec41edaa4a71c4.html php5.5 做了大量的更新,在与apac ...
- Mac OSX系统中Hadoop / Hive 与 spark 的安装与配置 环境搭建 记录
Mac OSX系统中Hadoop / Hive 与 spark 的安装与配置 环境搭建 记录 Hadoop 2.6 的安装与配置(伪分布式) 下载并解压缩 配置 .bash_profile : ...
- Android 环境搭建记录
Android 环境搭建记录 官网 https://developer.android.com/ studio 下载地址 官方下载 jikexueyuanwiki 国内镜像 studio历史版本 安装 ...
- ubuntu16+zabbix3.4+grafana环境搭建记录
最近研究了zabbix,稍后放上环境搭建教程,建议想学习搭建的同学记得参考zabbix官网
- 1.OpenGL mac开发环境搭建记录
1.安装GLEW 和GLFW,转摘至:https://www.cnblogs.com/pretty-guy/p/11357793.html 2.开始测试,整个工程报错,关键信息如下: code sig ...
- linux环境搭建记录
第一次搭建环境,部署服务,在此记录一下过程 1.项目用到的hosts设置好 2.mkdir data,在data文件夹下建server,log,soft,resource路径,上载jdk.zip到so ...
随机推荐
- IDEA、maven3.6.3安装、环境配置(windows10)
maven的安装和配置 1. maven的官方入门指南:http://maven.apache.org/guides/getting-started/index.html 阅读官方文档进行ma ...
- SpringBoot+Dynamic多数据源动态切换
最近做了个小模块,需求就是项目同时读取三个数据库,操作数据.并不是分库分表,只用定时跑,不需要对外提供接口. 技术选型:SpringBoot + Mybatis Plus(Mybatis) + Dyn ...
- TF上架模式是什么?有什么作用?
TF上架模式中的TF上架就是TestFlight上架的意思,意思就是将开发者开发完成的App在苹果官方内测商店TestFlight上架的模式,一般被我们简称为TF上架模式. 为什么要了解TF上架呢?为 ...
- java交换两个参数值的四种方法
第一种:添加中间变量,算是最经典最简易的一种了. //添加一个中间变量 int x = 1, y = 2; int z; z = x;x = y;y = z; System.out.println(x ...
- 查看 Linux 系统服务的 5 大方法
Linux 系统服务有时也称为守护程序,是在Linux启动时自动加载并在Linux退出时自动停止的系统任务. 在本文中,良许将为大家介绍如何列出 Linux 系统里所有运行的服务,以及如何检查某个服务 ...
- DataGrip 2020.1 安装与激活
1 软件下载 百度网盘: 链接:https://pan.baidu.com/s/1kHSq1XS0i4YDF0HuzsxCLg 提取码:djyc 2 安装 解压文件后点击 datagrip-2020. ...
- 借助GPU Boost和K80 Autoboost提高性能
原网站:https://devblogs.nvidia.com/increase-performance-gpu-boost-k80-autoboost/ 由于我主要使用nvidia-smi,故nvc ...
- Java 通过Jna调用dll路径问题
调试阶段 C++ dll --> window/system32C# dll --> C:\Program Files\Java\jdk1.8.0_171\bin [jdk bin] 打包 ...
- 033_go语言中的打点器
代码演示 package main import "fmt" import "time" func main() { ticker := time.NewTic ...
- 一文搞定Python正则表达式
本文对正则表达式和 Python 中的 re 模块进行详细讲解 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知 ...