天天看點

Spring三種方法的注解自動注入

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;
	}

}