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); 
} 


标签:springMVC
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号