![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Spring
文章平均质量分 59
MrDJun
热爱学习,传递知识。
展开
-
Spring5源码 - refresh()方法
refresh() 在 AbstractApplicationContext 类中。public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. //1、刷新前的工作准备 prepareRefresh();原创 2021-08-25 22:35:58 · 267 阅读 · 0 评论 -
Spring5源码 - 从缓存中获取Bean
Spring5源码 - 从缓存中获取Bean获取Bean的方法在 AbstractBeanFactory 中的 doGetBean方法中,按照Spring的方法命名规则,以do开头的方法才是真正做事情的方法。protected <T> T doGetBean(final String name, @Nullable final Class<T> requiredType, @Nullable final Object[] ar原创 2021-08-25 22:37:55 · 190 阅读 · 0 评论 -
Spring5源码 - Aware
从Bean中获取到的容器实例并对其进行操作。public interface Aware {}该接口只能当做是一个顶级接口使用,主要依赖于其下的子接口:BeanFactoryAware 就是用于获取BeanFactory相关的信息。ResourceLoaderAware 就是用于获取ResourceLoader相关信息。…以此类推。故在以上子接口中,均包含一个setter方法。什么意思呢?例如,当前有个Controller类需要获取ApplicationContext这个Bean,那么原创 2021-08-25 22:06:07 · 98 阅读 · 0 评论 -
Spring5源码 - PostProcessor后置处理器
后置处理器大类分为容器级别的后置处理器以及Bean级别的后置处理器:BeanDefinitionRegistryPostProcessorpublic interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor { void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansExcepti原创 2021-08-23 23:08:02 · 73 阅读 · 0 评论 -
Spring源码 - Resource、ResourceLoader
org.springframework.core.io.Resource定义了资源的基本操作,例如是否可读、是否存在等。public interface Resource extends InputStreamSource {...}public interface InputStreamSource { InputStream getInputStream() throws IOException;}类关系图如下这里使用的是策略模式,Resource是主接口,其三个实现类是策略。.原创 2021-08-23 23:06:58 · 117 阅读 · 2 评论 -
Spring5源码 - BeanDefinitionReader资源加载利器
用于将ResourceLoader或ResourcePatternResolver将配置信息解析成一个个的BeanDefinition,通过BeanDefinitionRegistry将BeanDefinition注册到容器。public interface BeanDefinitionReader { // 获取BeanDefinitionRegistry对象,主要作用将其注册到BeanDefinition的注册表中 BeanDefinitionRegistry getRegistry(原创 2021-08-23 23:05:10 · 85 阅读 · 0 评论 -
Spring5源码 - ApplicationContext(高级容器)
Spring5源码 - ApplicationContext(高级容器)ApplicationContext 称为高级容器的原因是其继承了多个接口,具备更多的功能。public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory,HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternReso原创 2021-08-23 23:04:26 · 272 阅读 · 1 评论 -
Spring5源码 - BeanFactory、FactoryBean
BeanFactory是SpringBean容器的根接口,定义了Bean工厂的最基本的特性,生成的类都是有此接口的实现类来管理的。FactoryBean 的本质也是一个Bean,用于生成普通的Bean,初始化时,会把这个接口的Bean给取出来,通过其中getObject() 方法来生成我们想要的bean。在spring的xml配置文件中可以通过以下方式来创建实例:public class User {}public class UserFactory { // 普通方法返回User对象,不原创 2021-08-23 23:03:47 · 137 阅读 · 1 评论 -
Spring5源码 - Bean、BeanDefinition、BeanDefinitionRegistry
Spring5源码 - Bean、BeanDefinition、BeanDefinitionRegistrySpring解决了一个关键的问题:将对象之间的关系转而用配置管理:依赖注入,依赖关系放在Spring的Ioc容器中管理通过把对象包装在Bean中以达到管理对象和进行额外操作的目的Bean的本质就是对象,只是这个对象的生命周期由容器来管理。不需要为了创建Bean而在原来的java类上添加任何额外的限制。对java对象的控制方式体现在配置上,根据配置生成描述Bean的BeanDefiniti原创 2021-08-23 23:02:01 · 114 阅读 · 0 评论 -
Spring5设计模式 - 装饰者模式
设计模式 - 装饰者模式指在不改变原有对象的基础上,将功能附加到对象上,比继承更加灵活。适用场景:(1)扩展一个类的功能或给一个类添加附加职责;(2)动态给一个对象添加功能,这些功能可以再动态的撤销;在生活中,给煎饼加鸡蛋、蛋糕加水果、房子装修等都是在为对象扩展一些额外的职责。煎饼加蛋加肠计算最终金额的案例分析:BatterCake: 普通煎饼public class BatterCake { protected String getMsg() { return "煎原创 2021-02-06 23:55:17 · 443 阅读 · 0 评论 -
Spring5设计模式 - 观察者模式
设计模式 - 观察者模式 观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者是又称为发布订阅模式。观察者一般是指第三方,负责通知订阅者消息。一、案例Observer 观察者一般是一个接口,每一个实现该接口的实现类都是具体观察者public interface Observer { // 接收订阅号的通知,所以每个观察者都需要实现这个方法 void update(Stri原创 2021-02-06 23:48:20 · 205 阅读 · 0 评论 -
Spring5设计模式 - 模板方法模式
设计模式 - 模板方法模式------------ 目录直通车 --------------设计模式 - 模板方法模式一、定义二、适用场景三、案例四、优缺点一、定义定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。二、适用场景一次性实现一个算法不变的部分,并将可原创 2021-02-05 12:00:54 · 202 阅读 · 1 评论 -
Spring5设计模式 - 代理模式
设计模式 - 代理模式-------目录直通车-------设计模式 - 代理模式一、静态代理二、动态代理模式三、静态代理和动态代理的区别四、代理模式在Spring中的应用五、代理模式的优缺点附:六、手写实现JDK的动态代理一、JDK实现方式二、手写实现JDK动态代理两种模式:静态代理、动态代理。两个目的:保护目标对象、增强目标对象。定义:代理模式(Proxy Pattern)是指为其他对象提供一种代理,以控制对这个对象的访问,属于结构型模式。在某些情况下,一个对象不适合或者不能直接引用另一个对象,原创 2021-02-04 23:30:18 · 239 阅读 · 0 评论 -
Spring5设计模式 - 适配器模式
设计模式 - 适配者模式-------------- 目录直通车 --------------------设计模式 - 适配者模式一、案例一二、案例二三、优缺点适配者模式是指将一个类的接口转换成用户期望的另一个接口,是原本不兼容的类可以一起工作。一、案例一插座的电压是 220V,手机充电器会把 220V 转换成 5V电压给手机充电,此时这个充电器就是一个适配器。AC220:插座输出 220V 电压public class AC220 { public int outputAC220V()原创 2021-02-04 23:27:57 · 325 阅读 · 0 评论 -
Spring5设计模式 - 委派模式
设计模式 - 委派模式定义:是一种面向对象的设计模式,允许对象组合实现与继承相同的代码重用。它的基本作用就是负责任务的调用和分配任务,是一种特殊的静态代理,可以理解为全权代理,但是代理模式注重过程,而委派模式注重结果。委派模式属于行为型模式,不属于GOF23种设计模式中。应用场景:1、委派对象本身不知道如何处理一个任务或请求,而交给其他对象来处理;2、实现程序的解耦经典案例:老板想要做一个XX项目,安排给项目经理,项目经理事先是了解整个项目组的每个人的职责的,于是项目经理拿到项目之后,分模块分配给原创 2021-01-31 16:46:04 · 246 阅读 · 0 评论 -
Spring5设计模式 - 策略模式
设计模式 - 策略模式策略模式:它定义了算法的家族,分别封装起来,让他们之前可以相互替换,此模式让算法的改变,不会影响到算法的客户。适用场景:假如系统中有很多类,而他们的区别仅仅在于他们的行为不同.一个系统需要动态地在几种算法中选择一种.一、用策略模式实现选择支付方式的业务场景在商城系统中,常常存在多种策略的优惠活动,比如拼团、返现促销、优惠券抵扣。下面是一个模拟这个场景的demo:促销策略的接口 PromotionStrategy:public interface Promot原创 2021-01-31 16:41:06 · 435 阅读 · 2 评论 -
Spring5设计模式 - 原型模式
设计模式 - 原型模式--------目录直通车-------设计模式 - 原型模式一、浅克隆二、深克隆三、克隆破坏单例模式原型模式是指原型实例指定创建对象的种类,并复制这些原型这些原型创建新的对象。主要适用于:(1)大量的Getter和Setter 赋值的场景(2)类初始化消耗资源较多。(3)使用 new 生成一个对象需要非常繁琐的过程(数据准备、访问权限)。(4)构造函数比较复杂。(5)在循环体中产生大量对象。 在 Spring 中,原型模式应用得非常广泛,例如 scope=“pr原创 2021-01-30 21:13:20 · 978 阅读 · 0 评论 -
Spring5设计模式- 工厂模式
设计模式 - 工厂模式分为简单工厂模式、工厂方法模式、抽象工厂。只关心结果,不关心过程;定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行;以生产手机为例,制造手机有一套标准,现在市面的手机品牌会找代工厂按照这个标准生产手机。一、简单工厂模式Phone类:手机标准规范类(AbstractProduct)public interface Phone { void make();}MiPhone类:制造小米手机public clas原创 2021-01-30 17:38:22 · 178 阅读 · 0 评论 -
Spring5设计模式 - 单例模式
设计模式 - 单例模式----------------目录直通车---------------设计模式 - 单例模式一、饿汉单例模式二、懒汉单例模式三、注册式单例模式1、枚举式单例模式2、容器缓存单例模式确保一个类在任何时候都绝对只有一个实例,并提供一个全局访问点。一、饿汉单例模式饿汉模式适用于单例对象较少的情况。写法一:直接在使用 static 关键字创建对象public class HungrySingleton { private static final HungrySingl原创 2021-01-30 17:31:42 · 183 阅读 · 0 评论 -
Spring中实例化Bean的三种方式
目录直通车1、构造器方法实例化 Bean2、静态工厂实例化 Bean3、实例工厂实例化 Bean静态工厂实例化Bean与实例工厂实例化Bean的区别实例化 Bean 是 Bean 生命周期的第一步。假设现在有一个下面这样的实体类public class Car { private String brand; private int price; public Car(){} public Car(String brand, int p原创 2020-06-29 17:01:56 · 407 阅读 · 0 评论 -
Spring之到底什么是IOC和DI?
什么是IOC容器?IOC全名:Inversion Of Control,翻译过来就是控制反转。什么是控制反转?这个是面向对象的一种设计原则,可以用来减低计算机代码之间的耦合度(模块及模块之间信息或参数依赖的程度)其中最常见的方式叫做依赖注入(依赖注入就是把本来应该在程序中有的依赖在外部注入到程序之中),还有一种方式叫“依赖查找”。通过控制反转,对象在被创建的时候,由一个调控系统内所有对...原创 2019-04-11 17:02:42 · 423 阅读 · 0 评论 -
Spring 之依赖注入(DI)区分同类多构造器
目录直通车1、 属性注入2、 构造方法注入1、 属性注入是最常用的注入方式.即通过 setter 方法注入Bean 的属性值或依赖的对象, 属性注入使用 <property> 元素, 使用 name 属性指定 Bean 的属性名称,value 属性或 <value> 子节点指定属性值<bean id="helloWorld" class="c...原创 2019-04-11 17:02:53 · 246 阅读 · 0 评论 -
Spring构造器的注入与配置bean的细节
目录直通车1、 本文实验环境2、 bean与bean之间相互访问3、配置集合属性 List4、 配置集合属性Map5、 获取配置信息6、 配置单例集合bean以供多个 bean 进行过引用本文主要从bean的配置由繁到简。学习需要花费时间,这是笔者花费非常多的时间做出来的,静下心来阅读你会有大收获!有问题欢迎留言!1、 本文实验环境文件目录首先新建一个...原创 2019-05-01 21:41:25 · 2254 阅读 · 0 评论 -
Spring之自动装配(Autowired)
在讲通过Autowired 来实现 Spring实现自动装配之前,先来说一下传统是如何配置的。一、 传统配置bean新建以下几个类:Addresspackage com.spring.beans.Autowired;public class Address { private String city; private String street; ...原创 2019-05-01 21:41:11 · 1101 阅读 · 0 评论 -
Spring之手动实现Autowired(自动装配)Bean
本文核心在于配置XML实现手动装配Bean。一、 文件目录如下我的文件是包与包之间互不影响的效果。Address下面的文件新建之后,记得 get和set还有toString。private String city;private String street;Carprivate String brand;private int price;Person...原创 2019-05-01 20:50:46 · 2073 阅读 · 0 评论 -
Spring之关键特性之一AOP(面向切面编程)基础
本篇文字虽多,但字句都是总结后的浓缩。学习需要沉淀,静下心来,细细品味。有道面试题:解释一下什么是AOP?AOP在Java里是利用反射机制实现。没学过Java基础里面的反射机制的朋友,建议补完脑在来。从这道面试题展开回答:1、 AOP即面向切面编程,是OOP(面向对象)编程的有效补充。这句话可以这么理解,举个例子,你想给你的网站加上鉴权,对某些url,你认为不需要鉴权就可以访问...原创 2019-06-05 08:20:25 · 335 阅读 · 0 评论 -
Spring之初学实现HelloWorld(IDEA)与 IOC容器
目录直通车前言一、Spring 实现Hello,World1、 新建项目2、 鼠标右击 src 目录,新建一个Spring的xml文件3、 新建以一个如下的包4、 在类中写入代码实现HelloWorld二、 IOC容器前言点都点进来了,还望看完了在走吧,说不定有什么收获呢!为什么我在这么短的时间从Servlet JSP来到了Spring?说不定你也是这样的...原创 2019-04-10 22:44:17 · 394 阅读 · 0 评论