切面

ch05-ch07

随声附和 提交于 2019-11-27 03:39:08
第五章 Spring 核心概念 5.1 初始Spring 5.1.1 Spring的“绿草丛” Spring确实给人一种格外清新、爽朗的感觉,仿佛微雨后的绿草丛,讨人喜欢,又蕴藏着勃勃生机。Spring是一个轻量级框架,它大大简化了Java企业级开发,提供了强大、稳定的功能,又没有带来额外的负担,让人们在使用它做每件事情的时候都有得体和优雅的感觉。Spring 有两个主要目标:一是让现有技术更易于使用,二是促进良好的编程习惯(或者称为最佳实践)。 Spring 是一个全面的解决方案,但它坚持-一个原则:不重新发明轮子。已经有较好解决方案的领域,Spring绝不做重复性的实现。例如,对象持久化和ORM, Spring 只是对现有的JDBC、MyBatis.Hibenate等技术提供支持,使之更易用,而不是重新做- - 个实现。 Spring 框架由大约20个功能模块组成。这些模块被分成六个部分,分别是Core Container. DataAccess/integation. Web. AOP (Aspect Oriented Programming). Instumentation及 Test,如图5 .1所示。 Spring Core是框架的最基础部分,提供了loC 特性。Spring Context为企业级开发提供了便利和集成的工具.SpingAOP是基于Spring

ssm的一些概念

旧城冷巷雨未停 提交于 2019-11-27 02:26:18
xml Extensible Markup Language 可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。 dtd DTD为英文Document Type Definition,中文意思为“文档类定义”可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。 DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。 junite xUnit是一套基于测试驱动开发的测试框架 其中的断言机制:将程序预期的结果与程序运行的最终结果进行比对,确保对结果的可预知性 要求 1.测试方法上必须使用@Test 2.测试方法必须使用 public void进行修饰 3.新建一个源代码目录来存放测试代码 4.测试类的包应该和被测试类的包一样 5.测试单元中的每个方法一定要能够独立测试,其方法不能有任何依赖 mapper MyBatis 通用 Mapper 是一个可以让开发人员更方便使用 MyBatis 的扩展, 通过简单的配置,可以方便的直接获取单表的常见操作,提供如 select, selectAll, selectCount, delete, update 以及 Example 相关的方法。 开发人员不需要编写SQL,不需要在DAO中增加方法,只要写好实体类,就能支持相应的增删改查方法。 MyBatis 是支持普通

1.springAOP原理分析

狂风中的少年 提交于 2019-11-27 01:10:45
环境:jdk1.8 + spring boot 2.0.9.RELEASE Spring AOP的实现本质上就是代理Proxy + 一系列的拦截器 使用@Aspect,引入依赖 <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.2</version> </dependency> 1. AOP中的几个关键词介绍 (概念性的东西,copy别人的) 切面(Aspect) :官方的抽象定义为“一个关注点的模块化,这个关注点可能会横切多个对象”。 连接点(Joinpoint) :程序执行过程中的某一行为,个人理解为是对目标对象method的封装。 通知(Advice) :“切面”对于某个“连接点”所产生的动作。 切入点(Pointcut) :匹配连接点的断言,在AOP中通知和一个切入点表达式关联。 目标对象(Target Object):被一个或者多个切面所通知的对象。 AOP代理(AOP Proxy): 在Spring AOP中有两种代理方式,JDK动态代理和CGLIB代理。 可以通过以下方式定义一个切面,切入点表达式限定了那些对象需要被代理,以下仅以demoController为例 @Aspect @Component public class

spring的一些概念及优点

