Bean依赖注入的注解,主要是使用注解的方式替代xml的 < property> 标签完成属性的注入操作
<bean id="" class=""> <property name="" value=""/>
<property name="" value=""/>
<property name="" ref=""/>
bean>
Spring主要提供如下注解,用于在Bean内部进行属性注入的:
// 方式一
@Value("haohao")
private String username;
// 方式二
@Value("haohao")
public void setUsername(String username){
System.out.println(username);
}
加载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);
}
// 使用在属性上直接注入
@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{}
@Autowired
@Qualifier("userDao2")
private UserDao userDao;
@Autowired
@Qualifier("userDao2")
public void setUserDao(UserDao userDao){
System.out.println(userDao);
}
@Resource
private UserDao userDao;
@Resource(name = "userDao2")
public void setUserDao(UserDao userDao){
System.out.println(userDao);
}
PS:@Resource注解存在与 javax.annotation 包中,Spring对其进行了解析