我在這裏發現了類似的問題Spring - how to inject a bean into class which is created many times at runtime?和Why is Spring's ApplicationContext.getBean considered bad?,但都沒有真正回答我的情況。如何注入彈簧豆異常
示例代碼:
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中接收一些東西。如何將這樣的bean注入到異常類中。我顯然不能將異常聲明爲Spring bean。 appName只是一個簡單的例子,它可以是其他任何東西。您可能想知道爲什麼myException.getAppName()的假設調用者不會僅僅調用appNameProvider.getAppName()?因爲它並非如此,例如在每個異常中可能會有不同的提供者等。
我想知道如何將bean注入這種異常。我可以在異常拋出時添加setter並設置提供者。但是我必須知道從外部使用哪個提供程序(在我的應用程序代碼中),並且我必須在要引發此異常的任何地方冗餘地執行此操作。理想情況下,我想聲明哪個提供程序用於xml中的異常。
最終問題可以擴大,所以我們不會想到異常,而是想到任何不是bean本身的運行時對象。
PS我不害怕在代碼中有Spring的硬編碼依賴關係。我使用Spring,我想擁抱它 - 不是避免它。
你能發佈拋出一個'MyException'的新實例的代碼嗎?我不知道你是否無法通過構造函數傳遞給AppNameProvider的引用... – JBert