首先可以确定,@Autowired和@Resource 这两个注解都是可以用来实现Bean的依赖注入,@Qualifier注解需结合@Autowired注解一起使用。
一、@Resource 注解有两个属性,name和type。
如果没有指定name和type,那么将在容器中查找与属性名称相同的bean实现依赖注入,如果没找到,则通过属性类型查询容器中对应的bean。
指定name值,将通过name值查询容器中对应的bean,没找到,服务启动抛异常。
指定type值,将通过type值查询容器中对应的bean,没找到,服务启动抛异常。
同时指定name和type值,将通过name和type值查询容器中对应的bean,没找到,服务启动抛异常。
二、@Autowired 按照类型进行装配
如果没找到,服务启动抛异常。可指定required属性为false,则允许装配不成功,服务可正常启动。
如果接口由多个实现,根据业务想要注入某个指定Bean,可结合@Qqualifier注解同时使用,@Qqualifier可制定容器中Bean的名称。如下:
@Autowired
@Qualifier(name="businessDao")
private BusinessDao businessDao;
另外,@Resource是J2EE提供的注解,@Autowired和@Qualifier 由spring提供。如果系统想减少spring依赖,项目可以统一使用@Resource注解。