混江龙づ霸主 提交于 2019-11-26 22:59:14
Spring是一个轻量级的DI和AOP容器框架。说它轻量级有一大部分原因是相对于EJB的(虽然本人从来没有接触过EJB的应用),但重要的是Spring是非侵入式的,基于Spring开发应用一般不依赖于Spring的类。 Spring中的一些概念 DI(Dependency Injection,依赖注入) 依赖注入是控制反转的具体实现。当一个角色需要另外一个角色协助的时候,在传统的程序设计中,通常由调用者来创建被调用者的实例,但是在Spring中创建被调用者将不再由调用者完成,而是交给容器去统一创建,这就是控制反转。创建被调用对象由Spring来完成,在容器实例化对象的时候主动地将被调用者(或者说它的依赖对象)注入给调用对象,这就是依赖注入。 AOP(Aspect Oriented Programming,面向切面编程) Spring对面向切面编程提供了强有力的支持,通过它让我们将业务逻辑从应用服务(如事务管理)中分离出来,实现了高内聚开发,应用对象只关注业务逻辑,不再负责其他系统问题,比如日志、事务或权限等。另外Spring还支持用户自定义切面。 面向切面编程是面向对象编程的一个有力补充。面向对象编程将程序分成各个层次的对象,面向切面的程序将运行过程分解成各个切面。AOP是从运行程序的角度去考虑程序的结构,提取业务处理过程的切面,OOP是静态的抽象,AOP则是动态的抽象

Spring

徘徊边缘 提交于 2019-11-26 22:47:20
概述 轻量级控制反转和面向切面的容器框架。 功能: 使用基本的JavaBean代替EJB(Enterprise JavaBean) 优点: 低侵入性 高服用性 DI有效降低耦合度 AOP提供了通用任务的集中管理 ORM(对象实体映射)和DAO简化对数据库的访问 高开放性,并不强制 核心: IoC Inversion of Control,控制反转,其另一个名字是依赖注入(Dependency Injection),就是有Ioc容器在运行期间,动态地将某种依赖关系注入到对象之中。 所以,DI和IoC是从不同角度描述的同一件事情,就是指通过引入IoC容器,利用依赖关系注入的方式,实现对象的解耦。 粘合剂,将对象之间的耦合交给IoC容器进行,从而达到解耦的目的。 AOP 面向切面编程,从动态角度研究。 功能:将系统级别处理(日志管理、调试管理、事务管理、缓存等等)分离出来,模块化,而不影响业务逻辑。 专门用于处理系统中分布于各个模块中的交叉关注点的问题。 AOP 代理其实是由AOP框架动态生成的一个对象,该对象可作为目标对象使用。 AOP使用: 定义普通业务组件 定义切入点 定义增强处理 代理对象的方法 = 被代理对象的方法 + 增强处理 AOP关键概念: 横切性关注点(Cross Cut Concern):一个独立的服务,不与其他业务逻辑耦合。可能遍布在系统的各个角落

Spring作用,MVC容器作用

我是研究僧i 提交于 2019-11-26 21:54:25
Spring的作用:用来简化控制逻辑,用于各个层间的解耦。 Spring用到的技术有如下: 1. IoC Inversion of Control 也叫 Dependency Injection。作用是解耦,将依赖的变量通过容器框架来实现,而不是在程序中直接赋值, 控制权由应用代码中转到了外部容器 。典型的就是 指控制bean的权利转移给容器了,如dao的Ioc 2. 切面编程 aop:面向切面编程。先了解切面,什么是我们所谓的切面?我们在什么地方切面?当然,我们谈得是在方法上的切面,那么方法上都会有哪些切面呢?经过我们的学习,我们可以在方法的前面、后面、中间。*_* 这样有点笼统。具体是调用方法之前、调用方法返回之后、调用方法返回之前,调用方法出现异常时等等,在这些地方都可以插入自己相干的事儿,这些事儿就是切面了。下一步,我们如何去插入我们的这些事儿呢?代理,动态代理,不管是针对接口代理,还是生成其子类代理,这些代理技术就是解决了怎么样插入切面的问题,你还有其他方式来解决如何插入切面问题吗?spring解决了这个问题,我们所要做的只是编写切面,配置切面的切入点、切面类型等 MVC容器用于url和Action之间的映射,拦截器的处理,以及Action处理完成之后的跳转 来源: http://www.cnblogs.com/kevinge/archive/2013/03/25

