1 minute read

★ 자동 의존 객체 주입 스프링 설정파일에서 constructor-arg나 property를 사용하지 않아도 스프링 컨테이너가 해당되는 타입의 객체를 자동으로 주입해주는 기능 @Autowired나 @Resource 어노테이션으로 쉽게 구현할 수 있다.

★@Autowired 의존 객체가 필요한 클래스의 생성자에 @Autowired를 붙여준다 그 후 스프링 설정파일에 를 넣어 준다. context네임스페이스도 필요한데 이런건 복붙하자

★@Autowired의 @Qualifier(“~”) 스프링 설정파일의 동일한 객체가 2개 이상일때 Autowired하지 못하고 Exception이 발생한다. 이런 경우에는 context.xml파일의 빈 객체 생성 시 속성을 추가해, 별명?을 지어준 후에 해당 객체의 프로퍼티에 @Qualifier를 사용해 주면 결론적으로 어떤 인스턴스 하나를 매핑할 수 있다.

<bean id="wordDao1" class="dao.WordDao">
	<qualifier value="usedDao"/>
</bean>
해준 후 이 객체가 주입될 객체에서
@Autowired
@Qualifier("usedDao")
WordDao wordDao;

★@Autowired의 속성 중 required를 false로 설정하면 의존객체를 자동 주입할 떄 주입될 객체가 존재하지 않는 경우에 터지는 Exception을 막을 수 있다. 물론 잘 안씀

★생성자에 어노테이션을 붙일때는 그냥 붙이면 되지만 프로퍼티나 setter에 붙이고 싶은 경우에는 디폴트 생성자를 하나 만들어 줘야 한다. 일단 생성은 하고 set해줘야 하기 때문 ★@Resource @Autowired는 객체의 타입을 보고 자동으로 주입한다. 반면에 @Resource는 객체의 타입이 아니라 객체의 id값을 본다. 단 @Resource는 생성자에는 쓰지 못하고 프로퍼티나 메소드에만 쓸 수 있다. 역시 빈 생성자 하나 필요하다.

★@Autowired 작동순서
	1. 타입이 같은 bean객체 검색
	@Qualifier가 정의되어 있다면 그 값을 갖는 bean객체를 검색
2. 타입이 같은 bean객체가 두개 이상이면
	@Qualifier로 지정한 bean객체를 찾아 주입
	@Qualifier로 지정한 객체가 없으면 @Qualifier에 등록된 이름갚과
	id값이 같은 bean객체를 찾음
3. 위에서 모두 매치되지 않는다면 예외발생
	@Autowired(required=false)로 예외 방지가능

★@Resource는 bean의 이름을 검색하여 자동 주입(생성자에는 적용x) 디폴트 생성자를 만들어 줘야 한다.

★@Resource 적용 순서 1. name속성에 지정한 bean객체를 찾는다 2. 없으면 1. 동일 타입의 bean객체를 찾음 2. 동일 타입의 bean객체가 2개이상일 경우 같은 이름의 bean을 찾음 3. 없다면 @Qualifier를 이용하여 bean객체를 찾음

★@Inject @Autowired와 거의 비슷하지만 @Inject는 @Autowired의 required의 속성이 없다는것 뿐 사용법은 @Inject @Named(value=”bean객체의 id”)

★명시적 주입이 자동주입보다 우선순위가 높다

Categories:

Updated: