나는 비슷한 질문을 Spring - how to inject a bean into class which is created many times at runtime?과 Why is Spring's ApplicationContext.getBean considered bad?으로 발견했다.Spring bean을 Exception에 삽입하는 방법
예제 코드 :
public interface AppNameProvider
{
String getAppName();
}
public class DefaultAppNameProvider implements AppNameProvider
{
private String appName;
public String getAppName()
{
return appName;
}
public setAppName(String appName)
{
this.appName = appName;
}
}
<bean id="appNameProvider" class="some.package.DefaultAppNameProvider">
<property name="appName" value="MyApplication"/>
</bean>
public class MyException extends RuntimeException
{
// Imagine obligatory constructors here...
public String getAppName()
{
// Inject appNameProvider somehow here
return appNameProvider.getAppName();
}
}
나는 XML에 선언 공급자 콩 있습니다. 이 예제에서 값은 단순화를 위해 xml로 간단히 선언됩니다. 나는 bean으로부터 무언가를받을 필요가있는 custom exception을 가지고있다. 그런 빈을 예외 클래스에 주입하는 방법. 분명히 Spring 빈처럼 예외를 선언 할 수는 없습니다. appName은 단순한 예일 뿐이고 다른 어떤 것도 될 수 있습니다. myException.getAppName()의 hypothetic 호출자가 appNameProvider.getAppName()을 호출하지 않는 이유가 궁금 할 것입니다. 의도적이지 않으므로 각 예외 등에서 다른 공급자가있을 수 있습니다.
나는 이러한 예외에 빈을 삽입하는 방법을 알고 싶습니다. setter를 추가하고 예외 발생 시간에 공급자를 설정할 수 있습니다. 하지만 (내 응용 프로그램 코드에서) 외부에서 사용할 공급자를 알고 있어야하며이 예외를 throw하려는 모든 곳에서 중복으로 처리해야합니다. 이상적으로 XML에서 예외에 사용할 공급자를 선언하고 싶습니다.
궁극적으로 질문은 예외가 아닌 bean 자체가 아닌 런타임 객체를 생각할 수 있도록 확장 될 수 있습니다.
추신 : 나는 코드에서 Spring에 대한 하드 코드 된 의존성을 갖는 것을 두려워하지 않습니다. 나는 봄을 사용하고 그것을 포옹하고 싶다 - 그것을 피하지 말라. 나는했습니다 이후
'MyException'의 새 인스턴스를 throw하는 코드를 게시 할 수 있습니까? 나는 당신이 생성자를 통해 AppNameProvider에 대한 참조를 전달할 수 없다면 궁금하다 ... – JBert