관리 메뉴

MOMONOTE

의존성 주입 (DI), Bean에 대해 본문

Spring

의존성 주입 (DI), Bean에 대해

momo0503 2022. 11. 22. 20:02

간단히 생각하면, 다른 객체를 사용하는 것을 다른 객체에 의존한다
라고 한다. 어떤 객체 A 가 B객체를 이용하면 , A객체는 B객체의 기능에 의존한다. 

A객체는 B객체를 생성하고 , 라이프 사이클을 관리하고 A 객체에 의존
주입을 관리하는 무언가를 컨테이너라 부른다. 
개발자가 직접 제어하지 않고 컨테이너가 객체를 제어한다는 의미에서 
제어의 역전이라는 용어가 사용된다.

스프링 컨테이너는 빈 객체의 생성, 
초기화, 의존 주입 등 객체 관리를 위한 다양한 기능 제공하며, 
라이프사이클도 관리한다. 

@Configuration이 붙은  클래스는 스프링 설정으로 사용됨을 의미한다.
@Bean : 각 메서드에 @Bean을 붙이면 스프링 컨테이너에 자동으로 등록이 됩니다. @Bean(name = "name1")을 통해 빈의 이름을 변경할 수 있다. 이름 지정하지 않으면 메서드 이름이 빈의 이름으로 등

 

 

스프링 4버전 이상부터는 생성자를 통한 주입을 권장하고 있다. 

밑의 코드에서 Member 클래스는 이미 정의되어있습니다.

 

@Configuration
public class Config{


	//setter 통함 의존성 주입
	@Bean
	public Member member1() {
		Member meber1 = new Member(); 
		member1.setName("name1");
		member1.setPrinter(new PrintA());
	
		return member1;
	}
	
	
	//생성자 통한 의존성 주입
	@Bean(name ="member2")
	public Member member2() {
		return new Member("name2",new PrintA());
	}



}


어노테이션을 통한 의존성 주입 

@Component
public class Animal{

@value("야옹이")
private String name;

@Autowired
@Qualifier("member2")
private Member member;

}

@Configuration이 설정된 클래스파일이 필요가 없다. 

@Component를 통해 Animal 클래스를 스프링의 빈으로 등록한다. 

@Value("야옹이") name 변수의 기본값으로 야옹이 지정 

@Autowired 는 해당 클래스의 객체를 가져와 자동으로 연결한다. 스프링 컨테이너에 등록된 빈 중 사용할 수 있는 객체를 찾아 자동으로 연결해준다. 이때 @Qualifer 로 이름을 명확하게 지정해준다.

 

위의 코드에서 @Autowired 를 통해 member에  member2라는 객체를 주입한다. ( 의존성을 주입 )

'Spring' 카테고리의 다른 글

Could not resolve all files for configuration ':classpath'  (0) 2023.05.14
Comments