gpt4 book ai didi

java - 如何在 Jersey 2 中使用 HK2 DI 框架?

转载 作者:行者123 更新时间:2023-12-01 09:02:21 27 4
gpt4 key购买 nike

我正在尝试在 Jersey 中使用 hk2 DI,并且我已经阅读了一些有关此事的文本。 (我认为大多数都已经过时了)目前我有一个扩展 ResourceConfig 的类:

public class MyApplication extends ResourceConfig{
public MyApplication(){
register(new AbstractBinder() {
@Override
protected void configure() {
bind(AuthenticationServiceImpl.class).to(AuthenticationService.class);
bind(PropertiesHandlerImpl.class).to(PropertiesHandler.class).in(Singleton.class);
}
});
packages(true, "com.myclass"); }
}

在另一个类中,我尝试注入(inject)这些绑定(bind)类之一:

public class JDBCConnectionStrategy implements DatabaseConnectionStrategy {
private Connection connection;

@Inject
PropertiesHandlerImpl propertiesHandler;

public JDBCConnectionStrategy() throws SQLException{
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
String host = propertiesHandler.getProperty("host");
String userName = propertiesHandler.getProperty("userName");
String password = propertiesHandler.getProperty("password");
//Create a connection
this.connection = DriverManager.getConnection(host, userName, password);
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
e.printStackTrace();
}
}
....
}

如此声明:

@Singleton
@Service
public class PropertiesHandlerImpl implements PropertiesHandler {...}

问题:启动应用程序时出现以下错误

WARNING: The following warnings have been detected: WARNING: Unknown HK2 failure detected:
MultiException stack 1 of 2 java.lang.NullPointerException
at com.myclass.JDBCConnectionStrategy.<init>

更新:
我应该补充一点,我将应用程序包添加到了 web.xml 中的扫描路径中:

    <init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.myclass.system.CmisApplication</param-value>
</init-param>

最佳答案

所以我发现了一些错误。

  1. 注入(inject)的类型必须是“契约”类型,如bind(Impl).to(Contract)to(Contract) 指定要注入(inject)的“广告”类型。

    因此,您不必尝试注入(inject) PropertiesHandlerImpl,而是使用合约 PropertiesHandler 进行注入(inject)

    @Inject
    PropertiesHandler handler;
  2. 我不明白您如何使用 JDBCConnectionStrategy。它没有在您的 AbstractBinder 中配置,所以我猜您只是自己实例化它。这行不通。您还需要将其连接到 DI 系统并注入(inject)它。

  3. 字段注入(inject)发生在构建之后。因此,除非将服务注入(inject)到构造函数中,否则您无法在构造函数内部使用该服务。

    @Inject
    public JDBCConnectionStrategy(PropertiesHandler handler) {

    }

关于java - 如何在 Jersey 2 中使用 HK2 DI 框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41574347/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com