可以为通过组件扫描定义的bean提供自定义限定符吗?

时间:2013-01-30 07:48:06

标签: spring spring-mvc

记住以下bean定义:

<bean id="bean1" class="com.mycompany.SomeClass">
   <property name="prop1" value="value1">
   <property name="prop2" value="value2">
</bean>
<bean id="bean2" class="com.mycompany.SomeClass">
   <property name="prop1" value="value3">
   <property name="prop2" value="value4">
</bean>

在基于注释的环境中,我可以使用@Qualifier注释来区分这两者:

@Autowired
@Qualifier("bean1")
private SomeClass first;

@Autowired
@Qualifier("bean2")
private SomeClass second;

如果我不想在XML配置文件中声明bean,而是使用@Component Annotation,我可以实现相同的功能吗?我找不到任何方法来使用@Autowired注释注入同一类的两个不同的bean,用不同的参数初始化。

感谢。

4 个答案:

答案 0 :(得分:1)

来自javadoc

public abstract String value
The value may indicate a suggestion for a logical component name, to be turned into a Spring bean in case of an autodetected component.

答案 1 :(得分:1)

只是@Component("myBeanName")

答案 2 :(得分:0)

如果你使用@Component,你如何区分SomeClass中的bean1和bean2?如果要避免使用XML,则必须使用Java配置类来定义具有不同属性的这两个bean。

请参阅Spring Java Config

答案 3 :(得分:0)

以下是使用Java @Configuration

实现这一目标的方法
@Configuration 
public class Config {

    @Bean
    public SomeClass bean1() {
        SomeClass s = new SomeClass();
        s.setProp1(value1);
        s.setProp2(value2);
        return s;
    }

    @Bean
    public SomeClass bean2() {
        SomeClass s = new SomeClass();
        s.setProp1(value3);
        s.setProp2(value4);
        return s;
    }

}