Spring的IOC中DI依赖注入自动装配注解方式@Autowired和@Resource的区别

    科技2025-12-26  8

    @Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired。 @Autowired采取的策略为按照类型注入。 public class UserService { @Autowired private UserDao userDao; } 如上代码所示,这样装配回去spring容器中找到类型为UserDao的类,然后将其注入进来。这样会产生一个问题,当一个类型有多个bean值的时 候,会造成无法选择具体注入哪一个的情况,这个时候我们需要配合着@Qualifier使用。 @Qualifier告诉spring具体去装配哪个对象。 public class UserService { @Autowired @Qualifier(name="userDao1") private UserDao userDao; } 这个时候我们就可以通过类型和名称定位到我们想注入的对象。 @Resource注解由J2EE提供,需要导入包javax.annotation.Resource。 @Resource默认按照ByName自动注入。 public class UserService { @Resource private UserDao userDao; @Resource(name="studentDao") private StudentDao studentDao; @Resource(type="TeacherDao") private TeacherDao teacherDao; @Resource(name="manDao",type="ManDao") private ManDao manDao; } ①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。 ②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。 ③如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。 ④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则 自动装配。
    Processed: 0.021, SQL: 9