Enterprise 中级

用类型安全的 CDI 注入替代脆弱的 JNDI 字符串查找,用于容器管理资源。

✕ Java EE
public class OrderService {
    private DataSource ds;

    public void init() throws NamingException {
        InitialContext ctx = new InitialContext();
        ds = (DataSource) ctx.lookup(
            "java:comp/env/jdbc/OrderDB");
    }

    public List<Order> findAll()
            throws SQLException {
        try (Connection con = ds.getConnection()) {
            // query orders
        }
    }
}
✓ Jakarta EE 8+
@ApplicationScoped
public class OrderService {
    @Inject
    @Resource(name = "jdbc/OrderDB")
    DataSource ds;

    public List<Order> findAll()
            throws SQLException {
        try (Connection con = ds.getConnection()) {
            // query orders
        }
    }
}
发现此代码有问题? 告诉我们。
🔒

类型安全连接

注入错误在部署时捕获,而非通过字符串查找在运行时捕获。

🧪

可测试

CDI bean 可以在单元测试中注入模拟——JNDI 查找则不行。

📖

显式依赖

@Inject 字段使依赖关系清晰可见。

旧方式
JNDI 查找
现代方式
CDI @Inject
自 JDK
11
难度
中级
JNDI 查找与 CDI 注入
可用

自 Jakarta EE 8 / Java 11 起广泛可用

传统 JNDI 模式强制使用基于字符串的资源名称,在部署时绑定,导致脆弱的运行时错误。CDI @Inject 在部署时进行类型安全的连接。

分享 𝕏 🦋 in