2016-11-18 6 views
-1

로하지 바인딩 나는 다음과 같은 생성자를 가지고Guice는 @Named 주석

@Inject 
public MyClass(Provider<TestClass> testProvider, @Named("myName") String name) { 
    //constructor stuff 
} 

내 모듈 :

@Provides 
@Named("myName") 
public String getName(SomeObject object) { 
    return object.getName(); 
} 

문제는 Guice 바인딩하지 않는다는 것입니다.

이제 @Named 주석을 제거하면 작동합니다. getName() 메서드가 성공적으로 호출되었습니다.@Named 주석을 추가 할 때 getName()은 호출되지 않으며, 생성자가 빈 문자열로 주입됩니다. @Provides 주석 내 방법

하나는 String 반환하지만 난 여전히 String가 주입 될 수있는 매우 일반적인 객체이기 때문에 그 이름을 싶습니다. ?.

나는 또한 내가 아무 소용 문서를 체크 설명서를 따라합니다 (configure() 방법 내에서 결합,하지만 여전히 아무것도

누구든지 내가 부족 알고 시도

편집 할 수 있습니다. : 내 수입은 나를 위해 올바른

+0

코드는 완벽하게 합리적인 것처럼 보입니다. 'Named '를 올바르게 사용하고 있습니다. 부실 빌드 아티팩트 또는 저장하지 않은 파일의 경우가 아니라는 것을 100 % 확신합니까? –

+0

'Named'주석 가져 오기를 두 번 확인하십시오. –

+0

이들은 나의 수입품이다 : 'import com.google.inject.name.Named;' 아주 이상하다. 더 많은 문제 해결을 시도 할 것입니다. 어쩌면 내 환경에 문제가있는 것 같습니다. – Tiberiu

답변

1

작품이라는 것을 확신 여기에 내가 확인하는 데 사용되는 코드 (guice 4.0)이다.

package guice; 

import com.google.inject.*; 
import com.google.inject.name.Named; 


public class Main { 
    public static void main(String[] args) { 
     Guice.createInjector(new MyModule()).getInstance(MyClass.class); 
    } 
} 

class MyClass { 
    @Inject 
    public MyClass(Provider<TestClass> testProvider, @Named("myName") String name) { 
     System.out.println(name); 
    } 
} 

class MyModule extends AbstractModule { 
    @Override 
    protected void configure() { 
    } 

    @Provides 
    @Named("myName") 
    public String getName(SomeObject object) { 
     return object.getName(); 
    } 
} 

class SomeObject { 
    public String getName() { 
     return "helloWorld"; 
    } 
} 

class TestClass { 
} 

인쇄 "helloWorld"를 예상대로.