Java 使用SpringFactorybean模式-无bean返回空值?
我在SPRING中使用Factory模式,如本例所示 如果没有具有特定名称的bean 我得到异常org.springframework.beans.factory.NoSuchBean定义异常Java 使用SpringFactorybean模式-无bean返回空值?,java,spring,design-patterns,Java,Spring,Design Patterns,我在SPRING中使用Factory模式,如本例所示 如果没有具有特定名称的bean 我得到异常org.springframework.beans.factory.NoSuchBean定义异常 org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'XXX' is defined at org.springframework.beans.factory.support.Default
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'XXX' is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:549)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1095)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:277)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.config.ServiceLocatorFactoryBean$ServiceLocatorInvocationHandler.invokeServiceLocatorMethod(ServiceLocatorFactoryBean.java:367)
at org.springframework.beans.factory.config.ServiceLocatorFactoryBean$ServiceLocatorInvocationHandler.invoke(ServiceLocatorFactoryBean.java:356)
at com.sun.proxy.$Proxy24.createManualDepositProcess(Unknown Source)
如果我试图获取未定义的bean,比如printStrategyFactory.getStrategy(“NO_DEF”).print(doc),我会得到异常
在没有bean的情况下是否可能返回null?
谢谢大家! 如果您是像您发布的示例中那样进行自动连线,
@Autowired(required=false)
应该可以做到这一点
编辑:很抱歉一开始把你的问题弄错了,我刚刚在测试你发布的链接时发现了
@Autowired
注释,并想到了标准解决方案。错误在于我想得到的bean不是像printStrategyFactory.getStrategy(“NO_DEF”).print(doc);但这意味着您无论如何都会得到一个NullPointerException,如果即使返回null也无法加载此策略的bean,对吗?在这种情况下如何防止异常?printa4landscapestrategybean=printStrategyFactory.getStrategy(“NO_DEF”);您可以决定返回null。在工厂方法中使用try/catch捕获Spring的异常。我可以覆盖返回函数吗?不,我在示例中看到您引用了使用Spring的ServiceLocatoryFactoryBean
。虽然可以更改引发的异常,但无法更改查找失败时引发异常的行为。您需要用try/catch来包围调用查找的代码。