누군가 Guice에서 봄에 'afterPropertiesSet'인터페이스와 동일한 기능을 수행 할 수있는 방법을 알고 있습니까? (포스트 구조 후크)Guice, afterPropertiesSet
답변
것 같다를 아직 지원되지 않으므로 모든 사람에게이 작업이 어떻게 이루어 지길 원하십니까? 여기에 작은 해결책이 있습니다.
public class PostConstructListener implements TypeListener{
private static Logger logger = Logger.getLogger(PostConstructListener.class);
@Override
public <I> void hear(TypeLiteral<I> iTypeLiteral,final TypeEncounter<I> iTypeEncounter) {
Class<? super I> type = iTypeLiteral.getRawType();
ReflectionUtils.MethodFilter mf = new ReflectionUtils.MethodFilter() {
@Override
public boolean matches(Method method) {
return method.isAnnotationPresent(PostConstruct.class);
}
};
ReflectionUtils.MethodCallback mc = new ReflectionUtils.MethodCallback() {
@Override
public void doWith(Method method) throws IllegalArgumentException, IllegalAccessException {
if (!(method.getReturnType().equals(Void.TYPE) && method.getParameterTypes().length == 0))
{
logger.warn("Only VOID methods having 0 parameters are supported by the PostConstruct annotation!" +
"method " + method.getName() + " skipped!");
return;
}
iTypeEncounter.register(new PostConstructInvoker<I>(method));
}
};
ReflectionUtils.doWithMethods(type,mc,mf);
}
class PostConstructInvoker<I> implements InjectionListener<I>{
private Method method;
public PostConstructInvoker(Method method) {
this.method = method;
}
@Override
public void afterInjection(I o) {
try {
method.invoke(o);
} catch (Throwable e) {
logger.error(e);
}
}
}
}
ReflectionUtils 패키지는 스프링에 한정된다.
바인드 어떤 이벤트에 청취자 : 당신의 guice 모듈
bindListener(Matchers.any(),new PostConstructListener());
. 재밌게
@PostConstruct를 사용하는 것이 좋습니다. 여기
은 관련 블로그 게시물입니다 : http://macstrac.blogspot.com/2008/10/adding-support-for-postconstruct.html그리고 여기에 지원을 제공하는 부가 기능 라이브러리입니다 : Guiceyfruit을 통해 라이프 사이클 지원을 추가 http://code.google.com/p/guiceyfruit/
여기에 설명되어 있습니다 : http://code.google.com/p/guiceyfruit/wiki/Lifecycle
당신은 Guice 위키에 CustomInjections 페이지를 참조 할 것 : 표준 @Inject
구동 형 주사 외에도
는, Guice는 사용자 정의 주사에 대한 후크를 포함한다. 이를 통해 Guice는 자체 주입 의미 또는 주석이있는 다른 프레임 워크를 호스팅 할 수 있습니다. 대부분의 개발자는 맞춤 주입을 직접 사용하지 않습니다. 그러나 확장 프로그램 및 타사 라이브러리에서 해당 기능을 사용할 수 있습니다. 각 사용자 정의 주입에는 유형 수신기, 주입 수신기 및 각각의 등록이 필요합니다.
final class FooImpl implements Foo { private final Bar bar; @Inject FooImpl(Bar bar) { this.bar = bar; ... } @Inject void init() { // Post-construction code goes here! } }
을 Guice 제공하는 경우 : 당신은 생성자 주입을 사용하여 너무 미친 아무것도하지 않는 경우 가장 간단한 해결책 지금까지
은 후 시공 방법을 만들고 @Inject
로 주석하는 것입니다 FooImpl, @Inject
생성자가 있고, 호출 한 다음 @Inject
으로 주석을 붙인 메소드를 검색하여 호출합니다. 이것에 대한 의도 된 유스 케이스는 setter injection이지만, @Inject
메쏘드에 params가 없다고하더라도, Guice는 그것을 호출 할 것입니다.
Guice가 @Inject
메서드가 호출되는 순서 (즉, 사용자의 init()
메서드)에 대한 보장이 있는지 알지 못하기 때문에 setter 나 필드 주입을 사용하여 deps를 주입하는 경우이 방법을 사용하지 않는 것이 좋습니다 마지막으로 불리지 않을 수도 있습니다). 즉, 어쨌든 생성자 주입이 선호되는 접근 방식이므로 문제가되지 않아야합니다.
- 1. Guice 로깅
- 2. 주입 내가 구글 Guice 2.0 일을 주입하기 위해 노력하고있어 Guice
- 3. Guice 서블릿 (405) ERR : 다음 바인딩이있는 Guice 서블릿에 MediaType.APPLICATION_JSON
- 4. Guice 3.0의 안정도는 얼마나됩니까
- 5. Guice injectMembers 메서드
- 6. Guice with parents
- 7. Guice 2.0의 ClassNotFoundException
- 8. bindInterceptor와 guice 보안을위한 필터?
- 9. 글로벌 Google Guice 모듈?
- 10. Guice 문제 (테스트 포함)
- 11. Guice 대 AspectJ
- 12. Google Guice 2.0
- 13. 언제 Guice 모듈을 설치하나요?
- 14. Guice @ Nullable annotation
- 15. Guice with OSGi 사용
- 16. Guice Singleton을 테스트하는 방법?
- 17. Guice ThrowingProvider 문제
- 18. 어디 guice 인젝터를 유지하려면?
- 19. setter injection guice + wicket
- 20. Guice 구성 오류
- 21. EasyMock/Guice 스타일 API
- 22. Guice 및 속성 파일
- 23. Threadsafe Guice Binding
- 24. Guice 준비 보안 프레임 워크?
- 25. Guice 바인딩 구성을 구성하는 솔루션
- 26. Guice 스타일 서비스 위치 지정자
- 27. 유형 매개 변수가있는 Guice 모듈
- 28. guice-persist가 @Finder 주석을 지원합니까?
- 29. Guice : 바인딩을 강제로 공급자로 삽입
- 30. Google Guice : 매개 변수가있는 제공자
당신이 참조하는 인터페이스는'InitializingBean'입니다. – skaffman
그래, 링크는 – Roman