spring原理

Spring的ioc操作 与 IOC底层原理

谁说胖子不能爱 提交于 2019-12-29 02:09:30
Spring的ioc操作 1 把对象的创建交给spring进行管理 2 ioc操作两部分: (1)ioc的配置文件方式 (2)ioc的注解方式 IOC底层原理 1 ioc底层原理使用技术 (1)xml配置文件 (2)dom4j解决xml (3)工厂设计模式 (4)反射 2 画图分析ioc实现原理 来源: https://www.cnblogs.com/yuwenweisan/p/11004388.html

spring原理大白话

六眼飞鱼酱① 提交于 2019-12-28 02:58:13
看了很多关于spring原理的文章,看很多也不是太明白。中国就喜欢整的复杂化。 我看完自己整理一下的。 spring原理:IOC+AOP;IOC是核心 IOC(Inversion of Control)翻译过来叫控制反转(你就说这控制反转是啥意思吧,炸一开始谁看能明白吧,中国这大翻译家翻译的)。 自己理解:就是把创建对象这个功能交给spring了,自己不用创建了,不用new了。 然后怎么实现控制反转的呢? 实现控制反转有两种办法:一依赖注入,二依赖查找。 spring是怎么实现控制反转的呢 然后咱们的spring用的事依赖注入。别的框架可能有用到依赖查找的。 问题又来了, 依赖注入 有很多种方法,注解注入、构造注入、属性注入 这时候问题又来了 啥是注解注入、构造注入、属性注入? 注解注入就是注解@Autowrid...,构造注入就是构造函数,属性注入就是setter方法。 最后IOC的原理,反射。 反射又是啥? 可以过得类的信息,比如包名啥的,反射这一块的去搜搜。 AOP翻译过来面向切面编程,是一种思想。就是横着一刀,比如拦截器,日志就是所有类都执行的东西。 AOP原理动态代理 这时候就得说说啥是代理了,代理分为静态代理和动态代理。这一块自己搜吧 动态代理分类两种:一jdk代理、二是CGlib字节码代理。 jdk代理用的是jdk,java.long包里的一个类,poxy啥的。

Spring的ApplicationEvent实现

