프로그래밍/Spring & Spring boot

08 Spring : annotation 의존성 주입 정리

pupu91 2022. 9. 1. 20:41
반응형

 

 

@Autowired

: 주입하려고 하는 객체의 타입이 일치하는 객체를 자동으로 주입

 필드, 생성자, setter에 사용가능

 필드와 setter에 사용할 시 반드시 기본 생성자가 있어야 함.

생성자가 한 개일때는 @Autowired 생략 가능하지만 한 개 이상일때는 꼭 붙여서 사용

 


 

@Primary

:  @Autowired으로 동일한 타입의 여러 빈을 찾게 되는 경우  자동으로 우선적으로 설정 됨.

  단, 동일한 클래스 중 한 개만 @Primary를 사용할 수 있음

 

 


 

@Qualifier

: @Primary 와 동일한 기능이지만, @Primary 보다 우선권을 갖짐

 

필드 주입을 이용하는 경우(생성자가 없어야 함)
@Autowired
@Qualifier("charmander") =>  @Qualifier("빈이름작성") 
private Pokemon pokemon;

생성자 주입을 이용하는 경우 @Qualifier를 매개변수에 작성
@Autowired
	public PokemonService(@Qualifier("squirtle")Pokemon pokemon) {  
		this.pokemon = pokemon;
	}

 

반응형

 

 

@Resource ( Java 제공annotation)

: 주입하려고 하는 객체의 이름(id)일 일치하는 객체를 자동으로 주입

  필드와 메서드에 사용가능(기본생성자 필요), 생성자에는 불가

 @Autowired 은 타입을 이용해서 의존성을 주입한다면, @Resource는 빈 name으로 의존성 주입

 

@Resource 적용 순서

   : 기본적으로 name으로 주입 받음

     빈의 이름이 일치하지 않으면 타입으로 주입 받지만, 동일한 타입의 빈이 있는 경우에는 주입 받지 못함.

 

 

 


 

@Inject (Java 제공annotation)

: 주입하려고 하는 객체의 타입이 일치하는 객체를 자동으로 주입(@Autowired와 유사)

  필드, 생성자, setter 주입 가능

 

필드 주입
@Inject 
@Named("pikachu")
private Pokemon pokemon;

생성자 주입
@Inject
@Named("pikachu") 생성자 위와 파라미터에서도 가능
public PokemonService(@Named("pikachu") Pokemon pokemon) {
											
		this.pokemon = pokemon;
	}
    
setter 주입 
@Inject
public void setPokemon(@Named("pikachu")Pokemon pokemon) {
		this.pokemon = pokemon;
}
	
public void pokemonAtteck() {
		pokemon.attack();
	}
}
반응형