在spring开发中,经常会使用注解@Autowired和@Resouce实现类的注入,那么用法和区别简单分析一下。
用法:
- @Autowired:在Controller中注入service的时候使用@Autowired自动注入,若有多个实现则通过@Qualifier(“类名且首字母小写”)来指定注入哪一个。
- @Resouce:在Controller中注入service的时候使用@Resource自动注入,若有多个实现则通过@Resource(type = 类名.class)来指定注入哪一个。或@Resource(name=“名称”)
区别:
- @Autowired:@Autowired是Spring的注解,默认按照byType方式进行bean匹配,type是bean的Class的类型;且默认情况下要求依赖对象必须存在,若允许为null,则设置@Autowired(required=false)
- @Resouce:@Resource是J2EE的注解,默认按照byName方式进行bean匹配,name是bean的id或name;
示例
public interface HelloService {
public String name();
}
@Service
public class Hello1ServiceImpl implements HelloService {
@Override
public String name() {
System.out.println("Hello1");
return "Hello1";
}
}
@Service
public class Hello2ServiceImpl implements HelloService {
@Override
public String name() {
System.out.println("Hello2");
return "Hello2";
}
}
@Service("hello3Service")
public class Hello3ServiceImpl implements HelloService {
@Override
public String name() {
System.out.println("Hello3");
return "Hello3";
}
}
@RestController
public class HelloController {
@Autowired
@Qualifier("hello1ServiceImpl")
private HelloService helloService ;
// 或
// @Resource(type = Hello2ServiceImpl.class)
// 或
// @Resource(name= "hello3Service")
@RequestMapping("/name")
public String name(){
return helloService .name();
}
}