gpt4 book ai didi

java - SpringMVC : Variables in Annotations

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:52:54 28 4
gpt4 key购买 nike

我定义了以下 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);
}

关于java - SpringMVC : Variables in Annotations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15812847/

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