文章目录
- 一、Spring Bean的依赖注入注解
- 1. 通过@Value直接注入普通属性
- 2. 通过@Value注入properties文件中的属性
- 3. @Autowired注解,用于根据类型进行注入
- 4. @Qualifier配合@Autowired可以完成根据名称注入Bean实例,使用@Qualifier指定名称
- 5. @Resource注解既可以根据类型注入,也可以根据名称注入,无参就是根据类型注入,有参数就是根据名称注入
一、Spring Bean的依赖注入注解
Bean依赖注入的注解,主要是使用注解的方式替代xml的 < property> 标签完成属性的注入操作
<bean id="" class=""> <property name="" value=""/>
<property name="" value=""/>
<property name="" ref=""/>
</bean>
Spring主要提供如下注解,用于在Bean内部进行属性注入的:
1. 通过@Value直接注入普通属性
// 方式一
@Value("haohao")
private String username;
// 方式二
@Value("haohao")
public void setUsername(String username){
System.out.println(username);
}
2. 通过@Value注入properties文件中的属性
加载properties文件
<context:property-placeholder location="classpath:jdbc.properties"/>
// 方式一
@Value("${jdbc.username}")
private String username;
// 方式二
@Value("${jdbc.username}")
public void setUsername(String username){
System.out.println(username);
}
3. @Autowired注解,用于根据类型进行注入
// 使用在属性上直接注入
@Autowired
private UserDao userDao;
// 使用在方法上直接注入
@Autowired
public void setUserDao(UserDao userDao){
System.out.println(userDao);
}
// 使用在方法上直接注入,可以注入同一类型的多个bean,例如userDao、userDao2...
@Autowired
public void yyy(List<UserDao> userDaoList){
System.out.println(userDaoList);
}
当容器中同一类型的Bean实例有多个时,会尝试自动根据名字进行匹配:
// 匹配当前Bean
@Repository("userDao")
public class UserDaoImpl implements UserDao{}
@Repository("userDao2")
public class UserDaoImpl2 implements UserDao{}
4. @Qualifier配合@Autowired可以完成根据名称注入Bean实例,使用@Qualifier指定名称
@Autowired
@Qualifier("userDao2")
private UserDao userDao;
@Autowired
@Qualifier("userDao2")
public void setUserDao(UserDao userDao){
System.out.println(userDao);
}
5. @Resource注解既可以根据类型注入,也可以根据名称注入,无参就是根据类型注入,有参数就是根据名称注入
@Resource
private UserDao userDao;
@Resource(name = "userDao2")
public void setUserDao(UserDao userDao){
System.out.println(userDao);
}
PS:@Resource注解存在与 javax.annotation 包中,Spring对其进行了解析