gpt4 book ai didi

java - 如何将 Spring bean 注入(inject)到 Exception 中

转载 作者:搜寻专家 更新时间:2023-11-01 03:43:41 24 4
gpt4 key购买 nike

我在这里发现了类似的问题 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 中声明的提供者 bean。在示例中,为简单起见,该值只是在 xml 中声明。我有一个自定义异常需要从 bean 接收一些东西。如何将这样的 bean 注入(inject)到异常类中。我显然不能将异常声明为 Spring bean。 appName 只是一个简单的示例,它可以是任何其他内容。您可能想知道为什么 myException.getAppName() 的假设调用者不会简单地调用 appNameProvider.getAppName()?因为它不是故意的,例如每个异常等中可能有不同的提供者。

我想知道如何将 bean 注入(inject)到此类异常中。我可以添加 setter 并在异常抛出时设置提供者。但是我必须知道从外部(在我的应用程序代码中)使用哪个提供程序,并且我必须在我想抛出此异常的任何地方冗余地执行此操作。理想情况下,我想在 xml 中声明将哪个提供程序用于异常。

最终这个问题可以扩大,这样我们就可以考虑任何不是 bean 本身的运行时对象,而不是异常。

PS 我不害怕在代码中硬编码对 Spring 的依赖。我使用 Spring,我想拥抱它 - 而不是避免它。

最佳答案

  1. 在抛出异常的类中注入(inject)提供者
  2. 提供一个构造函数/setter 来将提供者设置为异常
  3. 抛出新的 MyException(provider)

关于java - 如何将 Spring bean 注入(inject)到 Exception 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8257717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com