java之SpringMVC : Variables in Annotations
wayfarer
阅读:31
2023-08-02 09:11:20
评论:0
我定义了以下 Controller :
@Controller
@RequestMapping("/test")
public class MyController extends AbstractController
{
@Autowired
public MyController(@Qualifier("anotherController") AnotherController anotherController))
{
...
}
}
我想知道是否可以在 @Qualifier 注释中使用变量,以便我可以为不同的 .properties 文件注入(inject)不同的 Controller ,例如:
@Controller
@RequestMapping("/test")
public class MyController extends AbstractController
{
@Autowired
public MyController(@Qualifier("${awesomeController}") AnotherController anotherController))
{
...
}
}
每当我尝试我得到:
org.springframework.beans.factory.NoSuchBeanDefinitionException:
No matching bean of type [com.example.MyController] found for dependency:
expected at least 1 bean which qualifies as autowire candidate for this
dependency. Dependency annotations:
{@org.springframework.beans.factory.annotation.Qualifier(value=${awesomeController})
我在我的 config.xml 文件中包含了以下 bean:
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:config/application.properties</value>
</list>
</property>
</bean>
但是除非我在 xml 文件中显式声明该 bean,否则该 bean 不起作用。
如何使用注释来做到这一点?
请您参考如下方法:
首先,我认为让依赖注入(inject)依赖于配置属性是不好的做法。尝试执行此操作可能方向错误。
但是要回答您的问题:访问 placeHolder 属性需要完成依赖注入(inject)。为确保它是正确的,您可以将访问该属性的代码放在 @PostContruct
注释方法中。
您需要使用 getBean()
方法从 applicationContext 中手动检索 bean。
@Value("${awesomeController}")
private String myControllerName;
@PostConstruct
public void init(){
AnotherController myController = (AnotherController) appContext.getBean(myControllerName);
}
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。