springboot、AspectJ切面编程

丶灬走出姿态 提交于 2019-11-26 20:38:50
一)、在pom.xml文件增加以下配置 <!--不指定版本的原因,如不指定版本,会默认下载springboot对应版本的jar --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> 二)、编写一个controller类,该类主要用于测试 package com.oysept.springboot.controller; import java.util.ArrayList; import java.util.List; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** * * @author ouyangjun */ @RestController @RequestMapping(value="/aspectj") public class

Spring Boot 整合Aop切面编程

微笑、不失礼 提交于 2019-11-26 17:15:30
Spring 框架的一个关键组件是面向切面的编程(AOP)框架。面向方面的编程需要把程序逻辑分解成不同的部分称为所谓的关注点。跨一个应用程序的多个点的功能被称为横切关注点,这些横切关注点在概念上独立于应用程序的业务逻辑。有各种各样的常见的很好的方面的例子,如日志记录、审计、声明式事务、安全性和缓存等。 在 OOP 中,关键单元模块度是类,而在 AOP 中单元模块度是方面。依赖注入帮助你对应用程序对象相互解耦和 AOP 可以帮助你从它们所影响的对象中对横切关注点解耦。 Spring AOP 模块提供拦截器来拦截一个应用程序,例如,当执行一个方法时,你可以在方法执行之前或之后添加额外的功能。 下面是关于AOP的一些术语: Aspect 切面,一个模块具有一组提供横切需求的 APIs。例如,一个日志模块为了记录日志将被 AOP 方面调用。应用程序可以拥有任意数量的方面,这取决于需求。 Join point 切点,在你的应用程序中它代表一个点,你可以在插件 AOP 方面。你也能说,它是在实际的应用程序中,其中一个操作将使用 Spring AOP 框架。 Advice 这是实际行动之前或之后执行的方法。这是在程序执行期间通过 Spring AOP 框架实际被调用的代码。 Pointcut 这是一组一个或多个连接点,通知应该被执行。可以使用execution表达式或模式指定切入点

SpringBoot中使用aop-测试

我与影子孤独终老i 提交于 2019-11-26 10:59:55
面向切面编程(AOP),该种方式主要是为了弥补面向对象编程(OOP)的不足,通过配置切面以及关注点、通知等我们可以在程序的任意位置对我们的代码进行增强(执行一些代码),AOP是Spring的特性之一,通常我们使用AOP来实现日志的补记录以及实现一些声明式的事务等。 接下来,通过一个简单的例子来测试一下AOP如何使用: 1、pom.xml文件的依赖如下 <dependencies> <!--1.单元测试的依赖--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!--2.aop的依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!--3.cglib动态代理的依赖--> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>3.2.5</version> </dependency> <!--4.web依赖-->

Spring学习笔记2

别说谁变了你拦得住时间么 提交于 2019-11-26 06:40:26
一、什么是AOP 面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 在不影响原来功能代码的基础上,使用动态代理加入自己需要的一些功能(比如权限的验证,事务的控制,日志的记录等等),移除之后,并不影响原来的功能 面向切面编程是通过动态代理实现的,是对面向对象思想的补充。 可以提供声明式的事务管理。 aop的advice有哪些 1)before:在执行切入的方法之前,执行代码 2)after returning:在执行切入的方法正常执行(没有异常)之后,执行代码 3)after throwing:在执行切入的方法发生异常的时候,执行代码 4)after:在执行切入的方法无论是否发生异常,都必须最后执行代码 二、配置切点和切面 1)找到需要加事务的方法(方法的定位,可以类似于通配符来定位) execution(public * cn.com.bochy.dao.impl.UserDaoImpl.insertUser(..)) 开发中,事务的处理是在service层处理的,所以必须切入service层 execution(public * cn.com.bochy.service.impl.*.*(..)) 2)找到之后,在方法开始之前,需要加上事务 对应advice:before 3)在方法运行中如果有异常,回滚 对应advice:after