当前位置: 首页 > 知识库问答 >
问题:

如何使用HK2 DI框架与泽西2?

贲绪
2023-03-14

我正在尝试使用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");        }
}
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个答案

岳正阳
2023-03-14

所以我看错了几件事。

>

  • 注入的类型需要是“Contract”类型,如bind(Impl).to(Contract)to(Contract)指定要注入的“通告”类型。

    因此,您不需要尝试注入PropertiesHandlerImpl,而是使用协定PropertiesHandler进行注入

    @Inject
    PropertiesHandler handler;
    

    我看不出您是如何使用jdbcConnectionStrategy的。它没有在abstractbinder中配置,所以我猜您只是在自己实例化它。这行不通的。您还需要将它连接到DI系统并注入它。

    现场注入发生在施工后。所以您不能在构造函数内部使用服务,除非您将其注入构造函数。

    @Inject
    public JDBCConnectionStrategy(PropertiesHandler handler) {
    
    }
    

  •  类似资料:
    • 我正在使用Jersey编写REST web服务,并尝试编写一组单元测试,以使用Jersey测试框架测试该服务。 然而,我使用HTTP身份验证和SecurityContext作为我的web服务的一部分,我在设置JTF以允许我测试这些方面时遇到了问题。我可以在请求中发送身份验证信息,但如何配置它以了解我希望设置的不同角色和用户? 我目前正在使用Jetty(通过JettyTestContainerFac

    • 这是我为我的HTTPServer编写的内容: 任何帮助都将不胜感激。

    • 我有一个有点困难的情况。我正在使用泽西提供REST服务。 在我的运行时中,我使用版本1.16.0执行此操作: 这是我的资源类: 这是有效的,我得到了预期的json响应。 现在我找到了一个为集成测试提供内存服务器的杰西测试框架。 不幸的是,这似乎只适用于泽西2。x、 所以我为我的测试添加了一个额外的梯度设置: 这是我的测试课: 只要我的资源返回字符串,这个设置就可以运行。但是,只要我返回一个响应,如

    • 有没有示例代码演示如何在Jersey 2.0中使用guice-servlet?

    • 我正在尝试使用JAX-RS(Jersey)构建JSON RESTful Webservice。我也在使用Maven构建应用程序。 我的第一个方法是 pom之后。xml- 所以我补充道 到我的pom文件。其他lib文件(例如jackson-cors-asl-1.7.1.jar、jackson-jaxrs-1.7.1.jar、jaxb impl,…)也可以在生成的war文件中找到//编辑:它还下载st