2017-02-01 9 views
0

POJO에서 CDI를 사용하고 싶습니다.wildfly - POJO에서 CDI 사용

이제 Jaxrs Resteasy 웹 응용 프로그램을 Wildfly 10.1.0.Final에서 실행하십시오.

는 ServiceImpl에서는 클래스를 반환하는 싱글이 :

public class ServiceFactory { 

    private static Service service = new ServiceImpl(); 

    public static Service getEnvsApi() 
    { 
     return service; 
    } 
} 

그리고

public class ServiceImpl extends Service { 

    @Inject 
    private MyData myData; 

    @Override 
    public MyData getData() 
    { 
     return myData; 
    } 
} 

하지만 myData는 항상 null의 ServiceImpl에서는 클래스 내부에 사용 CDI를하고 싶습니다.

용접을 수동으로 시작해야합니까?

답변

0

또한 인스턴스화하면 CDI 제어를받지 않기 때문에 ServiceFactory에 서비스를 삽입해야합니다.

아마도 ServiceFactory를 완전히 제거하고 필요할 때마다 서비스에 삽입 할 수 있습니다.

1

webapp가 Wildfly에서 실행 중이면 Weld를 "시작"할 필요가 없습니다. 코드에서 CDI API를 사용하고 webapp/WEB-INF에 beans.xml을 추가하면 (CDI의 빈 검색 모드를 살펴보십시오) CDI가 활성화됩니다.

문제와 관련하여 문제는 CDI를 중단시키는 새로운 연산자를 통해 서비스를 인스턴스화하는 것입니다. 다른 대답에 따르면, ServiceImpl@ApplicationScoped을 사용해야하며 사용자는 ServiceFactory이 필요하지 않습니다.

그냥 @ApplicationScoped

@ApplicationScoped 
public class ServiceImpl implements Service { 

    @Inject 
    private MyData myData; 

    @Override 
    public MyData getData() 
    { 
     return myData; 
    } 

} 

로 ServiceImpl에서는 선언 그리고 당신은 @Inject 할 수 Service :

@Inject 
private Service service