IOC的理解
容器概念、控制反转、依赖注入
ioc容器:实际上就是个map(key,value),里面存的是各种对象
定义 Spring Bean 的方式:
- XML 配置:早期的 Spring 应用通常通过 XML 文件定义 Bean,使用
<bean>
标签来指定类、构造器参数和依赖关系。Spring Boot 项目已经不怎么用了。 - 基于注解的配置:使用 @Component、@Service、@Repository、@Controller 等注解可以将类标记为 Spring Bean,Spring 会自动扫描这些类并将其注册为 Bean。
- Java 配置类:通过 @Configuration 和 @Bean 注解,可以在 Java 类中手动定义 Bean。相比 XML 配置,这种方式更加简洁和类型安全。
在项日启动的时候会读取这些bean节点,根据全限定类名使用反射创建对象放到map里。
这个时候map里就有各种对象了,接下来我们在代码里需要用到里面的对象时,再通过DI注入(@Autowired、@Resource等注解)。
控制反转:
( 1 )是指创建对象的控制权的转移,以前是由你控制,现在由spring管理;并由容器根据配置文件或注解使用java的反射机制去创建实例和管理各个实例之间的依赖关系。
( 2)容器:上面说的就是容器!
( 3 )Spring 的 IOC 有三种注入方式 :构造器注入、setter 方法注入、根据注解注入。
IOC有什么好处?
在平时的 Java 开发中,如果我们要实现某一个功能,可能至少需要两个以上的对象来协助完成,在没有 Spring 之前,每个对象在需要它的合作对象时,需要自己 new 一个,比如说 A 要使用 B,A 就对 B 产生了依赖,也就是 A 和 B 之间存在了一种耦合关系。
有了 Spring 之后,就不一样了,创建 B 的工作交给了 Spring 来完成,Spring 创建好了 B 对象后就放到容器中,A 告诉 Spring 我需要 B,Spring 就从容器中取出 B 交给 A 来使用。
至于 B 是怎么来的,A 就不再关心了,Spring 容器想通过 newnew 创建 B 还是 new 创建 B,无所谓。
这就是 IoC 的好处,它降低了对象之间的耦合度,使得程序更加灵活,更加易于维护。
Spring 倡导的开发方式就是所有类的创建和销毁都通过 Spring 容器来,不再是开发者去 new,去 = null
,这样就实现了对象的解耦。
bean的生命周期完全由Spring控制,解放双手!