自动装配同一类的两个不同的bean

Noa*_*evo 33 java spring annotations

我有一个包装连接池的类,该类从spring配置获取其连接细节,如下所示:

<bean id="jedisConnector" class="com.legolas.jedis.JedisConnector" init-method="init" destroy-method="destroy">
    <property name="host" value="${jedis.host}" />
    <property name="port" value="${jedis.port}" />
</bean>
Run Code Online (Sandbox Code Playgroud)

此bean稍后在服务中使用,并使用@Autowire注释自动装配.

我的问题是,我如何复制这个bean并给它不同的连接细节,然后@Autowire在服务中.意思除了上面我还会:

<bean id="jedisConnectorPOD" class="com.legolas.jedis.JedisConnector" init-method="init" destroy-method="destroy">
    <property name="host" value="${jedis.pod.host}" />
    <property name="port" value="${jedis.pod.port}" />
</bean>
Run Code Online (Sandbox Code Playgroud)

并在服务中:

@Autowired //bean of id jedisConnector
JedisConnector beanA;

@Autowired //bean of id jedisConnectorPOD
JedisConnector beanB;
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 40

@Autowired
@Qualifier("jedisConnector")
JedisConnector beanA;

@Autowired
@Qualifier("jedisConnectorPOD")
JedisConnector beanB;
Run Code Online (Sandbox Code Playgroud)


ska*_*man 39

你可以结合@Autowired使用@Qualifier,但在这种情况下代替@Autowired,我建议使用@Resource:

@Resource(name="jedisConnector")
JedisConnector beanA;

@Resource(name="jedisConnectorPOD")
JedisConnector beanB;
Run Code Online (Sandbox Code Playgroud)

甚至更简单:

@Resource
JedisConnector jedisConnector;

@Resource
JedisConnector jedisConnectorPOD;
Run Code Online (Sandbox Code Playgroud)

  • 第二个仅在调试符号可用时有效. (4认同)