- Bean依赖注入的注解,主要是使用注解的方式替代 xml 的
<property>标签完成属性的注入操作
<bean id ="" class="">
<property name ="" value=""/>
<property name ="" ref=""/>
</bean>
- Spring主要提供如下注解,用于在 Bean 内部进行属性注入的:
| 属性注入注解 | 描述 |
|---|---|
| @Value | 使用在字段或方法上, 用于注入普通数据 |
| @Autowire | 使用在字段或方法上, 用于根据类型(byType)注入引用数据 |
| @Qualifer | 使用在字段或方法上, 结合@Autowire, 根据名称注入 |
| @Resource | 使用在字段或方法上, 根据类型或名称进行注入 |
- 通过 @Value 直接注入普通属性(本质就是直接写死属性值,基本没啥用处)
@Value("张三")
private String username;
@Value("张三")
public void setUsername(String username){
System. out .println(username);
}
- 通过 @Value 注入 properties 文件中的属性(这个还稍微有点点用)
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.username}")
public void setUsername(String username){
System. out .println(username);
}
加载properties文件
<context:property-placeholder location ="classpath:jdbc.properties"/>
- @Autowired注解,用于根据类型进行注入
// 使用在属性上直接注入
@Autowired
private UserDao userDao;
// 使用在方法上直接注入
@Autowired
public void setUserDao(UserDao userDao){
System. out .println(userDao);
}
// 使用在方法上直接注入, 同一类型的多个bean都会被保存在list中
@Autowired
public void setUserDaoList(List<UserDao> userDaoList){
System. out .println(userDaoList);
}
当容器中同一类型的 Bean 实例有多个时,会尝试自动根据名字进行匹配;
当容器中同一类型的 Bean 实例有多个时,且名字与被注入 Bean 名称不匹配时会报错
// 匹配当前 Bean
@ Repository("userDao")
public class UserDaoImpl implements UserDao{}
@ Repository("userDao2")
public class UserDaoImpl2 implements UserDao{}
@Qualifier配合 @Autowired 可以完成根据名称注入 Bean 实例,使用 @Qualifier 指定名称
@Autowired
@Qualifier("userDao2")
private UserDao userDao;
@Autowired
@Qualifier("userDao2")
public void setUserDao(UserDao userDao){
System. out .println(userDao);
}
@Resource注解既可以根据类型注入,也可以根据名称注入,无参就是根据类型注入,有参数就是根据名称注入
PS:@Resource 注解存在于javax.annotation包中,Spring 对其进行了解析
@Resource
private UserDao userDao;
@Resource(name = "userDao2")
public void setUserDao(UserDao userDao){
System. out .println(userDao);
}