Spring中@Autowired和@Resource的区别及详细使用
  TEZNKK3IfmPf 2023年11月13日 29 0

@Autowired是Spring提供的
@Resource是J2EE提供的

@Autowired:
获得对象的方式称之为byType(通过类型),如果需要指定名字,那么需要使@Qualifier(“bean的名字”)

在spring容器中寻找注解标定的类型的对象

  • 1.没有任何类型匹配的对象-------------发生异常
  • 2.有且只有一个匹配类型的对象-------注入成功
  • 3.有两个以及两个以上匹配类型的对象
    • 多个匹配类型对象中有匹配当前变量名为对象名称的 —注入成功
    • 多个匹配类型对重中没有匹配当前变量名为对象名称的 —注入失败

@Autowired 默认第一按照byType(类的类型),第二byName(l类名\类ID)来加载类,所以当存在类型相同,多个beanname时,想注入某个类,就必须指定根据什么beanName查找,不用@Qualifier注解指定,则会以变量名为为beanName进行查找;


@Resource

获得对象的方式称之为byName(通过名称)

1.有和指定要获得的名称的对象匹配的Spring容器中的对象

  • 类型也匹配,注入成功
  • 类型不匹配,注入失败

2.没有和指定要获得的名称的对象匹配的Spring容器中的对象

  • 如果有唯一一个类型匹配的对象,则注入成功
  • 如果没有唯一匹配类型对象,则注入失败

示例代码:

@Service
public class UserService implements IUserService {
    public void query() {
        System.out.println("hello world");
    }
}
@Service("userService2")
public class UserService2 implements IUserService {
    @Override
    public void query() {
        System.out.println("hello code");
    }
}


//-----------------------------------------------------------------------------------


@Autowired
private IUserService userService;
@GetMapping(value = "/query")
public void test(){
    userService.query();
    // 输出:hello world。会以变量名为为beanName进行查找
}

@Autowired
@Qualifier(value = "userService2")
private IUserService userService;
@GetMapping(value = "/query")
public void test(){
    userService.query();
    // 输出:hello code
}

@Autowired
private IUserService userService2;
@GetMapping(value = "/query")
public void test(){
     userService2.query();
	 //hello code
}


//-------------------------------------------------------------------------------


@Resource
private IUserService userService;
@GetMapping(value = "/query")
public void test(){
    userService.query();
    // hello world
}

@Resource(name = "userService")
private IUserService userService;
@GetMapping(value = "/query")
public void test(){
	userService.query();
	//hello world
}


@Resource
private IUserService userService2;
@GetMapping(value = "/query")
public void test(){
    userService2.query();
    //hello code
}

@Resource(name = "userService2")
private IUserService userService;
@GetMapping(value = "/query")
public void test(){
    userService.query();
    //hello code
}

@Resource(type = UserService2.class)
private IUserService userService2;
@GetMapping(value = "/query")
public void test(){
     userService2.query();
     //hello code
 }

@Resource(type = UserService2.class)
private IUserService entity;
@GetMapping(value = "/query")
public void test(){
     entity.query();
     //hello code
}

永远的 Hello World

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月17日   46   0   0 JSpspring
TEZNKK3IfmPf