유일한 생성자가 @Inject
으로 주석 된 클래스로 선언 된 것을 보았습니다. 그리고 하나의 생성자가 프로젝트 전체에서 호출되는 것을 볼 수 없습니다.누군가 com.google.inject의 기능을 설명 할 수 있습니까?
그래서 두 가지 질문 :
이< 1>@Inject
은 무엇을 의미합니까?
< 2> 앞서 언급했듯이 생성자는 결코 직접 호출되지 않으며, @Inject
이라는 주석이 붙은 사실과 아무 관계가 없습니까?
유일한 생성자가 @Inject
으로 주석 된 클래스로 선언 된 것을 보았습니다. 그리고 하나의 생성자가 프로젝트 전체에서 호출되는 것을 볼 수 없습니다.누군가 com.google.inject의 기능을 설명 할 수 있습니까?
그래서 두 가지 질문 :
이< 1>@Inject
은 무엇을 의미합니까?
< 2> 앞서 언급했듯이 생성자는 결코 직접 호출되지 않으며, @Inject
이라는 주석이 붙은 사실과 아무 관계가 없습니까?
Google Guice은 의존성 삽입 라이브러리로, 두 개체 사이의 관계를 선언함으로써 개체를 간단히 만들 수 있습니다. 객체는 다른 객체를 생성해야 할 때 구성됩니다. Guice를 구성하여 다른 구현으로 추상 클래스 나 인터페이스를 구현할 수도 있습니다. Guice는 코드를 실행하거나 테스트하는 데 매우 유용합니다.
@Inject
은 개체를 초기화해야하는 대상을 결정하는 생성자와 메서드를 주석으로 지정합니다. Guice의 작동 방식을 결정하는 많은 주석이 있습니다. 그러나 단순히 객체에 주석을 달면 충분하지 않습니다. Guice bindings으로 구성해야합니다.
다음은 정말 간단한 예입니다 (내 응용 프로그램 중 하나에서). MySQLDataTracker
이 ExperimentDataTracker
, 여러 가지 방법을 구현하는 추상 클래스를 확장하는
public class MySQLDataTracker extends ExperimentDataTracker {
@Inject
public MySQLDataTracker(MysqlConnectionPoolDataSource ds) {
....
}
}
참고 : 나는 MysqlConnectionPoolDataSource
을 필요로하는 MySQLDataTracker
있습니다. 내 Guice 바인딩에서 나는이 내가 ExperimentDataTracker
을 원할 때마다하는 MySQLDataTracker
를 구축 할 것이라고 선언
bind(ExperimentDataTracker.class).to(MySQLDataTracker.class);
것을 선언합니다. 나는 또한이를 구성하는 필수 오브젝트를 사용할 수 있는지 확인해야합니다, 그래서 공급자 선언
@Provides @Singleton
MysqlConnectionPoolDataSource getMysqlCPDS() {
return (some thingy I construct...);
}
이것은 단지 하나의 연결 풀 데이터 소스가 있어야 있다고합니다. 그것은 또한 ExperimentDataTracker
의 인스턴스를 얻으려고 할 때 Guice가 그것을 구성하는 데 필요한 모든 것을 가지고 있음을 의미합니다. 위와 같지 않으면 오류가 발생합니다.
ExperimentDataTracker tracker = injector.getInstance(ExperimentDataTracker.class);
그러나 여기서는 그치지 않습니다. 다른 것들은 ExperimentDataTracker
에 의존하므로 차례로 다른 객체를 주입하는 데 사용됩니다. 내 코드의 최상위 레벨에는 실제로는 Guice가 거의 모든 것을 구성하게하는 getInstance
에 대한 호출이 하나뿐입니다. 어디서나 new
성명을 쓸 필요는 없습니다.
다른 개체를 초기화하기 위해 많은 수의 개체를 초기화해야 할 필요성이 줄어든 후 Guice의 팬입니다. 기본적으로 나는 단지 내가 원하는 객체를 요구한다. 그것은 나타난다.
그래서 생성자의 형식 매개 변수를 변경하면 올바르게 호출되도록 변경해야하는 부분이 있습니까? (어디에서 생성자에 대한 '호출'을 업데이트 할 것을 제안하겠습니까?) –
Guice로 응용 프로그램을 실행하는 경우 무언가를 주입 할 수없는 경우 오류가 발생합니다. 그게 가장 좋은 방법입니다. :) 또한 수동으로 만들어진 mock 객체를 이용한 단위 테스트. –
오브젝트가 생성자없이 호출 될 수있는 방법을 간단하게 설명 하시겠습니까? 어떤 구성 파일이나 뭔가가 생성자의 매개 변수를 나열하는 곳에 있습니까? (죄송합니다. 저는 초보자이며이 사실을 이해하는데 어려움이 있습니다.) –
해당 클래스는 [Guice] (https://code.google.com/p/google-guice/) 라이브러리에 속합니다. 그 자체가 [Inversion of Control] (http://en.wikipedia.org/wiki/Inversion_of_control) 프레임 워크입니다. – Perception