Spring-Bean生命周期
文章平均质量分 88
OkidoGreen
这个作者很懒,什么都没留下…
展开
-
Spring本地启动Main函数-AnnotationConfigApplicationContext
spring转载 2022-04-05 17:32:53 · 1144 阅读 · 0 评论 -
SpringBoot+Nacos:@RefreshScope自动刷新原理
@RefreshScope的作用经过@RefreshScope注解修饰的bean,将被RefreshScope进行代理,用来实现配置、实例热加载,即当配置变更时可以在不重启应用的前提下刷新bean中相关的属性值。@RefreshScope注解@RefreshScope的实现如下,非常简单,最主要是@Scope("refresh")和ScopedProxyMode.TARGET_CLASS,表示@RefreshScope 是scopeName="refresh"的 @Scope,且代理模式为TAR转载 2022-03-28 20:16:48 · 8782 阅读 · 1 评论 -
从RefreshScope实现原理看刷新配置失效问题
前言在SpringIOC中,我们熟知的BeanScope有单例(singleton)、原型(prototype), Bean的Scope影响了Bean的创建方式,例如创建Scope=singleton的Bean时,IOC会保存实例在一个Map中,保证这个Bean在一个IOC上下文有且仅有一个实例。SpringCloud新增了一个refresh范围的scope,同样用了一种独特的方式改变了Bean的创建方式,使得其可以通过外部化配置(.properties)的刷新,在应用不需要重启的情况下热加载新的外部化转载 2022-03-22 14:54:11 · 4608 阅读 · 1 评论 -
请别再问Spring Bean的生命周期了!
Spring Bean的生命周期是Spring面试热点问题。这个问题即考察对Spring的微观了解,又考察对Spring的宏观认识,想要答好并不容易!本文希望能够从源码角度入手,帮助面试者彻底搞定Spring Bean的生命周期。只有四个!是的,Spring Bean的生命周期只有这四个阶段。把这四个阶段和每个阶段对应的扩展点糅合在一起虽然没有问题,但是这样非常凌乱,难以记忆。要彻底搞清楚Spring的生命周期,首先要把这四个阶段牢牢记住。实例化和属性赋值对应构造方法和setter方法的注入,初始化转载 2021-03-22 10:42:31 · 353 阅读 · 0 评论 -
使用ImportBeanDefinitionRegistrar动态创建自定义Bean到Spring中【Mybatis-注册Mapper相关】
注:spring自身的扫描中添加了includeFilter,仅将包含@Component注解的Class注册成Bean,但在Mybatis的mapper扫描中,mybatis使用的ClassPathMapperScanner未设置默认状态,所以无需Class上有 @Component等注解即可注册成Bean这也是为什么 mapper 有时候不需要加@Repository注解也可以注册成Bean的原因参考:https://zhuanlan.zhihu.com/p/91461558简介Im转载 2021-02-25 18:00:49 · 911 阅读 · 1 评论 -
从Spring Bean创建流程中看三级缓存解决循环依赖
一、Spring Bean创建流程及缓存总述Spring Bean的创建流程,大致调用栈绘图如下。首先,doGetBean()查询缓存,一二三级缓存全部查询,如果三级缓存存在则将Bean早期引用存放在二级缓存中并移除三级缓存。(升级为二级缓存)。其次,doCreateBean()方法中Bean在实例化完成之后会直接将未装配的Bean工厂存放在三级缓存中,并且移除二级缓存。最后,registerSingleton()方法中将成熟的Bean添加到一级缓存,移除二三级缓存。对Bean的创.转载 2020-09-28 19:53:22 · 903 阅读 · 0 评论 -
循环依赖【讲的很好】
一、前言这一篇博文主要讲一下我们spring是怎么解决循环依赖的问题的。二、什么是循环依赖首先我们需要明确,什么是循环依赖呢?这里举一个简单的例子:@Servicepublic class A { @Autowired private B b;}@Servicepublic class B { @Autowired private A a;}以这个例子来看,我们声明了a、b两个bean,且a中需要注入一个b,b中需要注入一个a。结合我们上篇转载 2020-09-15 20:24:10 · 1901 阅读 · 0 评论 -
Spring中bean的作用域及Spring容器初始化的相关问题
Spring中bean的作用域: 在Spring容器中,bean的作用域范围默认是单例模式的,singleton,单例模式可以由多个线程并发访问,如果我们想改变bean的作用域范围,将其改变为多例模式,即每次从容器中获取相同的bean时,都是新的bean,而不是获得两次相同的bean,其内存地址相同,为true。那么在配置文件中设置bean的作用域范围,Sprin转载 2012-11-24 21:25:38 · 3371 阅读 · 1 评论 -
Spring-通过源码看Bean的创建过程
1. finishBeanFactoryInitialization()1.1 preInstantiateSingletons()方法1.2 getBean()1.3 doGetBean()1.4 createBean()1.5 doCreateBean()2. Bean生命周期Spring的核心模块是IOC和AOP,而IOC中创建Bean又是十分重要的一环。在Spring的启动过程中,会...转载 2020-03-01 11:23:03 · 1563 阅读 · 0 评论 -
Spring源码系列之容器启动流程
1. Demo创建2. 启动3. 入口4. 基础概念5. AnnotationConfigApplicationContext的构造方法5.1 this()调用5.2 register(annotatedClasses)5.3 执行refresh()方法6. refresh()方法6.1 invokeBeanFactoryPostProcessors()6.2 registerBeanPostPr...转载 2020-02-28 19:39:09 · 1025 阅读 · 0 评论 -
相亲相爱的@Import和@EnableXXX
1. @Import注解通过Import注解,我们有三种方式可以向Spring容器中注册Bean。相当于Spring中XML的标签。1.1 直接注册例如:@Import(RegularBean.class)。(RegularBean是开发人员自定义的一个类)。代码如下,在代码中通过在AppConfig类上加了一行注解:@Import(RegularBean.class),这样...转载 2020-02-27 08:16:20 · 1026 阅读 · 0 评论 -
ConfigurationClassPostProcessor —— Spring中最!最!最!重要的后置处理器!没有之一!!!
0. 疑惑在阅读本文之前,可以先思考一下以下几个问题。(1) @Configuration注解的作用是什么,Spring是如何解析加了@Configuration注解的类? (2) Spring在什么时候对@ComponentScan、@ComponentScans注解进行了解析? (3) Spring什么时候解析了@Import注解,如何解析的? (4) Spring什么...原创 2020-02-27 08:10:44 · 1460 阅读 · 2 评论 -
Spring源码初探-IOC(1)-Bean的初始化
https://www.jianshu.com/p/375ef7095139前言对于一名Java码农来说,Spring真是太重要了。目前Spring的体系已经发展得非常壮大,其底层基石core,beans,context非常牢固。spring 体系结构图Bean初始化个人认为,Spring最原始或者最基础的功能是“容器”,帮你管理着一堆bean的生命周期,任你取用,要想更好...转载 2019-06-12 17:50:35 · 660 阅读 · 0 评论 -
Spring源码初探-IOC(3)-Bean的初始化-bean的加载
https://www.jianshu.com/p/ecc60703d315前言前面两篇文章主要介绍的是xml到BeanDefinition的过程,我们知道在使用Spring的过程中通常直接使用getBean(beanName)的方式,getBean返回的是实例化并且已经完成初始化后的对象。对于我们平时使用来说,创建一个对象通常会使用new,或者使用反射。我们使用反射instantiati...转载 2019-06-12 18:19:43 · 643 阅读 · 0 评论 -
Spring之基于Java类的配置bean的加载注册流程
描述Spring Bean定义的三种方式:基于XML的配置 基于注解的配置,在类中加入如下注解通过包扫描加载注册bean: @Component:当对组件的层次难以定位的时候使用这个注解 @Controller:表示控制层的组件 @Service:表示业务逻辑层的组件 @Repository:表示数据访问层的组件基于Java类的配置:使用...转载 2020-02-26 15:00:47 · 1148 阅读 · 0 评论 -
Spring源码解析:注册bean到spring容器(BeanDefinitionRegistryPostProcessor接口)
关于注册bean到容器我们开发的类,如果想注册到spring容器,让spring来完成实例化,常用方式如下:1. xml中通过bean节点来配置;2. 使用@Service、@Controller、@Component等注解;其实,除了以上方式,spring还支持我们通过代码来将指定的类注册到spring容器中,也就是今天我们要实践的主要内容,接下来就从spring源码...转载 2020-02-27 19:59:13 · 1147 阅读 · 0 评论 -
SpringBean生命周期详解
https://blog.csdn.net/lisongjia123/article/details/52091013在Spring中Bean可谓是一个核心的元素,当我们结合Spring进行编程的时候也离不开Bean,面对这样重要的一个角色,了解其生命周期和该生命周期所涉及的环节对我们更加熟练灵活地使用Bean是很有Bean必要的,下面我们就来详细分析下Bean的生命周期吧。生命周期流程图 ...转载 2018-05-17 18:49:20 · 5602 阅读 · 0 评论 -
Spring Bean注入的另一种方式-AutowireMode的一些理解
也可以参考:https://blog.csdn.net/qq_27409289/article/details/100753656Mybatis源码中的应用可以参考这篇文章:https://blog.csdn.net/z69183787/article/details/104544276灵魂拷问:不使用@Autowired、 @Resource、@Inject 注解,可以正常注入B...转载 2020-02-27 21:26:51 · 2874 阅读 · 3 评论 -
关于Mybatis扫描所有mapper包并生成dao实例不需要显示注入SqlSessionFactory的原因探查
大家都知道,一般spring配合mybatis会引入 mybatis-spring-1.2.2 这个jar包,会用到以下的类,在配置文件中<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.xxxx....原创 2020-02-27 21:16:28 · 2295 阅读 · 0 评论 -
SpringIoC:后置处理器BeanDefinitionRegistryPostProcessor+BeanFactoryPostProcessor 详解
概述本方法会实例化和调用所有 BeanFactoryPostProcessor(包括其子类 BeanDefinitionRegistryPostProcessor)。BeanFactoryPostProcessor 接口是 Spring 初始化BeanFactory 时对外暴露的扩展点,Spring IoC 容器允许 BeanFactoryPostProcessor 在容器实例化任何b...转载 2020-02-27 20:17:13 · 959 阅读 · 1 评论 -
Spring容器中的Bean几种初始化方法和销毁方法的先后顺序
Spring 容器中的 Bean 是有生命周期的,Spring 允许 Bean 在初始化完成后以及销毁前执行特定的操作。下面是常用的三种指定特定操作的方法:通过实现InitializingBean/DisposableBean 接口来定制初始化之后/销毁之前的操作方法;通过 元素的 init-method/destroy-method属性指定初始化之后 /销毁之前调用的操作方法;在指定方法转载 2014-11-27 11:19:38 · 2419 阅读 · 0 评论 -
BeanFactoryPostProcessor和BeanPostProcessor的区别
BeanFactoryPostProcessor和BeanPostProcessor都是Spring初始化bean的扩展点。两个接口非常相似。BeanFactoryPostProcessor可以对bean的定义(配置元数据)进行处理。也就是说,Spring IoC容器允许BeanFactoryPostProcessor在容器实际实例化任何其它的bean之前读取配置元数据,并有可能修改它转载 2015-05-22 13:04:15 · 1538 阅读 · 0 评论 -
在web.xml中注册IntrospectorCleanupListener监听器以解决struts等框架可能产生的内存泄露问题
增加方式如下:[html]view plaincopylistener>listener-class>org.springframework.web.util.IntrospectorCleanupListenerlistener-class>l转载 2015-09-21 21:27:14 · 1137 阅读 · 0 评论 -
Spring Bean的解析 BeanDefinition 与 RuntimeBeanReference
1.BeanDefinitionHolder持有name和aliases,为注册做准备/** * Holder for a BeanDefinition with name and aliases. * Can be registered as a placeholder for an inner bean. */public class BeanDefinitionHolder...转载 2020-02-27 19:27:41 · 1195 阅读 · 0 评论 -
Spring框架下类的初始化顺序
序言 之前的已经分析过在不使用框架的情况下,类中各个部分的初始化或执行顺序,后来我在开发中使用了Spring,发现初始化顺序与之前的稍有不同,特别是其初始化以xml配置文档作为驱动,xml中先定义生么类就试图优先实例化这个类,搞得我有点纠结。现在来细细测试研究一下。 这次采用的测试代码与之前的类似:有三个主线类B、C和D,其中D继承C,C继承B,这三个类中均包含static块、转载 2014-05-09 09:29:35 · 13463 阅读 · 1 评论 -
Spring中Order接口的作用
Spring中Ordered接口简介 目录前言 Spring中提供了一个Ordered接口。Ordered接口,顾名思义,就是用来排序的。 Spring是一个大量使用策略设计模式的框架,这意味着有很多相同接口的实现类,Spring中Ordered接口简介目录 前言Spring中提供了一个Ordered接口。Ordered接转载 2016-05-04 05:58:14 · 6983 阅读 · 3 评论 -
BeanNameAware接口和BeanFactoryAware接口
迄今为止,所接触到的Bean都是“无知觉”的,就像黑客帝国中机械工厂里面“养殖”的人类,他们虽然能完成一定的功能,但是根本不知道自己在工厂(BeanFactory)中的代号(id),或者自己是在哪个工厂(BeanFactory的引用)中沉睡。所以,本节的目的就是要创造出一个尼奥一样的Bean,让他知道自己在工厂中的id和自己原来躺在哪个工厂中。这里,称之为,Bean对Spring有知觉。但转载 2016-06-13 14:38:34 · 1852 阅读 · 1 评论 -
也谈Spring Bean的生命周期
开篇先用一张老图描述下Spring中Bean容器的生命周期。 插叙一下,记得某个博文中提到:“Spring的Bean容器只管理非单例Bean的生命周期,单例Bean的生命周期不在管理范围内”,其实我认为这句话恰好说反了。首先明确一点,并非Spring容器中所有的Bean都有生命周期行为,只有接受容器管理生命周期的Bean才具有生命周期行为:而单例(Singleton)Bean接受容器管转载 2016-06-13 14:30:06 · 1242 阅读 · 0 评论 -
Spring InitializingBean和init-method
InitializingBean Spirng的InitializingBean为bean提供了定义初始化方法的方式。InitializingBean是一个接口,它仅仅包含一个方法:afterPropertiesSet()。 在spring 初始化后,执行完所有属性设置方法(即setXxx)将自动调用 afterPropertiesSet(), 在配置文件中无须特别的配置,转载 2016-03-13 16:28:29 · 3102 阅读 · 0 评论 -
Spring生命周期-BeanFactoryPostProcessor和BeanPostProcessor
BeanFactoryPostProcessor和BeanPostProcessor,这两个接口,都是Spring初始化bean时对外暴露的扩展点。两个接口名称看起来很相似,但作用及使用场景却不同,分析如下:1、BeanFactoryPostProcessor接口该接口的定义如下:[java] view plain copy转载 2016-05-04 05:46:21 · 2071 阅读 · 0 评论 -
Spring Bean的生命周期(非常详细)
http://www.cnblogs.com/zrtqsk/p/3735273.htmlSpring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解Spring Bean的生命周期是非常必要的。我们通常使用ApplicationContext作为Spring容器。这里,我们讲的也是 ApplicationContext中Bean的生命周期。而实际上转载 2017-11-01 14:45:55 · 928 阅读 · 0 评论 -
使用BeanPostProcessor接口对受管Bean进行预处理
http://winneryj.iteye.com/blog/307736有时候,我们希望在Spring IoC容器初始化受管Bean之前、属性设置之后对该Bean先做一些预处理,或者在容器销毁受管Bean之前自己释放资源。那么该如何实现呢?Spring IoC为我们提供了多种方法来实现受管Bean的预处理和后处理。在Spring中定义了BeanPostProcesso转载 2017-11-01 14:52:37 · 1232 阅读 · 1 评论 -
简单比较init-method,afterPropertiesSet和BeanPostProcessor
一、简单介绍1、init-method方法,初始化bean的时候执行,可以针对某个具体的bean进行配置。init-method需要在applicationContext.xml配置文档中bean的定义里头写明。例如:这样,当TestBean在初始化的时候会执行TestBean中定义的init方法。2、afterPropertiesSet方法,初始化bean的时候执行,可以针对某个具体的bean转载 2017-11-01 16:07:06 · 5298 阅读 · 0 评论 -
Spring中Bean的生成过程
Spring是个Bean大工厂,负责Bean的创建和注入。核心接口BeanFactory是Spring最核心接口,它是Bean的容器,所有Bean的创建和注入几乎都与它有关。很多后缀是“Context”的类都继承或扩展了它,比如ClassPathXmlApplicationContext。最核心的方法是getBean,当然getBean有很多种重载形式,这里不一一列出。publ转载 2017-11-01 16:36:09 · 2579 阅读 · 0 评论 -
Spring:一些常用的Spring Bean扩展接口
http://blog.csdn.net/liupeng_family/article/details/53587452一、前言 1、Spring框架运用了非常多的设计模式,从整体上看,它的设计严格遵循了OCP---开闭原则,即 【1】保证对修改关闭,即外部无法修改Spring整个运作的流程 【2】提供对扩展转载 2017-11-01 16:33:35 · 1185 阅读 · 0 评论 -
Spring中的后置处理器BeanPostProcessor讲解
http://www.cnblogs.com/sishang/p/6576665.htmlBeanPostProcessor接口作用: 如果我们想在Spring容器中完成bean实例化、配置以及其他初始化方法前后要添加一些自己逻辑处理。我们需要定义一个或多个BeanPostProcessor接口实现类,然后注册到Spring IoC容器中。转载 2017-11-02 16:29:46 · 1574 阅读 · 0 评论 -
疑问:Spring中构造器、init-method、@PostConstruct、afterPropertiesSet孰先孰后,自动注入发生时间
https://www.cnblogs.com/grey-wolf/p/6627925.html 问题:今天想写一个通用点的方法,根据传入的参数的类型(clazz对象),判断使用哪个mapper来插入mysql数据库。下面是我的写法:public interface BizNeeqCommonService<T> { void save(List<T&g...转载 2018-10-23 15:53:28 · 1703 阅读 · 0 评论 -
源码解析:init-method、@PostConstruct、afterPropertiesSet孰先孰后
Spring允许在Bean在初始化完成后以及Bean销毁前执行特定的操作,常用的设定方式有以下三种:通过实现InitializingBean/DisposableBean接口来定制初始化之后/销毁之前的操作方法; 通过<bean>元素的init-method/destroy-method属性指定初始化之后/销毁之前调用的操作方法; 在指定方法上加上@Pos...转载 2019-06-13 16:27:05 · 1426 阅读 · 0 评论 -
Spring容器中的Bean几种初始化方法和销毁方法的先后顺序
Spring 容器中的 Bean 是有生命周期的,spring 允许 Bean 在初始化完成后以及销毁前执行特定的操作。下面是常用的三种指定特定操作的方法:通过实现InitializingBean/DisposableBean 接口来定制初始化之后/销毁之前的操作方法;通过 元素的 init-method/destroy-method属性指定初始化之后 /销毁之前调用的操作方法;在指定转载 2017-04-07 15:51:09 · 1539 阅读 · 0 评论