1 @Autowired注解
@Autowired是Spring提供的自動注入的方法,該注解可以放在變量和方法上,在bean+傳回值類型的注解中,@Autowired還可以放在參數前;@Autowired預設的注入是根據類型注入,如果相同類型的bean有多個,可以配合@Qualifier使用,則會根據名字自動注入;除了配合@Qualifier使用之外,還可以在相同類型的多個bean中的其中一個加上@Primary注解,那麼根據類型注入就會第一注入有@Primary注解的bean。
示例代碼:
@Repository("stuDao1")
public class StudentDaoImpl1 implements StudentDao {
}
@Primary
@Repository("stuDao2")
public class StudentDaoImpl2 implements StudentDao {
}
@Service("stuService")
public class StudentService {
@Autowired //從IOC容器中找到StudentDao類型的bean加入到studentDao中,AutoWired注入不調用set方法
@Qualifier("stuDao")
private StudentDao studentDao;
//@Autowired //也可以把AutoWired注解放到set方法上,并且會調用set方法
public void setStudentDao(StudentDao studentDao) {
this.studentDao = studentDao;
}
}
2 @Resource
@Resource注解是Java規範(JSR250)提供的方法,該注解預設是根據bean的名字自動注入,如果沒有找到對應的名字,則會自動根據類型查找并注入,可以使用name和type來指定根據名字還是類型來查找;@Resource注解同樣可以使用@Primary。
示例代碼:
public class StudentService {
// @Resource(name="stuDao1") //根據名字查找bean
@Resource(type=StudentDao.class) //根據類型查找bean
private StudentDao studentDao;
// @Resource //放在方法上
public void setStudentDao(StudentDao studentDao) {
this.studentDao = studentDao;
}
}
3 @Inject
@Inject注解也是Java規範(JSR330)提供的方法,該注解預設是根據bean的類型自動注入,不過使用此注解需要導入javax-Inject.jar包;使用方法和@Autowired差不多一樣,也可以配合@Qualifier和@Primary使用。
javax-Inject.jar下載下傳位址
示例代碼
@Service("stuService")
public class StudentService {
// @Inject
// @Qualifier("stuDao2")
private StudentDao studentDao;
@Inject
@Qualifier("stuDao2")
public void setStudentDao(StudentDao studentDao) {
this.studentDao = studentDao;
}
}