什么是IOC
IOC Inversion of Control 控制反转
DI Dependency Injection 依赖注入
DI是IOC的实现
控制反转的意思是我们不再显示的创建对象,而是通过spring来创建对象
让Spring来控制对象的创建,让别人帮你干,自己懒得干
消除new对象,解耦合,解决硬编码问题,从此走上不归路。。。

IOC容器
摘自Spring官网
The
org.springframework.beansandorg.springframework.contextpackages are the basis for Spring Framework’s IoC container. TheBeanFactoryinterface provides an advanced configuration mechanism capable of managing any type of object.ApplicationContextis a sub-interface ofBeanFactory.
Spring中提供了两种IOC容器:
- BeanFactory (
spring-beans) - ApplicationContext (
spring-context)
ApplicationContext在BeanFactory的基础上构建,是相对比较高级的容器实现,功能更强大
简述 IOC启动过程
加载xml配置文件或扫描JavaConfig,把bean以BeanDefinition的形式统一放在一个map里缓存起来
需要使用该bean,向map取来Class实例化并注入
依赖注入方式
简单来说:
- 接口注入
- 构造函数注入
- setter 注入
从另一个角度:
- javaEE
JNDI(Java Naming And Directory Interface)
- 依赖注入(Dependency Injection)
- 依赖查找(Dependency lookup)
- 在Spring中 @Autowired
- 在java中 @Resource
- 在java EE中 @Inject
有点乱,嘿嘿,记住@Autowired就行,最常用的,他就是依赖注入的具体使用
比如在controller @Autowired service,service @Autowired dao
Spring Bean
Bean由Spring IOC容器实例化
配置方式:
- xml
<bean></bean>
- 注解配置
(1)Spring: xml需配置
<beans> <context:annotation-config/> </beans>
(2)Spring Boot : JavaConfig 主流
@Bean + @Configuration
那么xml的配置我们需要学习嘛,我觉得还是需要的
Bean Scop
- Singleton – 每个 Spring IoC 容器仅有一个单 Bean 实例 (默认)
- Prototype – 每次请求都会产生一个新的实例。
- Request – 每一次 HTTP 请求都会产生一个新的 Bean 实例,并且该 Bean 仅在当前 HTTP 请求内有效。
- Session – 每一个的 Session 都会产生一个新的 Bean 实例,同时该 Bean 仅在当前 HTTP Session 内有效。
- Application – 每一个 Web Application 都会产生一个新的 Bean ,同时该 Bean 仅在当前 Web Application 内有效。
大多都是默认配置即可,就算真用的也只有Prototype
其他三个了解即可