저의 저어 방법을 테스트하기위한 단위 테스트를 작성하고 저의 응용 프로그램이 실행될 때 종속성을 주입하기 위해 매우 복잡하다는 저지 응용 프로그램이 있습니다.저지 응용 프로그램에 데이터베이스 연결 팩토리 서비스를 주입하는 방법
여기 내 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를 처리 할 수있는 컨트롤러가 있습니다. 나는 단순히이 작업을 수행하는 단위 테스트가
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 dao = new Dao();
dao.setConnectionFactory(new DriverManagerConnectionFactory("jdbc:hsqldb:mem:mymemdb:user=SA;"));
...
을 내가 쉽게 내 단위 테스트를 실행할 수있는이 방법은 다음과 같습니다 내 DAO 메소드를 호출합니다. 문제는 이제 내 응용 프로그램이 깨져서 b/c입니다. 응용 프로그램을 시작할 때 또는 컨트롤러 메서드가 URI를 통해 호출 될 때 DataSourceConnectionFactory를 주입하는 방법을 알지 못합니다.
Jersey 문서는 모호하고 모호하며 실제 사례를 제공하지 않습니다. https://jersey.java.net/documentation/latest/ioc.html
내가 내 자신의 의존성 주입 롤 저지를 사용하여 작은 애플 리케이션을위한, 당신과 함께 솔직히 말해서 : 당신이 저지 2.X를 사용하는 경우
나는 동의합니다. 이 작업을 수행하는 방법에 대한 코드 예제를 제공 할 수 있습니까? – Catfish
@ 캐쉬 피쉬 - 물론 - 아주 조심스럽게 핸드 롤링 DI를 사용하겠습니다. 매우 큰 애플리케이션의 경우 성가 시게 될 수 있습니다. 스택 오버플로 주석은 샘플 코드를위한 최선의 방법은 아닙니다. 오늘 나중에 예제를 사용하여 다른 답변을 추가하겠습니다. –
다른 답을 쓰는 대신 예제 코드로 답을 편집하면됩니다. – Catfish