天天看点

Spring:IoC容器IOC容器

IOC容器

依赖注入和控制反转的区别?

  • “依赖注入”和“控制反转”其实就是一个事物的两种不同说法而已,本质上是一回事。
  • 基本思想:把类的依赖从类内部转到外部以减少依赖。
  • 利用“控制反转”,对象在被创建时,会由一个调控系统统一进行对象实例的管理,将该对象所依赖对象的引用通过调控系统传递给它。也可以说,依赖被注入到对象中。
  • “控制反转”是关于一个对象如何获取它所依赖对象的引用的过程,而反转体现在“谁来传递依赖的引用”这个职责的反转。
  • 控制反转一般分为:依赖注入(DI)和依赖查找(DL)。spring采用依赖注入来实现控制反转。
  • 个人理解:依赖注入是你需要我就给你注入,依赖查找是你需要就自己来找。

IoC应用的设计模式:

  • 反射:在运行状态中,根据提供的类的路径或类名,通过反射来动态地获取该类的所有属性和方法。
  • 工厂模式:把IOC容器当作一个工厂,在配置文件或注解中给出定义,然后利用反射技术,根据给出的类名生成相应的对象。

org.springframework.beans和org.springframework.context是SpringIoC容器的基础。

配置元数据:

  1. 基于XML文件格式记录配置元数据:在<beans/>中的<bean/>元素来配置bean。(SSH)
  2. 基于注解的配置
  3. 基于Java的配置:在@Configuration注解的类中使用@Bean注解。(SSM、springboot)

自动配置:

  • springboot通常使用基于Java的配置,通常,定义main方法的类作为主要的@Configuration类。
  • springboot应用了很多Spring框架中的自动配置功能。
  • 要启动自动配置功能,需要将@EnableAutoConfiguration或@SpringBootApplication注解添加到一个@Configuration类中。
  1. 自动配置:在Spring应用,通常使用@ComponentScan找到bean,结合@Autowired构造函数将bean进行自动装配注入。这些bean涵盖所有应用程序组件,如@Component、@Service、@Repository和@Controller等。
  2. 使用@SpringBootApplication注解:@SpringBootApplication注解相当于使用@Configuration、@EnableAutoConfiguration和@ComponentScan及其默认属性。

如果单例bean和非单例bean联合使用,可能出现问题,此时需要使用lookup-method注入或replaced-method注入。