Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring IOC Notes-Obj Creation Process

Spring IOC Notes-Obj Creation Process

作者头像
itliusir
发布于 2018-10-08 03:00:46
发布于 2018-10-08 03:00:46
76400
代码可运行
举报
文章被收录于专栏:刘君君刘君君
运行总次数:0
代码可运行

摘要: Spring IOC 学习笔记-对象创建过程

正文:

对象创建过程

Resource (xml annotation class properties/yml) -> BeanDefinition -> BeanWrapper -> Object

Resource –> BeanDefinition

For Xml
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<bean id="user" class="com.itliusir.spring.entity.User" >
    <property name="id" value="1" />
    <property name="name" value="杰克" />
    <property name="classes" ref="aClass" />
</bean>

<bean id="aClass" class="com.itliusir.spring.entity.Class">
    <property name="id" value="1" />
    <property name="className" value="终极一班" />
</bean>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Test
public void testBean() {
    ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext
        ("classpath:bean.xml");
    User user = applicationContext.getBean(User.class);
    log.info(user.getName());
    log.info(user.getClasses().getClassName());
    Assert.assertEquals("杰克", user.getName());
    Assert.assertEquals("终极一班", user.getClasses().getClassName());
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. org.springframework.context.support.ClassPathXmlApplicationContext#
ClassPathXmlApplicationContext(java.lang.String)
2. org.springframework.context.support.AbstractApplicationContext#
refresh
3. org.springframework.context.support.AbstractApplicationContext#
obtainFreshBeanFactory
4. org.springframework.context.support.AbstractRefreshableApplicationContext#
refreshBeanFactory
5. org.springframework.context.support.AbstractXmlApplicationContext#
loadBeanDefinitions(org.springframework.beans.factory.support.DefaultListableBeanFactory)
6. org.springframework.context.support.AbstractXmlApplicationContext#
loadBeanDefinitions(org.springframework.beans.factory.xml.XmlBeanDefinitionReader)
7. org.springframework.beans.factory.support.AbstractBeanDefinitionReader#
loadBeanDefinitions(org.springframework.core.io.Resource...)
8. org.springframework.beans.factory.xml.XmlBeanDefinitionReader#
loadBeanDefinitions(org.springframework.core.io.Resource)
9. org.springframework.beans.factory.xml.XmlBeanDefinitionReader#
loadBeanDefinitions(org.springframework.core.io.support.EncodedResource)
10. org.springframework.beans.factory.xml.XmlBeanDefinitionReader#
doLoadBeanDefinitions
11. org.springframework.beans.factory.xml.XmlBeanDefinitionReader#
registerBeanDefinitions
12. org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader#
registerBeanDefinitions
13. org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader#
doRegisterBeanDefinitions
14. org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader#
parseBeanDefinitions
15. org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader#
parseDefaultElement
16. org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader#
processBeanDefinition
17. org.springframework.beans.factory.support.BeanDefinitionReaderUtils#
registerBeanDefinition
18. org.springframework.beans.factory.support.DefaultListableBeanFactory#
registerBeanDefinition
For Annotation
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Data
@Component
public class SimpleBean {
    private String id = "sss";
    private String name = "simpleBeans";
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Test
public void testBean() {
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext("com.itliusir.spring.beans.annotation");
    SimpleBean simpleBean = applicationContext.getBean(SimpleBean.class);
    log.info(simpleBean.getId());
    log.info(simpleBean.getName());
    Assert.assertEquals("sss", simpleBean.getId());
    Assert.assertEquals("simpleBeans", simpleBean.getName());
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. org.springframework.context.annotation.AnnotationConfigApplicationContext#
AnnotationConfigApplicationContext(java.lang.String...)
2. org.springframework.context.annotation.AnnotationConfigApplicationContext#
scan
3. org.springframework.context.annotation.ClassPathBeanDefinitionScanner#
scan
4. org.springframework.context.annotation.ClassPathBeanDefinitionScanner#
doScan
5. org.springframework.context.annotation.ClassPathBeanDefinitionScanner#
registerBeanDefinition
6. org.springframework.beans.factory.support.BeanDefinitionReaderUtils#
registerBeanDefinition

BeanDefinition –> Object

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. org.springframework.beans.factory.BeanFactory#
getBean(java.lang.String)
2. org.springframework.beans.factory.support.AbstractBeanFactory#
doGetBean
3. org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#
createBean(java.lang.String, org.springframework.beans.factory.support.RootBeanDefinition, java.lang.Object[])
4. org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#
createBean(java.lang.String, org.springframework.beans.factory.support.RootBeanDefinition, java.lang.Object[])
5. org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#
doCreateBean
CreateBeanInstance
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#
createBeanInstance
2. org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#
instantiateBean
PopulateBean
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#
populateBean
InitializeBean
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#
initializeBean(java.lang.String, java.lang.Object, org.springframework.beans.factory.support.RootBeanDefinition)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
彻底弄懂Spring中Bean的解析、创建和使用
Spring加载Bean、实例化Bean、获取Bean流程 本文旨在通过分析源码的方式,来剖析Spring加载Bean、实例化Bean、获取Bean的流程,部分核心内容会在源码中说明。内容比较枯燥,慎入! 第一步,启动一个Spring项目 Spring启动入口 从官方文档中我们可以获取到下面这种Spring的启动方式。 我们传入一个test.xml文件 ApplicationContext context = new ClassPathXmlApplicationContext("classp
石奈子
2020/06/28
3.6K0
Spring IOC 容器源码分析——一篇文章读懂Spring5.x
该图是 Spring5 的包结构, 可以从中清楚看出 Spring 各个模块之间的依赖关系。
须臾之余
2019/07/05
1.1K0
Spring IOC 容器源码分析——一篇文章读懂Spring5.x
Spring-IoC容器工作原理
容器底层用DefaultListableBeanFactory,即实现了BeanDe finitionRegistry,又实现了BeanFactory java配置 :
茶半香初
2021/11/26
2980
Spring-IoC容器工作原理
Spring bean解析 - refresh
AbstractEnvironment.validateRequiredProperties:
MickyInvQ
2021/10/09
1.5K0
Spring bean解析 - refresh
Spring 源码分析(二)之 Spring IOC 容器源码分析
spring.xml文件中保存了我们对Bean的描述配置,BeanFactory会读取这些配置然后生成对应的Bean。
zoro
2019/04/11
5431
Spring 源码分析(二)之 Spring IOC 容器源码分析
Spring源码分析:Spring IOC容器初始化
 概述: Spring 对于Java 开发来说,以及算得上非常基础并且核心的框架了,在有一定开发经验后,阅读源码能更好的提高我们的编码能力并且让我们对其更加理解。俗话说知己知彼,百战不殆。当你对Spring 掌握熟透之后,也就没什么能过阻拦你在开发路上前进了。 IOC 总体来说有两处地方最重要,一个是创建Bean容器,一个是初始化。在本文中,主要为大家讲解了 IOC Bean 容器创建过程。后续将会补上初始化部分的知识。 为了保持文章的严谨性,如果读者发现我哪里说错了请一定不吝指出,非常希望可以听到读者的声
九灵
2018/04/16
9440
Spring源码分析:Spring IOC容器初始化
Spring学习(三)后置处理器BeanPostProcessor
(1)申明一个TestService类,并加上@Component注解,由Spring在启动时加载TestService的bean。
虞大大
2020/08/26
4230
Spring学习(三)后置处理器BeanPostProcessor
一个离奇的ArrayIndexOutOfBoundsException异常的排查过程
今天同事遇到了一个离奇的ArrayIndexOutOfBoundsException,找我协助定位,定位的过程很有意思,故而记录一下。
用户1516716
2018/12/24
10.1K1
java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice
今天在使用动态代理时,遇到了如下问题,报错 java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice   下面是完整的报错信息: 一月 31, 2015 2:08:18 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh 信息: Refreshing org.springframework.context.support.Class
用户1154259
2018/01/17
1.1K0
Spring源码剖析3:Spring IOC容器的加载过程
1.目标:熟练使用spring,并分析其源码,了解其中的思想。这篇主要介绍spring ioc 容器的加载
Java技术江湖
2019/11/26
9240
Spring学习总结(一)——Spring实现IoC的多种方式
Spring是一个开源免费的框架,为了解决企业应用开发的复杂性而创建。Spring框架是一个轻量级的解决方案,可以一站式地构建企业级应用。Spring是模块化的,所以可以只使用其中需要的部分。可以在任何web框架上使用控制反转(IoC),也可以只使用Hibernate集成代码或JDBC抽象层。它支持声明式事务管理、通过RMI或web服务实现远程访问,并可以使用多种方式持久化数据。它提供了功能全面的MVC框架,可以透明地集成AOP到软件中。
张果
2022/05/09
2.2K0
Spring学习总结(一)——Spring实现IoC的多种方式
简话bean加载
首先看示例代码: <!--no-lazy-init scope=singleton--> <bean class="com.lios.service.test.LiosTestA" id="liosTestA"/> <bean class="com.lios.service.test.LiosTestB" id="liosTestB"/> <bean class="com.lios.service.test.LiosServiceServiceImpl" id="liosServiceService"/
LiosWong
2018/10/29
3990
Spring 注解和 XML 配置文件重复定义 Bean,会怎样?
今天一个偶然的机会,发现某个同事在使用 Spring 的时候,有一个 Bean 在类上既加上了 @Service 注解,又在 Spring 的 XML 配置文件中也加了 的定义。 那么,如果两处都进行了配置,如果两处配置不一致会怎样? 我们今天简单分析下。
明明如月学长
2023/03/31
1.3K0
Spring 注解和 XML 配置文件重复定义 Bean,会怎样?
面试Spring IOC
所谓的IoC容器就是指的Spring中Bean工厂里面的Map存储结构(存储了Bean的实例)
小土豆Yuki
2020/06/15
4380
使用Spring IoC容器:选BeanFactory还是ApplicationContext?
通过上一篇ApplicationContext特性分析,可以得出结论BeanFactory 是 Bean容器,它不提供企业特性,比如AOP、事务以及事件等,这些都被ApplicationContext支持
码农架构
2020/10/26
5210
使用Spring IoC容器:选BeanFactory还是ApplicationContext?
终于,月薪过5万了!
本文主要详解bean的生命周期,分为13个环节,每个环节中spring都提供了一些扩展点,我们都将进行详细说明,让大家全面掌握这块的知识。
路人甲Java
2020/04/08
7830
终于,月薪过5万了!
URI was not reported to parser for entity
 org.xml.sax.SAXParseException: URI was not reported to parser for entity [document] at gnu.xml.aelfred2.SAXDriver.warn(SAXDriver.java:934) at gnu.xml.aelfred2.SAXDriver.startExternalEntity(SAXDriver.java:631) at gnu.xml.aelfred2.XmlParser.p
闵开慧
2018/03/30
7800
【原创】2w 字搞懂 Spring Bean 的一生
当我们不用Spring进行开发时,我们需要在代码中设置对象的依赖关系。当我们用了Spring之后,由Spring来管理这种依赖关系,当我们想使用对象时,直接从Spring容器中获取即可
Java识堂
2021/06/01
7800
【原创】2w 字搞懂 Spring Bean 的一生
Spring IOC 容器源码分析
Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文并不能让你成为 Spring 专家,不过一定有助于大家理解 Spring 的很多概念,帮助大家排查应用中和 Spring 相关的一些问题。
yaphetsfang
2022/05/10
2710
Spring IOC 容器源码分析
spring源码之aop proxy
先进入org.springframework.aop.config.AopNamespaceHandler:
山行AI
2019/08/05
6890
相关推荐
彻底弄懂Spring中Bean的解析、创建和使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验