我在这里发现了类似的问题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