切面

spring 学习笔记

亡梦爱人 提交于 2019-12-06 03:01:10
闲话 最近简单的学习了一下 springboot,记录下自己的一些学习心得,没有体系,没有深入讲解,基本只涉及到一些概念级,权当随笔记录。。他日翻看时,希望能有所帮助,肯定也有理解不到位之处,还请大家指正 为什么会有 spring 学习一项技术,我们首先需要弄明白,这项技术出现的意义是什么,它能够解决什么场景问题,知其然,必先知其所以然 一般大型的企业级java应用,都会包含很多的内容模块,包括各种接口、逻辑、页面、存储等,它们之间可能存在复杂的依赖关系,如何对他们进行统一的管理和调度是影响开发效率的重要因素 容器化管理我们的应用程序,是上述问题的通用解决方案:应用的开发针对 pojo、bean或者组件,然后交由容器去负责组装调用,实现解耦 在spring之前,java官方推荐的解决方案是 EJB,但是 EJB 是一个非常重型的框架,上手成本很高,对于中小型的企业应用支持并友好 于是民间组织在 EJB 的容器化管理的基础上,创建了 spring,相对来说更轻量级的开发框架,简单对比 EJB 的话,他俩的优缺点: EJB 面向的是组件级容器管理,spring 则是 bean 的管理,更细粒度,对于开发的理解更容易 EJB 和 spring 都支持 ioc 和 aop,但是 spring 封装的功能更强大简单,早期spring只支持xml配置方式,ejb只支持注解方式,随着发展

Spring AOP面向切面编程

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-05 19:02:32
1.通知(Advice)   就是你想要的功能,也就是上面说的 安全,事物,日志等。你给先定义好把,然后在想用的地方用一下。 2.连接点(JoinPoint)   这个更好解释了,就是spring允许你使用通知的地方,那可真就多了,基本每个方法的前,后(两者都有也行),或抛出异常时都可以是连接点,spring只支持方法连接点.其他如aspectJ还可以让你在构造器或属性注入时都行,不过那不是咱关注的,只要记住,和方法有关的前前后后(抛出异常),都是连接点。 3.切入点(Pointcut)   上面说的连接点的基础上,来定义切入点,你的一个类里,有15个方法,那就有几十个连接点了对把,但是你并不想在所有方法附近都使用通知(使用叫织入,以后再说),你只想让其中的几个,在调用这几个方法之前,之后或者抛出异常时干点什么,那么就用切点来定义这几个方法,让切点来筛选连接点,选中那几个你想要的方法。 4.切面(Aspect)   切面是通知和切入点的结合。现在发现了吧,没连接点什么事情,连接点就是为了让你好理解切点,搞出来的,明白这个概念就行了。通知说明了干什么和什么时候干(什么时候通过方法名中的before,after,around等就能知道),而切入点说明了在哪干(指定到底是哪个方法),这就是一个完整的切面定义。 5.引入(introduction)   允许我们向现有的类添加新方法属性

SpringBoot中使用aop-测试

