spring原理

3.2大神之路-Spring(四)——AOP

此生再无相见时 提交于 2020-01-28 04:07:02
导航 AOP 1. AOP是什么? 2. Spring AOP怎么用? 2.1 Spring AOP相关术语 2.2 Spring AOP在生产中角色 2.3 基于XML配置 Spring AOP 第一步:编写配置文件 2.3.2 通知类型 配置``切入点 配置` AOP 1. AOP是什么? AOP:aspect oriented programming,面向切面编程,通过 预编译 和运行期 动态代理 实现程序功能统一维护的一种技术。 AOP可以对业务逻辑的各个部分进行隔离,使业务逻辑耦合度降低,提高程序的可重用性,提高开发效率。 作用 程序运行期间,不修改源码对已有方法进行增强; 优势 减少重复代码 提高开发效率 维护方便 2. Spring AOP怎么用? 通过配置的方式,实现 动态代理 章节 《动态代理》 的功能 Spring可以手动控制到底基于接口还是子类的动态代理 2.1 Spring AOP相关术语 在看其他Spring AOP的资料时,特别需要掌握,因为其他人不会再从底层原理开始讲解了,而是会直接会基于Spring AOP说: Spring AOP术语 说明 Joinpoint (连接点) 指那些被拦截到的点,因为Spring只支持方法类型的连接点,Spring中指的就是方法。如:业务接口的所有方法就都是连接点。连接的是我们的业务,增强方法中的点 Pointcut

Day3——IOC和DI简介

房东的猫 提交于 2020-01-27 16:46:34
一. 回顾 前面讲到了 Day1——Spring简介 和 Day2——搭建Spring环境 ,今天讲一下IOC和DI到底是什么?大家了解即可,后面会详细讲述结构和原理 二. IOC简介 Inversion Of Control,简称IOC。中文名叫 反转控制,或者控制反转 。 传统编程思想: 我想要什么,就要主动去做什么。比如生活中我想吃饭,我得自己买菜煮饭 反转控制思想: 我想要什么,只需要等着接受就可以了。比如生活中我想吃饭,等着妈妈做好饭菜给你端过来即可。饭来张口。 IOC处于spring中的什么位置呢? 答:处于spring的最底层,所有spring操作都需要基于IOC进行。详情可看 Day1——Spring简介 。如下图: 三. DI简介 Dependency Injection,简称DI。 中文名依赖注入。 依赖注入更加能贴合IOC的意思,可以说是IOC的一种具体的实现。DI是组件以一些预定义好的方式(例如setter方法)接受来自于容器的资源注入。相对于IOC而言,这种表述更直接。 以上内容粗略了解即可,后面会详细讲述 来源: CSDN 作者: Android_la 链接: https://blog.csdn.net/qq_40634846/article/details/104092827

spring原理

坚强是说给别人听的谎言 提交于 2020-01-25 15:30:18
spring原理 一、spring原理 内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的 。 Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 配置类达到的。 Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象) 要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。 Spring里用的最经典的一个设计模式就是:模板方法模式。(这里我都不介绍了,是一个很常用的设计模式), Spring里的配置是很多的,很难都记住,但是Spring里的精华也无非就是以上的两点,把以上两点跟理解了 也就基本上掌握了Spring。 二、Spring AOP与IOC 1、 IoC(Inversion of control): 控制反转 概念:控制权由对象本身转向容器

网上spring源码分析资源汇总

偶尔善良 提交于 2020-01-25 02:28:04
https://www.jianshu.com/u/83d13e631c12 这是一个很不错很全面的spring和spingboot源码分析的博客,作者分析的很详细,源码几乎每行都有注释。 https://javadoop.com/post/spring-ioc 关于spring ioc原理的源码分析,很有深度,可以多读。 https://javadoop.com/post/spring-aop-intro https://javadoop.com/post/spring-aop-source spring aop分析,也是很全面详细。 来源: CSDN 作者: chuixue24 链接: https://blog.csdn.net/chuixue24/article/details/103814719

曹工说Spring Boot源码(7)-- Spring解析xml文件,到底从中得到了什么(上)

无人久伴 提交于 2020-01-25 00:55:21
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean Definition到底是什么,咱们对着接口,逐个方法讲解 曹工说Spring Boot源码(3)-- 手动注册Bean Definition不比游戏好玩吗,我们来试一下 曹工说Spring Boot源码(4)-- 我是怎么自定义ApplicationContext,从json文件读取bean definition的? 曹工说Spring Boot源码(5)-- 怎么从properties文件读取bean 曹工说Spring Boot源码(6)-- Spring怎么从xml文件里解析bean的 工程代码地址 思维导图地址 工程结构图: 概要 大家看到这个标题,不知道心里有答案了没?大家再想想,xml文件里都有什么呢? 这么一想,spring的xml文件里,内容真的很多,估计很多元素你也没配置过,尤其是这两年新出来的 程序员 ,估计都在吐槽了,现在不都是注解了吗,谁还用xml?但其实,不管是xml,还是注解,都是配置信息,只是不同的表现形式而已,看过我前面几讲的同学,应该知道,我们用json、properties文件写过bean的配置信息。 所以,具体形式不重要

Spring Boot 原理分析

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-21 08:03:28
Spring Boot 原理分析 文章目录 Spring Boot 原理分析 查看pom的parent节点 查看spring-boot-starter-parent对应pom文件 查看spring-boot-dependencies对应pom文件 查看pom的parent节点 创建Spring Boot项目需要添加如下节点信息 < parent > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-parent </ artifactId > < version > 2.2.2.RELEASE </ version > < relativePath /> <!-- lookup parent from repository --> </ parent > 按住Ctrl并单击“spring-boot-starter-parent”跳转至对应文件,发现又是一个pom文件 查看spring-boot-starter-parent对应pom文件 < parent > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-dependencies </ artifactId

Springboot 应用启动原理分析

梦想与她 提交于 2020-01-20 10:54:18
在 spring boot 中,很吸引人的一个特性是可以直接把应用打包称为一个 jar/war,这个 jar/war 是可以直接启动的,不需要额外配置 web server。 疑问 Spring boot 如何启动? Spring boot 内置的 embed tomcat 是如何工作的?静态文件,jsp,网页模板是如何加载到的? 打包为单个 jar 包时,spring boot 的启动方式 maven 打包之后,会生成两个 jar 文件: demo-0.0.1-SNAPSHOT.jar demo-0.0.1-SNAPSHOT.jar.original 其中 demo-0.0.1-SNAPSHOT.jar.original 是默认的 maven-jar-plugin 生成的包。demo-0.0.1-SNAPSHOT.jar 是 spring boot maven 插件生成的 jar 包,里面包含了应用的依赖,以及 spring boot 相关的类。 先来看看 spring boot 打包好的目录结构: ├── META-INF │ ├── MANIFEST.MF ├── application.properties ├── com │ └── example │ └── SpringBootDemoApplication.class ├── lib │ ├──

spring spring mvc原理

流过昼夜 提交于 2020-01-20 03:41:42
spring mvc原理 spring mvc初始化 spring容器初始化执行refresh()方法,走到最后一步finishRefresh()方法 finishRefresh()方法内部调用ApplicationListener.onApplicationEvent方法 spring mvc提供ContextRefreshListener类,实现ApplicationListener接口,重写onApplicationEvent方法 onApplicationEvent方法内部调用DispatcherServlet.initStrategies方法初始化spring mvc各组件 DispatcherServlet.initStrategies() protected void initStrategies ( ApplicationContext context ) { initMultipartResolver ( context ) ; initLocaleResolver ( context ) ; initThemeResolver ( context ) ; initHandlerMappings ( context ) ; // 映射器 initHandlerAdapters ( context ) ; // 适配器

springboot配置

半世苍凉 提交于 2020-01-19 22:08:49
YAML语法 基础语法: k:(空格) v 以此来表示一对键值对(空格不能省略);以空格的缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。 注意 :属性和值的大小写都是十分敏感的。例子: server: port: 8081 path: /hello 值的写法 字面量:普通的值 [ 数字,布尔值,字符串 ] k: v 字面量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号; “” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思; 比如 : name: "kuang \n shen" 输出 : kuang 换行 shen '' 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出 比如 : name: ‘kuang \n shen’ 输出 : kuang \n shen 对象、Map(键值对) k: v1: v2: 在下一行来写对象的属性和值得关系,注意缩进;比如: student: name: qinjiang age: 3 行内写法 student: {name: qinjiang,age: 3} 数组( List、set ) 用 - 值表示数组中的一个元素,比如: pets: - cat - dog - pig 行内写法 pets: [cat,dog,pig] 修改SpringBoot的默认端口号 配置文件中添加

spring总结--spring IOC

夙愿已清 提交于 2020-01-19 04:44:08
所谓 IOC ,就是由 Spring IOC 容器来负责对象的生命周期和对象之间的关系 IoC Inversion of Control,控制反转。是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(DependencyInjection,简称 DI),这也是 Spring 的实现方式。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。 IoC原理 IoC 内部核心原理就是反射技术,当然这里面还涉及到 Bean 对象的初始化构建等步骤,这个在后面的生命周期中讲,这里我们需要了解 Java 中反射是如何做的就好。这里主要说明下主要的相关类和可能面试问题转向,具体的 API 实现需要自己去看: 类 说明 InvocationHandler 通过这个接口定义横切的逻辑,然后通过反射机制调用目标类的方法,这样就能动态的把非业务逻辑和业务逻辑动态的拼接在一起 proxy 提供创建动态代理类实例的静态方法,通常利用InvocationHandler创建代理实例,来间接调用代理的方法 都在 java.lang.reflect 包下。说到这个模块的时候,那么面试官可能会考察相关的知识,主要是考察你是否真的有去了解过反射的使用。**举两个例子: **