IOC容器
依赖注入和控制反转的区别?
- “依赖注入”和“控制反转”其实就是一个事物的两种不同说法而已,本质上是一回事。
- 基本思想:把类的依赖从类内部转到外部以减少依赖。
- 利用“控制反转”,对象在被创建时,会由一个调控系统统一进行对象实例的管理,将该对象所依赖对象的引用通过调控系统传递给它。也可以说,依赖被注入到对象中。
- “控制反转”是关于一个对象如何获取它所依赖对象的引用的过程,而反转体现在“谁来传递依赖的引用”这个职责的反转。
- 控制反转一般分为:依赖注入(DI)和依赖查找(DL)。spring采用依赖注入来实现控制反转。
- 个人理解:依赖注入是你需要我就给你注入,依赖查找是你需要就自己来找。
IoC应用的设计模式:
- 反射:在运行状态中,根据提供的类的路径或类名,通过反射来动态地获取该类的所有属性和方法。
- 工厂模式:把IOC容器当作一个工厂,在配置文件或注解中给出定义,然后利用反射技术,根据给出的类名生成相应的对象。
org.springframework.beans和org.springframework.context是SpringIoC容器的基础。
配置元数据:
- 基于XML文件格式记录配置元数据:在<beans/>中的<bean/>元素来配置bean。(SSH)
- 基于注解的配置
- 基于Java的配置:在@Configuration注解的类中使用@Bean注解。(SSM、springboot)
自动配置:
- springboot通常使用基于Java的配置,通常,定义main方法的类作为主要的@Configuration类。
- springboot应用了很多Spring框架中的自动配置功能。
- 要启动自动配置功能,需要将@EnableAutoConfiguration或@SpringBootApplication注解添加到一个@Configuration类中。
- 自动配置:在Spring应用,通常使用@ComponentScan找到bean,结合@Autowired构造函数将bean进行自动装配注入。这些bean涵盖所有应用程序组件,如@Component、@Service、@Repository和@Controller等。
- 使用@SpringBootApplication注解:@SpringBootApplication注解相当于使用@Configuration、@EnableAutoConfiguration和@ComponentScan及其默认属性。
如果单例bean和非单例bean联合使用,可能出现问题,此时需要使用lookup-method注入或replaced-method注入。