筅森魡賤 提交于 2019-12-05 16:37:29
面向切面编程(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框架

二次信任 提交于 2019-12-05 07:12:17
一、Spring简介   Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构, 分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring的用途可以用于服务端的开发, 还可以从简单性、可测试性和松耦合的角度来说,任何Java应用都可以从Spring中受益。Spring 的核心是面向切面编程(AOP)和控制反转 (IOC) 容器。 简单来说 Spring 是一个分层的 JavaSE/EEfull-stack( 一站式 ) 轻量级开源框架。 二、Spring框架   Spring框架是一个分层架构,由七个良好的模块组成。Spring模块构建在核心容器之上, 核心容器定义了创建、配置和管理Bean方式 , 入下图所示。      组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下: 核心容器 :核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory ,它是工厂模式的实现。 BeanFactory 使用 控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 Spring 上下文 :Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring

spring --读写分离

*爱你&永不变心* 提交于 2019-12-05 03:39:32
实现流程 1.ssm基本流程 1.1 一个http请求,被springMVC的DispatcherServlet拦截,然后交给HandleRequest处理。 1.2 HandleRequest调用HandlerMapping与HandlerAdapter两个类,去匹配controller上的路径。 1.3 一旦匹配上,就执行该路径对应的方法。 1.4 controller层只是起一个控制作用,实际的业务处理交给service实现层。 1.5 实现层处理完数据,将结果返回给controller层。 这是一个基本的ssm流程 2.实现读写分离 2.1 配置一个动态数据源切面,将该切面添加到service上。 2.2 一旦有请求进来,执行到service层,该切面进行拦截,能够获取到请求方法的名称和参数。 2.3 这里我们只需要方法名称就够了,实际上这里拿到的方法名称与请求参数可以做缓存(即是spring缓存原理)。该切面完成的功能是:根据执行方法名称判断应该走读库还是走写库,这里返回的是一个标记(读库还是写库的标记)。 2.4 接着有一个动态数据源的bean,该bean继承spring的AbstractRoutingDataSource类,并且覆写该类的determineCurrentLookupKey方法,返回读写库标记。同时该bean配置在spring-mybatis

spring总览

南楼画角 提交于 2019-12-05 02:30:45
Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。 2. 使用Spring框架的好处是什么? 轻量: Spring 是轻量的,基本的版本大约2MB。 控制反转: Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。 面向切面的编程(AOP): Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。 容器: Spring 包含并管理应用中对象的生命周期和配置。 MVC框架 :Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。 事务管理: Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。 异常处理: Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。 3. Spring由哪些模块组成 ? 以下是Spring 框架的基本模块: Core module Bean module Context module Expression Language

《Spring实战》第一章

自古美人都是妖i 提交于 2019-12-05 00:39:46
1.1 使用Spring简化Java开发 为了降低Java开发,Spring使用了一下4种关键策略: 基于POJO的轻量级和最小侵入性编程; 通过依赖注入和面向接口实现松耦合; 基于切面和管理进行声明式编程; 通过切面和模版减少样板式代码; 1.1.1 激发POJO的潜能 Spring竭力避免因自身的API而弄乱你的代码。不会强迫你去实现Spring规范的接口或继承Spring规范的类,相反,它的类通常没有任何痕迹表名你使用了Spring。最坏的场景是,一个类或许会使用Spring的注解,但它仍然是POJO。 1.1.2 依赖注入(DI) 任何一个有实际意义的应用都会由两个或者更多的类组合,这些类相互之间进行协作来完成特定的业务逻辑。按照传统做法,每个对象负责管理与自己互相协作的对象的引用,这将会导致高度耦合和难以测试的代码。 耦合具有两面性。一方面,紧密耦合的代码难以测试、难以复用、难以理解,并且典型地出现打地鼠式的bug特性。另一方面,一定程度的耦合又是必须的,完全没有耦合的代码什么也做不了。总而言之,耦合是必须的,但应当被小心谨慎的管理。 通过依赖倒置,对象的依赖关系将由系统中负责协调各对象的第三方组件在创建对象的时候进行设定。对象无需自行创建或管理它们的依赖关系,依赖系统将被自动侏儒到需要他们的对象中去。 1.1.3 应用切面(AOP)

SSH中各个框架的作用以及Spring AOP,IOC,DI详解

人走茶凉 提交于 2019-12-04 16:11:47
在SSH框假中spring充当了管理容器的角色。我们都知道Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语句。Struts是用来做应用层的,他它负责调用业务逻辑serivce层。所以SSH框架的流程大致 是:Jsp页面----Struts------Service(业务逻辑处理类)---Hibernate(左到右)struts负责控制Service(业务逻辑处理类),从而控制了Service的生命周期,这样层与层之间的依赖和强,属于耦合。这时,使用spring框架就起到了控制Action对象(Strus中的)和Service类的作用,两者之间的关系就松散了,Spring的Ioc机制(控制反转和依赖注入)正是用在此处 首先想说说IoC(Inversion of Control,控制倒转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。这是什么意思呢,举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的mm,然后打听她们的兴趣爱好、qq号、电话号、ip号、iq号………,想办法认识她们,投其所好送其所要,然后嘿嘿……这个过程是复杂深奥的,我们必须自己设计和面对每个环节。传统的程序开发也是如此

question

南楼画角 提交于 2019-12-04 15:45:52
400:请求无效 403:服务器端拒绝访问 声明的对象 Aop是基于代理对象来实现功能扩展;代理对象DI注入给controller层对象里面的组合引用 handermapping(是将url和targetObject+targetMethod绑定); springmvc的流程:客户端向服务器端发起请求,tomcat服务器端会从池中获取一个线程,线程调io读取网络数据,读到数据并处理数据封装到requset对象(参数httpservletrequest),交给过滤器(filters)进行过滤,再到dispatcherservlet(继承了httpservlet)(其核心方法dodispatcher)->handlermapping(getHandler方法接受httpservletrequest参数)->处理器适配器(httpservletrequest参数,object参数)->controller->service->dao->数据库交互--model+view->视图解析器->视图渲染->最后通过前端控制器响应给前端. handlermapping核心方法getHandler返回HandlerExecutionChain,包装了当前请求需要执行的Handler和interceptors Spring AOP 同一切面下的Advice执行顺序: