ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

spring源码

2022-08-26 00:01:27  阅读:158  来源: 互联网

标签:xml 容器 配置文件 spring bean 源码 beanDefinition


spring  框架  生态
spring  包含两个点 
        IOC: 控制反转 原来创建对象的时候需要我们自己去new  但是用spring容器帮我们创建 
        我们需要的时候直接去spring容器中拿 (思想) DI: 依赖注入(手段)通过DI的方式 实现把属性进行赋值的操作 AOP:
IOC 容器: 里面存放对象  Bean

过程 --->为什么写一个配置文件  我就能获取到配置文件信息 怎么设置的

1 先创建一个xml文件
     <beans>
    通过set get 方法赋值
        <bean id=? class=? abstract init-method scope dependon .... >
     <property name=? value=?>
    <property name=? value=?>
    </bean>
  <bean id=? class=? abstract init-method scope dependon .... >
   通过构造方法赋值    
     <constructor-arg name=? value=?>
    <constructorname=? value=?>
    </bean>    
    </beans>    
2 ApplicationContext ac=new ClassPathXmlApplicationContext("application.xml");
XXX xx=ac.getBean(xx.class);
xx.method();

--------中间添加了很多功能来丰富spring框架-------------

1 加载xml

2 解析xml

3 封装BeanDefinition

4 实例化

5 放到容器中

6 从容器中获取

------

容器 存放对象 使用Map存放  我们会根据key 来查询value 

因为spring 获取bean 可以根据name 也可以根据 type  因此 map的设计有两种

1 String Obj

2 class Obj

3 String ObjFactory(三级缓存(当解决循环依赖问题 一定要是有spring的三级缓存))

4 String BeanDefinition(当我们从xml中读取的一行行代码 字符串 spring需要解析这些字符串 )

 

 

 

----------------

ioc如何处理的?

1 因为ioc 是容器   里面有一系列bean对象   而这些bean对象是从xml文件中解析出来

而我们springboot中是yml和properties文件  这些配置文件是被 beanDefinition解析处理

因为 在xml中有很多标签  父子标签  这些标签(<>)会被解析成document对象

 在配置文件 和 beanDefinition 对象之间 我们可以抽象一个接口  定义规范  方便以后的

扩展  例如:如果以后出现json格式 配置文件 通过这个接口 可以转换为beanDefinition对象

这个中间的接口 为BeanDefinitionReader

 

 

 

 ---------

spring中bean是否只单例的?

scope 默认值为singleton(单例)  prototype(每次需要创建  new)  request  session

在beanDefintion 到 实例化对象阶段 是反射  当你使用反射时 你可以获取这个类的所有属性 方法

所有构造器  所有注解 等一系列操作 

反射创建方法

Class.forName(完全限定名)

对象.getClass();

类名.class();

Constructor ctor=clazz.getConstructor();//获取构造器

Object obj=ctor.newInstance();

------------

在spring中有一个重要接口 BeanFactory  整个容器的根接口 也是容器的入口

 

 

 

 

 

 

 

 

 

 从BeanDefintion到对象实例化过程中 有spring的很多扩展工作

1 在容器创建过程中 需要动态改变bean的信息怎么办?

<property name=url value=${jdbc.url}>

如果想随时修改beanDefiinition怎么办?

BeanFactoryPostProcessor  修改beanDefinition信息(增强) ioc

BeanPostProcessor ?修改bean信息(增强)aop 

 

 

 :对于属性资源配置 能够处理占位符 在beanDefinition 属性值中

可以从properties 文件中或其他文件 进行替换

 

 当我们实现了BeanFactoryPostProcessor 我们就可以增强BeanDefiintion的信息

 

标签:xml,容器,配置文件,spring,bean,源码,beanDefinition
来源: https://www.cnblogs.com/Lcch/p/16626220.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有