切面

Spring AOP介绍

 ̄綄美尐妖づ 提交于 2020-01-05 06:33:47
AOP 即 Aspect Oriental Program 面向切面编程 先来一个栗子: <aop:config> <aop:pointcut id="loggerCutpoint" expression= "execution(* com.how2java.service.ProductService.*(..)) "/> <aop:aspect id="logAspect" ref="loggerAspect"> <aop:after pointcut-ref="loggerCutpoint" method="log"/> </aop:aspect> </aop:config> 这个配置过程是什么含义呢? <aop:pointcut id="loggerCutpoint" expression="execution(* com.how2java.service.ProductService.*(..)) "/> 这一句是声明切入点,切入点的 id 叫 loggerCutPoint ,用来标记这个切入点, 这个expression表示:满足expression中的方法调用之后,就会去进行切面操作,类似于触发了切面: 第一个 * 代表返回任意类型 com.how2java.service.ProductService.* 表示包名以 com.how2java.service

五、AOP

耗尽温柔 提交于 2020-01-05 06:07:04
1、AOP 什么?   AOP(Aspect Oriented Programming),通常称为面向切面编程。它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。   什么是切面,什么是公共模块,那么我们概念少说,直接通过一个实例来看看 AOP 到底是什么。 回到顶部 2、需求   现在有一张表 User,然后我们要在程序中实现对 User 表的增加和删除操作。   要求:增加和删除操作都必须要开启事务,操作完成之后要提交事务。   User.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package com.ys.aop.one; public class User { private int uid; private String uname; public int getUid() { return uid; } public void setUid( int uid) { this .uid = uid; } public String getUname() {

Spring004--Spring AOP(mooc)

China☆狼群 提交于 2020-01-05 06:06:30
一。Spring AOP概览 1.1。AOP(面向切面编程)是什么 1。 AOP是一种编程范式,而不是编程语言。   2。解决特写问题,不能解决所有问题   3。是OOP的补充,不是替代 除了面向切面编程,还有如下编程范式:   1。面向过程编程:如c/python   2。面向对象编程:如java/c++   3。函数式编程   4。事件驱动编程(GUI开发中比较常见)   5。面向切面编程 1.2。AOP(面向切面编程)解决的问题 1。DRY:Don't Repeat yourself 避免代码重复问题 2。SoC:Separation of Concerns 关注点分离 (1)。水平分离:展示层-》服务层-》持久层   (2)。垂直分离:模块划分(订单/库存等业务角度) (3)。切面分离:分离功能性需求与非功能性需求(把非功能性需求从功能性需求中剥离开来集中管理) 1.3。AOP(面向切面编程)好处 AOP好处即为“集中管理”: 1。集中处理某一关注点/横切逻辑; 2。可以方便的添加/删除关注点; 3。侵入性少,增强代码可读性及可维护性; 1.4。AOP(面向切面编程)应用声景 1。权限控制 2。缓存控制 3。事务控制(数据库事务控制) 4。审计日志(操作记录) 5。性能监控 6。分布式追踪 7。异常处理 以上为偏非功能性需求,特别适合AOP应用声景。 1.5。支持AOP

AOP与IOC区别

穿精又带淫゛_ 提交于 2020-01-05 06:05:48
Spring核心知识 Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。 为什么说Spring是一个一站式的轻量级开源框架呢?EE开发可分成三层架构,针对JavaEE的三层结构,每一层Spring都提供了不同的解决技术。 • WEB层:SpringMVC • 业务层:Spring的IoC • 持久层:Spring的JDBCTemplate(Spring的JDBC模板,ORM模板用于整合其他的持久层框架) 从上面的简要介绍中,我们要知道Spring的核心有两部分: • IoC:控制反转

Spring AOP通俗理解与应用

岁酱吖の 提交于 2020-01-05 06:05:04
目录 AOP 图解AOP 概念 通俗理解AOP 作用 实现方式 应用场景 应用 Aop与SpringAOP的关系   关于AOP,一般都会先去了解AOP的基础概念,如切点、通知、连接点、切入点 、引入和织入等,面对晦涩难懂的概念,很容易陷入困境,找了几篇讲解较好的文章,将其整合起来,帮助深入理解AOP AOP   AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP(面向对象编程)的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容(Spring核心之一),是函数式编程的一种衍生范型。 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 作用   为了更清晰的逻辑,可以让你的业务逻辑去关注自己本身的业务,而不去想一些其他的事情,这些其他的事情包括:安全,事物,日志等。 图解 传统的纵向体系代码复用: 横向抽取机制(AOP思想): 概念 1.通知(Advice)   就是你想要的功能,也就是上面说的安全,事务,日志等。你得先定义好把,然后在想用的地方用一下。 2.连接点(JoinPoint)   这个更好解释了,就是spring允许你使用通知的地方,那可真就多了,基本每个方法的前,后

Spring AOP 详解

陌路散爱 提交于 2020-01-05 06:02:11
  AOP作为Spring中核心部分,在Spring中扮演者重要的角色。AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。Aop 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。   实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。   关于动态代理和静态代理的原理,大家可以参考: http://www.cnblogs.com/yfyzy/p/4401833.html   在我们学习Spring的AOP之前,我们先来学习学习一下关于AOP的相关术语。   1.通知(Advice)   通知定义了切面是什么以及何时使用。描述了切面要完成的工作和何时需要执行这个工作,就像我们平时约会时说的时间地点一样∩_∩。   2.连接点(Joinpoint):   程序能够应用通知的一个“时机”,这些“时机”就是连接点,例如方法被调用时、异常被抛出时等等。   3.切入点(Pointcut)   通知定义了切面要发生的“故事”和时间

针对spring--AOP的理解及例子

人盡茶涼 提交于 2020-01-05 06:02:01
1.了解AOP的相关术语 1.通知(Advice): 通知定义了切面是什么,以及何时使用。描述了切面要完成的工作和何时需要执行这个工作。 2.连接点(Joinpoint): 程序能够应用通知的一个“时机”,这些“时机”就是连接点,例如方法被调用时、异常被抛出时等等。 3.切入点(Pointcut): 通知定义了切面要发生的“故事”和时间,那么切入点就定义了“故事”发生的地点,例如某个类或方法的名称,Spring中允许我们方便的用正则表达式来指定(切面在哪个方法的前或后做出的那个方法点) 4.切面(Aspect): 通知和切入点共同组成了切面:时间、地点和要发生的“故事”,事务管理是J2EE应用中一个很好的横切关注点例子,切面用Spring的Advisor或拦截器实现 5.引入(Introduction): 引入允许我们向现有的类添加新的方法和属性(Spring提供了一个方法注入的功能) 6.目标(Target): 即被通知的对象,如果没有AOP,那么它的逻辑将要交叉别的事务逻辑,有了AOP之后它可以只关注自己要做的事(AOP让他做爱做的事) 7.代理(proxy): 应用通知的对象,详细内容参见设计模式里面的代理模式 8.织入(Weaving): 把切面应用到目标对象来创建新的代理对象的过程,织入一般发生在如下几个时机: (1)编译时:当一个类文件被编译时进行织入

Spring-aop

白昼怎懂夜的黑 提交于 2020-01-05 05:48:17
特点  是对oop的补充,解决代码混乱和代码分散的问题,通过动态代理实现AOP 概念  切面  实现AOP功能的类     通知  切面类中实现切面功能的方法     连接点  程序执行的特定位置     切点  连接点的定义     目标  被通知的对象     代理  向目标应用通知而产生的对象 用法  要通过接口创建目标的代理     配置AOP  注解  基于AspectJ               容器配置  启用扫描器                     启用AspectJ注解支持  <aop:aspectj-autoproxy></aop:aspectj-autoproxy>                     定义切面类  @Component  容器管理                            @Aspect  切面类                            定义通知  参数JoinPoint  代表连接点的数据                                          getSignature().getName()  方法名                                          getArgs()  返回Object[]  参数列表                    

Spring4.0学习笔记(11) —— Spring AspectJ 的五种通知

和自甴很熟 提交于 2020-01-05 05:48:02
Spring AspectJ 一、基于注解的方式配置通知 1、额外引入的jar包:   a) com.springsource.org.aopalliance-1.0.0.jar   b) com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar   c) spring-aop-4.0.0.RELEASE.jar   d) spring-aspects-4.0.0.RELEASE.jar 2、在xml中加入aop 的命名空间   xmlns:aop="http://www.springframework.org/schema/aop"   //自动为匹配的类生成代理对象   <aop:aspectj-autoproxy></aop:aspectj-autoproxy> 3、把横切关注点的代码抽象到切面的类中   a) 切面首先是一个 IOC 的bean,即加入@Component 注解   b) 切面还需要加入@Aspect 4、在类中声明各种通知   a) @before 前置通知 在方法执行之前执行     a.i) AspectJ 表达式 : @Before("execution(*1 com.spring.springaop.*2.*3(...))") //*1 代表 所有类型的返回值;*2 代表 所有的类;*3

