一、@Resourcee注解实现⾃动注⼊(反射)
1、默认根据属性字段名称查找对应的 bean 对象 (属性字段的名称与bean标签的id属性值相等)
2、如果属性字段名称未找到,则会通过类型(Class类型)查找
3、属性可以提供set⽅法,也可以不提供set⽅法
4、注解可以声明在属性级别 或 set⽅法级别
5、可以设置name属性,name属性值必须与bean标签的id属性值⼀致;如果设置了name属性值,就只 会按照name属性值查找bean对象
6、当注⼊接⼝时,如果接⼝只有⼀个实现则正常实例化;如果接⼝存在多个实现,则需要使⽤name 属性指定需要被实例化的bean对象
代码示例:
1. 默认根据属性字段名称查找对应的bean对象 (属性字段的名称与bean标签的id属性值相等)
/** *
@Resource注解实现⾃动注⼊(反射)
* 默认根据属性字段名称查找对应的bean对象 (属性字段的名称与bean标签的id属性值相等)
*/
public class UserService {
@Resource
private UserDao userDao; // 属性字段的名称与bean标签的id属性值相等
public void setUserDao(UserDao userDao)
{ this.userDao = userDao; }
public void test() {
// 调⽤UserDao的⽅法
userDao.test(); } }
2. 如果属性字段名称未找到,则会通过类型(Class类型)查找
@Resource注解实现⾃动注⼊(反射) , 如果属性字段名称未找到,则会通过类型(Class类型)查找
public class UserService {
// 当在配置⽂件中属性字段名(ud)未找到,则会查找对应的 class(UserDao类型)
@Resource
private UserDao ud;
public void setUd(UserDao ud) {
this.ud = ud;
}
public void test() {
// 调⽤UserDao的⽅法
ud.test();
}
3. 属性可以提供set⽅法,也可以不提供set⽅法
@Resource注解实现⾃动注⼊(反射) ,属性可以提供set⽅法,也可以不提供set⽅法
public class UserService {
@Resource
private UserDao userDao; // 不提供set方法
public void test() {
// 调⽤UserDao的⽅法
userDao.test(); }
4. 注解可以声明在属性级别 或 set⽅法级别
@Resource注解实现⾃动注⼊(反射), 注解可以声明在属性级别 或 set⽅法级别
public class UserService {
private UserDao userDao;
@Resource // 注解也可设置在set⽅法上
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void test() {
// 调⽤UserDao的⽅法
userDao.test(); } }
5. 可以设置name属性,name属性值必须与bean标签的id属性值⼀致;如果设置了name属性值,就 只会按照name属性值查找bean对象
@Resource注解实现⾃动注⼊(反射) , 可以设置name属性,name属性值必须与bean的id属性值⼀致; 如果设置了name属性值,就只会按照name属性值查找bean对象
public class UserService {
@Resource(name = "userDao") // name属性值与配置⽂件中bean标签的id属性值⼀致
private UserDao ud;
public void test() {
// 调⽤UserDao的⽅法
ud.test(); }