我在这里找到了类似的问题:Spring - 如何将bean注入到在运行时创建多次的类中?和为什么Spring的ApplicationContext.getBean被认为是不好的?,但都没有真正回答我的问题。
示例代码:
我在xml中声明了一个提供者bean。在这个例子中,为简单起见,值只是在xml中声明的。我有一个自定义异常需要从bean接收一些东西。如何将这样的bean注入到异常类中?显然,我不能将异常声明为Spring bean。appName只是一个简单的例子,它可以是任何其他内容。你可能会想知道为什么调用myException.getAppName()的假定调用者不会直接调用appNameProvider.getAppName()?因为这不是意图,例如每个异常中可能有不同的提供者等。
我想知道如何将bean注入到这样的异常中。我可以添加setter并在抛出异常时设置提供者。但我必须从外部(在我的应用程序代码中)知道要使用哪个提供者,并且我必须在想要抛出此异常的每个地方都重复执行此操作。理想情况下,我希望在xml中声明要为异常使用的提供者。
最终,这个问题可以扩大,使我们考虑任何不是bean本身的运行时对象。
PS 我不怕在代码中硬编码对Spring的依赖关系。我使用Spring并希望拥抱它-而不是避免它。
示例代码:
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中声明了一个提供者bean。在这个例子中,为简单起见,值只是在xml中声明的。我有一个自定义异常需要从bean接收一些东西。如何将这样的bean注入到异常类中?显然,我不能将异常声明为Spring bean。appName只是一个简单的例子,它可以是任何其他内容。你可能会想知道为什么调用myException.getAppName()的假定调用者不会直接调用appNameProvider.getAppName()?因为这不是意图,例如每个异常中可能有不同的提供者等。
我想知道如何将bean注入到这样的异常中。我可以添加setter并在抛出异常时设置提供者。但我必须从外部(在我的应用程序代码中)知道要使用哪个提供者,并且我必须在想要抛出此异常的每个地方都重复执行此操作。理想情况下,我希望在xml中声明要为异常使用的提供者。
最终,这个问题可以扩大,使我们考虑任何不是bean本身的运行时对象。
PS 我不怕在代码中硬编码对Spring的依赖关系。我使用Spring并希望拥抱它-而不是避免它。
MyException
新实例的代码?我想知道是否可以通过构造函数传递一个 AppNameProvider 的引用... - JBert