问题描述
现在有UserRepositoryImpl,需要为其注入依赖。
@Repository
public class UserRepositoryImpl implements UserRepository {
@Autowired
private JdbcTemplate jdbcTemplate;
}
在本项目中的IOC容器中,JdbcTemplate有两个实现。
@Bean(name="primaryJdbcTemplate")
public JdbcTemplate primaryJdbcTemplate (
@Qualifier("primaryDataSource") DataSource dataSource ) {
return new JdbcTemplate(dataSource);
}
@Bean(name="secondaryJdbcTemplate")
public JdbcTemplate secondaryJdbcTemplate(
@Qualifier("secondaryDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
方法一:使用@Qualifier限定
在类UserRepositoryImpl中进行修改,通过@Qualifier指定注入依赖的实现。
@Repository
public class UserRepositoryImpl implements UserRepository {
@Autowired
@Qualifier("primaryJdbcTemplate")
private JdbcTemplate jdbcTemplate;
}
方法二:利用@Autowired可以byName匹配Bean的特性
将UserRepositoryImpl中将待注入的成员变量的名称修改为IOC容器中Bean的id。在注入依赖时,IOC容器将会按byName的方式为其匹配Bean并且注入依赖。
@Repository
public class UserRepositoryImpl implements UserRepository {
@Autowired
private JdbcTemplate primaryJdbcTemplate;
}
方法三:使用@Primay
为Bean增加@Primary的注解,在@Autowired遇到多实现的接口时,IOC容器会将被@Primary标注的Bean注入。
@Primary
@Bean(name="primaryJdbcTemplate")
public JdbcTemplate primaryJdbcTemplate (
@Qualifier("primaryDataSource") DataSource dataSource ) {
return new JdbcTemplate(dataSource);
}
@Bean(name="secondaryJdbcTemplate")
public JdbcTemplate secondaryJdbcTemplate(
@Qualifier("secondaryDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}