이 모든 노력의 목표는 런타임에 변경할 수있는 리소스에 데이터 소스를 삽입하는 것입니다. 가능한 한 내 리소스 내 논리를 부 풀리지 않아야합니다.Jersey 1.19.1에 Spring DI를 추가하면 왜 내 리소스가 싱글 톤이됩니까?
입니다 봄 4.1.9.RELEASE (스프링 AOP, 스프링 콩, 스프링 컨텍스트, 봄 코어, 스프링 식, 스프링 웹)
를 사용하여 저지 1.19.1와 레거시 응용 프로그램
내가...request...
Constructor Hit
...request...
Constructor hit
그래서, 자원이 생성되어 다음과 같은 출력을 얻을이 자원 충돌 실행하면
@Path("/test)
public class TestResource {
public TestResource(){
System.out.println("Constructor Hit");
}
}
매번 요청이 큰 : 그래서 여기 내 예를 들어 자원입니다!
이제 스프링을 사용하여이 리소스에 빈을 주입하려고합니다. 따라서 다음 클래스를 얻습니다.
@Path("/test)
@Component
public class TestResource {
@Inject
public TestResource(MyBean test){
System.out.println("Constructor Hit");
}
}
는 지금은 자원 만 (나는 봄 응용 프로그램 작성시 같은데요)를 한 번 만들어
Constructor hit
...request...
...request...
다음과 같은 출력을 얻을.
해결 방법이 있습니까? 나는 그것이 @Component
와 함께 주석을 붙이기 때문에 그것이있다라고 생각한다. 그러나 나는 그것없이 주입 부품을 얻는 것처럼 보일 수 없다.
왜 그런가요? 클래스가 상태를 유지하지 않는 한 완벽하게 단일성이 될 수 있습니다. –
아이디어는 런타임에'MyBean' 인스턴스가 실제로 무엇인지를 전환하고 싶다는 것입니다. 예를 들어, 런타임에서 변경하려는 데이터 소스이며, 팩토리에서 추출하는 방법에 대한 리소스에 로직을 추가하는 대신 논리를보다 명확하게 유지하기 위해 리소스에 해당 인스턴스를 주입하려고합니다. –
그런 다음 AOP를 사용하여 로직이 포함 된 MyBean을 래핑하십시오. 수동으로 수행하는 대신 어딘가에 로직을 구현해야하며 더 똑똑한 방법이 될 수있는 생성 오버 헤드가 필요합니다. –