BeanFactor
它只是个接口
DefaultListableBeanFactory
它是核心,是 Spring 注册及加载Bean 的默认实现
ApplicationContext
这个容器工厂也是继承了EnvironmentCapable, 持有ListableBeanFactory的属性,
BeanFactor和ApplicationContext 的联系和区别?
一个懒加载,一个迫切加载
BeanDefinitionRegistry
负责注册BeanDefinition ,并定义了对 BeanDefinition 的各种增删改操作,BeanDefinition 是对Ben的封装
ClasspathXmlApplicationContext
ClasspathXmlApplicationContext也是IOC容器工厂中的一员,默认 从classpath中获取XML配置,使用 XmlBeanDefinitionReader 进行解析配置,这是一个简单的、一站式便利的ApplicationContext。
通俗化就是使用xml配置文件
AnnotationConfigApplicationContext
通过注解创建文件
这有个面试题
BeanFactory和ApplicationContext的联系和区别!!!
联系:ApplicationContext是持有一个BeanFactory
区别:
BeanFactory中bean都是使用的时候才创建的!
ApplicationContext对于单例(非lazy),创建容器的时候就初始化了!
ApplicationContext不是全部都是迫切加载哦
spring注入bean有两种方式一个通过xml,一个通过注解文件,先看xml版本
xml版本:通过《bean》或者《。。》反正啥扫描,扫描包下的类,然后交给spring容器
注解文件就有多种方式注入bean
@ComponentScan
@Import中就有三种,一个个bean放进去,多选器,注册器
还有一种条件注入bean
我们先搞一个简单案例
先给大家看下目录结构
applicationContext
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
"
>
<bean id="MyDemo" class="java.util.Date"></bean>
</beans>
这个代码就不放进来了哈
demo成功
后面是java config版本
Java Config是Spring框架中一种基于Java代码的配置方式,可以用来代替XML配置。相比XML配置,Java Config更加直观、易于维护和扩展。在使用Java Config时,我们需要创建一个带有@Configuration注解的类作为配置类,在其中使用@Bean注解对应用程序的组件进行配置和管理。
个人感官就是用注解,配置spring
这样就把bean交给spring了
但并不是打了注解就完事,还要在AnnotationConfigApplicationContext中导入class类
对了还有第三种,通过包扫描,把bean扫描进spring进去管理,也有基于注解的
这个注解很关键,因为后续springboot启动用到了他,懂了这个注解就知道部分springboot启动了
你可以指定包路径,也可以不指定包路径,你不指定包路径的话,他会默认扫描本层和子目录下带有controller,service,等,然后把bean注入到spring容器中管理
第三中管理bean方法
@import
如何导入多个bean,可以用逗号隔开,也可以通过 ImportSelector。
还有一个使用注册器的方法,注入bean