Java Spring IoC容器示例

简而言之,IoC容器负责实例化/创建和配置对象并组装对象之间的依赖关系。

您可能想知道IoC容器如何接收数据并执行上述操作,答案来自三个地方中的一个: XML文件、 Java 代码或 Java 注释。

IoC容器是Spring中的一个框架,用于管理POJO(普通的旧Java对象)的生命周期,并在需要时将其插入Java程序中。

通常,Java对象通过两种方式声明其依赖项:

  1. 将它们作为参数传递给构造函数
  2. 通过将它们作为对象的 setter 方法的参数传递

Spring 的 IoC 容器基于两个包:org.springframework.beansorg.springframework.context

Beanfactory 接口管理许多 bean,同时,这些 bean 之间存在依赖关系。它提供了基本功能,更重要的是,它提供了ApplicationContext,它是BeanFactory的子接口。在应用程序运行时,它是只读的;如果实现允许并管理Bean的生命周期,则可以重新加载它。

此时,依赖项不是由 Java 对象管理的,而是由框架管理的。 出现了倒置(如果你明白我的意思的话)。

配置元数据是指与我在本教程开头提到的任务相关的指令——对象的实例化、配置和组装。

IoC容器

从上面的图片可以看出,实质上发生的是配置元数据 (对象的实例化、配置和组装) ,并且 JOVOs 被传递到 IOC 容器(最有可能是 ApplicationContext 的实例)。

如何实例化ApplicationContext

ApplicationContext context = new ClassPathXmlApplicationContext("services.xml");

也可以将 ApplicationContext 看作是简单的配置。 它从 XML 文件或注释中加载“配置”。 需要在应用程序的开头创建 ApplicationContext,以便它读取应用程序需要读取的所有内容。

如果您想知道的话,可以在应用程序中使用许多 ApplicationContexts。 您甚至可以让它们从相同的配置文件中读取。 这是个好习惯吗? 这取决于你想要实现什么。大多数人会建议将所有bean配置在一个位置(通过XML或另一个位置)并由单个应用程序加载上下文。

下面的示例取自原始的 Spring 文档,您可以随时查看它以深入了解 Spring。

services.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">
  <!-- services -->
  <bean id="petStore"
        class="org.springframework.samples.jpetstore.services.PetStoreServiceImpl">
    <property name="accountDao" ref="accountDao"/>
    <property name="itemDao" ref="itemDao"/>
    <!-- additional collaborators and configuration for this bean go here -->
  </bean>
  <!-- more bean definitions for services go here -->
</beans>

同样,您可以将 services.xml 看作一个配置文件,并将 ApplicationContext 加载 / 读取它。

结论

当您可以使用简单的 DI (Depedency Injection) 时,为什么还要使用IoC?

这里有几个原因:

  1. 高雅
  2. 易于在生产和测试模式之间进行更改(只需要改变配置)

但是有一个缺点,那就是有时候 IoC 容器的正确实现有点棘手。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值