### Spring in Action: 访问企业服务 - JNDI 支持详解 #### 7.1 从 JNDI 中获取对象 _Java Naming and Directory Interface (JNDI)_ 是 Java 平台的一个标准组件,它提供了一种查找和访问应用环境中命名和目录服务的方法。在 Java 应用程序开发中,特别是对于那些需要与数据库交互的应用,JNDI 提供了一种灵活的方式来管理和查找数据源、事务管理器等关键资源。 #### 7.1.1 使用传统的 JNDI 传统的 JNDI 使用方式涉及到创建 `InitialContext` 对象,并通过 `lookup` 方法来查找所需的资源。例如,查找一个名为 `myDatasource` 的 `javax.sql.DataSource` 可能会像下面的代码所示: ```java InitialContext ctx = null; try { ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/myDatasource"); } catch (NamingException ne) { // 处理命名异常... } finally { if (ctx != null) { try { ctx.close(); } catch (NamingException ne) {} } } ``` 尽管这段代码看起来并不复杂,但它包含了一些不必要的开销和耦合问题: - 必须创建和关闭 `InitialContext`,这是为了查找单个 `DataSource` 对象所必需的步骤。 - 需要处理或重新抛出 `NamingException` 异常。 - 代码与 JNDI 查找紧密耦合,限制了灵活性。 - 代码与特定的 JNDI 名称绑定。 这些问题违反了依赖注入的原则,即应用程序不应直接负责获取依赖项,而是应由外部容器或框架来提供这些依赖项。 #### 7.1.2 代理 JNDI 对象 Spring 提供了一个解决方案,即 _JndiObjectFactoryBean_,它可以作为一个工厂 Bean 来简化从 JNDI 中查找对象的过程。使用这种方式,开发者可以轻松地将 JNDI 对象注入到应用程序的其他部分,而无需直接与 JNDI API 交互。 ##### 创建 JndiObjectFactoryBean 为了使用 `JndiObjectFactoryBean`,首先需要在 Spring 配置文件中定义它。示例配置如下: ```xml <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/myDatasource"/> </bean> ``` 这里,`jndiName` 属性指定了 JNDI 查找的名称。接下来,可以在其他 Bean 中通过引用 `dataSource` 来获取数据源实例: ```xml <bean id="accountService" class="com.example.AccountService"> <property name="dataSource" ref="dataSource"/> </bean> ``` 在这个例子中,`AccountService` Bean 将自动获得 `dataSource` 的实例,而无需编写任何与 JNDI 相关的代码。这样不仅简化了代码,也提高了代码的可读性和可维护性。 ##### 利用 Spring 的 JNDI 抽象层的优势 使用 Spring 的 JNDI 抽象层有以下几个明显的好处: - **降低耦合度**:应用程序不再直接依赖于具体的 JNDI 实现细节。 - **易于测试**:由于依赖项是由 Spring 容器管理的,因此可以轻松地为单元测试提供模拟或替代的实现。 - **简化异常处理**:Spring 框架会处理 JNDI 相关的异常,减少开发者需要处理的异常类型数量。 - **提高灵活性**:可以通过简单的配置更改来更改数据源或其他资源的位置,无需修改代码。 通过这种方式,Spring 的 JNDI 抽象层不仅使得访问 JNDI 资源变得更加简单,而且还遵循了良好的软件设计原则,提高了代码的质量和可维护性。
剩余24页未读,继续阅读
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- py3_lib.tar.gz
- PlantsVsZombiesRH_2.0.4.apk
- 根据表格内容来重命名表格文件名V1.0.0.zip
- HCIA网络技术认证题库解析与备考指南
- SUES-大三下-计科课程-学习/考试/复习/实验资料
- asdgaga ywertertvfgc erq tver sda vgwefc
- 南京邮电大学交换技术与通信网 MPLS基本配置实验报告(最新)
- 【小程序毕业设计】自助购药小程序源码(完整前后端+mysql+说明文档+LW).zip
- 【小程序毕业设计】在线办公小程序源码(完整前后端+mysql+说明文档+LW).zip
- 【小程序毕业设计】游乐园智慧向导小程序源码(完整前后端+mysql+说明文档).zip
评论0