springAOP

送分小仙女□ 提交于 2020-01-05 05:45:52
springAOP 一、 IOC IOC 叫控制反转,对象的创建由外部框架来实现,控制权交给了外部容器,控制发生了反转,也叫依赖注入,程序中需要对象,则依赖外部框架把对象进行注入。 IOC 是一个容器,对象被创建之后都存储在这个容器中,对象默认是单例模式,可以通过 scope 这个属性来改变。对象的配置可以在配置文件中处理,也可以运用注解的方式来创建对象,程序通过 ApplicationContext.getBean() 这个方法来获取对象,也可以通过注解 @Autowired 或 @Resource(name="stu12") 自动注入。如果是通过注解的方式来自动创建 Bean ,则配置文件要启动注解并扫描相关的包,类前还需要添加相关的注解: @Service , @Component , @Controller , @Repository 。 二、 AOP 面向切面编程,对于程序内部进行横切关注,把公共的代码抽取出来,形成切面,再通过连接点去监听指定方法的执行情况,在方法执行过程中把切面织入到被监听的方法中去。方法被动的被执行某些功能代码。 三、 相关概念: Aspect( 切面 ): 指横切性关注点的抽象即为切面 , 它与类相似 , 只是两者的关注点不一样 , 类是对物体特征的抽象 , 而切面是横切性关注点的抽象 . joinpoint( 连接点 ):