私はダオのメソッドをテストするための単体テストを書いているので、アプリケーションの実行時に依存性を注入するために非常に複雑であることが証明されています。データベース接続ファクトリーサービスをJerseyアプリケーションに挿入する方法
ここは私のweb.xmlです。私はパッケージスキャンを使用していることがわかります
<?xml version="1.0" encoding="UTF-8"?>
<!-- This web.xml file is not required when using Servlet 3.0 container,
see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html -->
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>myapp</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>my.package.MyApplication</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>
my.package
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myapp</servlet-name>
<url-pattern>/api/v1/*</url-pattern>
</servlet-mapping>
</web-app>
私はURIを処理する方法を持つコントローラを持っています。
Dao dao = new Dao();
dao.setConnectionFactory(new DriverManagerConnectionFactory("jdbc:hsqldb:mem:mymemdb:user=SA;"));
...
と私は簡単に私のユニットテストを実行することができます:私は単にこれを行うユニットテストを持っている
public class Dao {
// I use a datasource when my app runs on tomcat, but for unit testing I spin up an in memory database and run my unit tests against that. Can't set a datasource for an in memory database
public static final String DATASOURCE_NAME = "jdbc/myDataSource";
// Dependency to be injected
private ConnectionFactory connectionFactory = null;
public void setConnectionFactory(ConnectionFactory connectionFactory) {
this.connectionFactory = connectionFactory;
}
...
:このメソッドは、次のようになります私のDAOのメソッドを呼び出します。問題は、今、私のアプリが壊れていることです。私は、アプリケーションが起動されたとき、またはコントローラメソッドがURIを通じて呼び出されたときに、DataSourceConnectionFactoryを挿入する方法がわかりません。
Jerseyのドキュメントはすべてあちこちにあり、あいまいであり、私が従うことができる実際の例を提供していません。 https://jersey.java.net/documentation/latest/ioc.html
は、私は自分の依存性注入をロールジャージを使用して小さなアプリケーションのために、あなたと正直に言う:あなたはジャージー2.xのを使用している場合
私はあなたに同意します。あなたはこれについてやっていく方法についてのコード例を提供できますか? – Catfish
@Catfish - 確かに - もう一度私はいくつかの注意を手渡しDIを使用するだろう - 非常に大きなアプリケーションのために、それは面倒になることができます。スタックオーバーフローのコメントは、サンプルコードにとって最善の方法ではないかもしれません。 –
別の答えを書くのではなく、いくつかのサンプルコードで回答を編集するだけです。 – Catfish