Spring IoC 初探
Spring IoC 初探
参考链接
https://javabetter.cn/springboot/ioc.html#深入理解-ioc
IoC
Bean:由第三方包装的object
控制反转(Inversion of Control,IoC):把 创建和管理 Bean的过程转移给了第三方(Spring IoC Container)
IoC把对象之间的依赖关系转成用配置文件来管理,由Spring IoC Container来管理,实现了对象之间的解耦——降低复杂度,防止出现问题的对象影响其他正常对象?,便于管理,方便编程(省略手动创建和管理对象)?
依赖注入(dependency injection,DI):配置文件把资源从外部注入到内部,容器加载了外部的文件、对象、数据,然后把这些资源诸如给程序内的对象,维护了程序内外对象之间的依赖关系
IoC 是设计思想,DI 是具体的实现方式
IoC可以通过其他方式实现,Spring选择了DI
Spring八大模块

IoC实践
IoC容器 依赖于 4个jar包:$Beans, Core, Context, SpEL(SpringExpressLanguage)$
配置文件,service.xml

name:类的属性,ref:属性的具体值
IoC的使用

ApplicationContext是IoC容器的入口,也是Spring程序的入口
ApplicationContext是BeanFactory的子类
BeanFactory可以理解为HashMap,具有get put功能,“低级容器”
ApplicationContext继承多个接口,“高级容器”
ApplicationContext有两个具体的实现子类,用来读取配置文件:
ClassPathXmlApplicationContext:从class path加载配置文件(常用)
FileSystemXmlApplicationContext:从本地文件加载配置文件(不常用)
bean对象的创建是通过反射实现clazz.getDeclaredConstructor().newImstance()
容器中的所有对象在启动容器的时候,就已经被创建好了
个人理解 + ChatGPT:
@Atutowired / @Resource 来依赖注入某个字段时,需要该类在创建时使用了@Component / @Service / @Mapper 等注解,需要确保所要注入的依赖(即字段所代表的服务、组件等)已经在Spring容器中注册
使用@Autowired/@Resource注入的字段通常将访问级别设置为private,保持封装性
构造方法注入 / setter注入?
@Autyowired来自Spring框架的核心容器,@Resource来自Java的JSR-330规范
单例注入?