假如想象 提交于 2019-12-28 00:47:46
原理:ApplicationContextAware接口提供了publishEvent方法,实现了Observe(观察者)设计模式的传播机制,实现了对bean的传播。通过ApplicationContextAware我们可以把系统中所有ApplicationEvent传播给系统中所有的ApplicationListener。 直接上代码: 1.定义自己的监听事件 2.定义自己的监听器(负责处理自己的监听事件) 3.定义一个bean触发监听事件 4.测试 package com.test.eventListener; import org.springframework.context.ApplicationEvent; /** * @author admin * @date 2018/5/17 17:37 * 新建StudentAddEvent类,实现抽象类org.springframework.context.ApplicationEvent * StudentAddEvent类中需要实现自己的构造函数 * 增加学生监听事件 */ public class StudentAddEvent extends ApplicationEvent { private static final long serialVersionUID = 20L; /** * 学生姓名 */

Spring Boot 运行原理 - 核心注解

China☆狼群 提交于 2019-12-27 14:02:19
https://www.jianshu.com/p/23f504713b94 核心注解 打开上面任意一个AutoConfiguration文件,一般都有下面的条件注解,在spring-boot-autoconfigure-1.5.3.RELEASE.jar的org.springframework.boot.autoconfigure.condition包下条件注解如下: @ConditionalOnBean:当前容器有指定Bean的条件下。 @ConditionalOnClass:当前类路径下有指定的类的条件下。 @ConditionalOnExpression:基于SpEL表达式作为判断条件。 @ConditionalOnJava:基于JVM版本作为判断条件。 @ConditionalOnJndi:在JNDI存在的条件下查找指定的位置。 @ConditionalOnMissingBean:当容器里没有指定Bean的情况下。 @ConditionalOnMissingClass:当类路径下没有指定的类的条件下。 @ConditionalOnNotWebApplication:当前项目不是WEB项目的条件下。 @ConditionalOnProperty:指定属性是否有指定的值。 @ConditionalOnResource:类路径是否有指定的值。

Nacos Config客户端与Spring Boot、Spring Cloud深度集成

拜拜、爱过 提交于 2019-12-26 01:22:07
目录 Nacos与Spring Boot集成 @NacosPropertySource和@NacosValue com.alibaba.nacos.spring.core.env.NacosPropertySourcePostProcessor com.alibaba.nacos.spring.context.annotation.config.NacosValueAnnotationBeanPostProcessor @NacosValue 从源码角度,解析Nacos Config客户端与Spring Boot、Spring Cloud的深度集成 原创博文,转载请注明来源 Nacos与Spring Boot集成 @NacosPropertySource和@NacosValue @PropertySource的用法并不陌生,它是spring原生的注解,我们可以这么用: @Configuration @PropertySource(value = "classpath:demo.properties",ignoreResourceNotFound = false) public class SpringPropertysourceApplication { //... } 意思是:把在classpath路径下,名为demo.properties的配置文件注入到spring容器中,这样

各大公司Java后端开发面试题

吃可爱长大的小学妹 提交于 2019-12-25 13:14:40
各大公司Java后端开发面试题 原创 2017年03月01日 11:31:11 标签: java / 面试题 / Spring / 春招 / BAT 40184 ThreadLocal(线程变量副本) Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量。 采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一个副本,每个线程都可以独立地改变自己的副本,而不会和其他线程的副本冲突。 ThreadLocal类中维护一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值为对应线程的变量副本。 ThreadLocal在Spring中发挥着巨大的作用,在管理Request作用域中的Bean、事务管理、任务调度、AOP等模块都出现了它的身影。 Spring中绝大部分Bean都可以声明成Singleton作用域,采用ThreadLocal进行封装,因此有状态的Bean就能够以singleton的方式在多线程中正常工作了。 友情链接: 深入研究java.lang.ThreadLocal类 Java内存模型: Java虚拟机规范中将Java运行时数据分为六种。 1.程序计数器:是一个数据结构,用于保存当前正常执行的程序的内存地址。Java虚拟机的多线程就是通过线程轮流切换并分配处理器时间来实现的,为了线程切换后能恢复到正确的位置

Spring之@DependsOn的实现原理

ε祈祈猫儿з 提交于 2019-12-25 02:04:03
为什么要控制Bean的加载顺序? 首先spring容器对一般的bean的初始化顺序是不确定的 (个别Spring自身初始化用的bean和配置类的bean会优先初始化) ,但是我们在某些场景下(具体场景如下面举例),我们又需要控制顺序。这时候,就用到了@DenpendsOn。 一、@DependsOn的使用 使用场景: 1、beanA 间接依赖 beanB并不是直接通过 构造方法或@Autowired等方式注入。如果beanA有一个属性,需要在初始化的时候对其进行赋值(需要在初始化的时候做,是因为这个属性其实是包装了其它的几个Bean的,比如说代理了BeanB,所以这就形成了BeanA间接的依赖BeanB。 2、beanA是事件发布者(或JMS发布者),beanB(或其他监听器)负责监听这些事件,典型的如观察者模式。我们不想监听器beanB错过任何事件,那么B需要首先被初始化。 代码示例: @ComponentScan ( "com" ) public class AppConfig { } @Component public class EventA { public EventA ( ) { System . out . println ( "EventA:初始化" ) ; } } @Component public class EventB { public EventB (

Java,该学什么?

被刻印的时光 ゝ 提交于 2019-12-24 04:29:44
本人大学学的是生物技术专业,毕业后入坑Java。 最近有人问我是如何转行的,需要学一些什么。我在网上看到一篇帖子,觉得写得很全。如果是我来写,可能还写不了这么全的。在此分享给网友。 2019秋招几个月累积的知识点,东西太多,懒得重整理做索引,尽量用(*)和 加粗 标注出高频知识点, 都是面试问过的或笔试考过的 Java基础知识(*) https://blog.csdn.net/qq_16633405/article/details/79211002 Spring Boot 启动 流程(*) https://juejin.im/post/5b679fbc5188251aad213110#heading-0 Spring 一些面试题(*) https://www.ctolib.com/topics-35589.html 匿名内部类编译class(*) https://blog.csdn.net/lazyer_dog/article/details/50669473 为什么集合类没有实现Cloneable和Serializable接口? https://www.nowcoder.com/questionTerminal/2a4902f67d5b49b6b4c05f9d7e422caf 自动装箱原理 https://www.jianshu.com/p/0ce2279c5691

【Spring】IOC

二次信任 提交于 2019-12-22 08:44:50
浅谈IOC IOC的理论背景 图1:传统系统中,对象之间相互引用的一幅图,在采用面向对象方法设计的软件系统中,它的底层的实现都是由n个对象所组成的,所有的对象通彼此之间的合作最终实现系统的业务逻辑,如果我们打开机械式手表的后盖,我们就会看到与图1类似的清形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。这些齿轮相互耦合在一起,共同完成某项任务。在这样的齿轮组中,如果有一个齿轮出现一个问题,可能会影响到整个齿轮组的正常运转,齿轮组齿轮间的耦合关系与软件系统中对象之间的耦合关系非常相似。随着系统规模变大,对象之间依赖关系越来越复杂,架构师和设计师对系统的设计和分析面临更大的挑战,对象之间的耦合度过高的系统,必然会出现牵一发而动全身的情形,降低系统之间、模块之间、对象之间的耦合度是软件工程追求的目标。IOC理论的提出,就是为了解决对象之间耦合度过高的问题,实现对象之间的解耦。 图2 解耦的过程 IOC理论提出的观点大致是这样的:借助于第三方来实现对具有依赖关系的对象之间的解耦,对象之间没有了耦合关系。由于引进了第三方IOC容器,使得对象A、B、C、D之间没有了耦合关系,齿轮之间的传动全部依靠了第三方,全部对象的控制权全部交给了第三方IOC容器,IOC容器成了整个系统的关键核心,它起到了一种凝合剂i的作用,把系统中的所有对象凝合在一起发挥作用。 图3 理想的系统

Spring原理学习系列之六:IOC原理之BeanDefinition注册

那年仲夏 提交于 2019-12-22 06:41:06
引言 在上一篇文章中,我们大致介绍了 Bean 创建、 Bean 加载的流程,但是由于文章篇幅所限,不能事无巨细的进行详细介绍。后续本系列的文章将对这部分的内容进行庖丁解牛,尽可能的将 IOC 中比较重要的细节说明清楚,以便于自己以及花时间阅读本文的读者可以加深对于 Spring IOC 的深入理解。 BeanDefinition BeanDefinitionRegistry 总结 一、 BeanDefinition 纳尼,你还要说 Spring IOC ,之前的文章你还没有说够嘛? 谁让 Spring 中关于 IOC 这部分的内容这么多呢,前面的文章还没有说的很细。所以只能继续慢慢往下唠叨了。废话不多说,我们来继续 IOC 。 BeanDefinition 是用来描述 Spring 中的 Bean ,是包装Bean的数据结构。其源码如下所示: public interface BeanDefinition extends AttributeAccessor , BeanMetadataElement { //标准单例作用域的作用域标识符:“singleton”,对于扩展的bean工厂可能支持更多的作用域 String SCOPE_SINGLETON = ConfigurableBeanFactory . SCOPE_SINGLETON ; //标准原型作用域的范围标识符: