2017-12-05 25 views
0

저는 스프링 프레임 워크 의존성 주입과 물건에 익숙해 져서 JBoss에서는 정말 초록색입니다. 나는 불가능한 일을하고 싶을지도 모른다.wildfly에서 종속 CDI를 사용할 수 있습니까?

우리 회사에서 우리는 모든 의존성 주입이있는 프로토 타입으로 시작했습니다. 우리는 하나 개의 클래스가 이런 식으로 선언이 :

@ApplicationScoped 
public class MessageHandlerImpl implements MessageHandler { 
    ... 
} 

을하고이 같은 다른 클래스에 주입 :

@ApplicationScoped 
public class MessageReceiverImpl implements MessageReceiver { 

    @Inject 
    MessageHandler messageHandler; 
    ... 

} 

프로토 타입은 받아 들여졌다 이제 우리는 핵심에 몇 가지 일반적인 코드를 분리이 프로젝트를 조직하고 계획.

우리가 그것을 분리 할 때까지 그 주입은 잘 작동하고있었습니다. 이 문제에 대한 자세한 내용은 다음 질문에 대한 질문을 받았습니다 : Ambiguous dependency with only one @ApplicationScoped class

나는 한 걸음 뒤로 물러서서 내가하고있는 일이 어쩌면 야생의 떼를 쓸 수 없거나 내가 시도한 전체 개념이 잘못되었다고 생각하고 있습니다. .

내가하고 싶은 것은 CDI를 내 핵심 프로젝트에서 수행하고 종속 프로젝트의 @Inject 주석과 함께 사용하는 것입니다. 당신은 내가 링크 된 질문에서 볼 수 있듯이 내가 모호한 종속성을 얻을 수 있기 때문에 작동하지 않습니다

@ApplicationScoped 
public class WSClient { 

    @Inject 
    MessageReceiver messageReceiver; 

    ... 

} 

음 : 그래서 내 의존 프로젝트에서 내가 좋아하는 뭔가를 할 것입니다. 내가해야 할 일은 프로듀서 같은 것을 사용하는 것이 아닌지 궁금합니다. 누구든지이 접근법이나 대안에 대한 올바른 접근법을 가르쳐 줄 수 있습니까?

+1

프로듀서는 특정 유형을 가능한 다양한 방법으로 인스턴스화 한 다음 "이 유형을 주입하는 경우이 유형을 주입하면이 인스턴스를 제공합니다"라는 CDI에 넘겨주고 싶을 때 사용됩니다 (매우 단순화 된 ofc) . 그래서 평범한 주사만으로 충분할 것입니다. 제작자가 필요 없다는 것을 알 수 있습니다. 실제로 작동하지만 클래스가 어딘가에 두 번로드되어 있어야 함을 의미하는 모호한 점이 있습니다. 그 방향으로 계속 파고 들어야합니다. – Siliarus

+0

@Siliarus 나는 그것에 대해 연구 중이다. 당신의 의견을 많이 주셔서 고마워요, 당신이 생산자에 대해 말한 것을 이해했습니다, 지금 나에게 더 분명합니다. 건축의 관점에서 보면 어떨까요? 필자의 핵심 CDI 주석을 기술적으로 특정하게 만드는 것은 나쁘지 않은가? JBoss의 우수 사례가 무엇인지 전혀 모르겠습니다. – BrenoQ

+1

코어가 분리되어 있으면 완벽하게 괜찮습니다. 그런 식으로 CDI를 사용할 수 있습니다. 그것은 매우 일반적입니다. 모든 분리 된 JAR 파일이 빈 아카이브 (예 :'bean '을 포함하는 것이 가장 간단한 방법)인지 확인하십시오.xml') - 나는 당신이 가지고 있다고 추정한다. 그렇지 않으면 그 콩들은 발견되지 않을 것이다. – Siliarus

답변

1

제작자는 특정 유형을 가능한 다양한 방식으로 인스턴스화 한 다음 "이봐, 누군가이 유형을 주입하는 경우이 인스턴스를 제공합니다"라는 CDI에 넘겨주고 싶을 때 제작자가 사용됩니다 (매우 단순화 된 버전). 코스). 당신이 묘사 한 바에 따르면, 당신은 평범한 사출과 콩 만들기로 충분할 것입니다. 나는 생산자가 필요 없다고 생각합니다.

두 가지 질문을 통해 사실 주사가 작동한다고도 볼 수 있지만 일부 모호한 점이 있습니다. 저것에 의하여 나는 1 개의 주입 지점이 몇몇 가능한 후보자를 보낸 ㄴ다는 것을 의미한다. 귀하의 경우에만 그들이 동일하다는 것을 의미합니다. 즉, 클래스가 어떻게 든 두 번로드 되었어야하며, 어딘가에 있어야합니다. 그 방향으로 계속 파고 들어야합니다.

아키텍처의 관점에서 볼 때 CDI를 사용하면 프로젝트의 다른 부분에서 사용되는 CDI 라이브러리로 코어를 추출하는 것이 좋을 것입니다. 모든 보관 파일이 "빈 보관소"로 간주되는지 확인하십시오. 이를 달성하는 가장 쉬운 방법은 beans.xml을 포함시키는 것입니다.