Spring - Component 자동주입

2020. 8. 27. 22:22Java/Spring

반응형

Component  빈 객체에도 @Autowired,@Qualifier,생성자 등을 이용해 자동주입이 가능하다.

 

1. @Autowired

@Autowired는 타입을 통해서 자동주입을 한다. 

@Component
public class TestBean1 {

	@Autowired
	private DataBean1 data3;
}

위와 같이 @Autowired를 선언하면 data3에는 DataBean1 객체가 자동으로 주입이 된다.

 

2. @Qualifier

타입이 아닌 이름을 통해서도 주입이 가능하다.

@Component("obj1")
public class DataBean2 {

}

 

위와 같이 @Component("obj1")로 설정이 되어있으면 아래와 같이 @Qualifier를 이용해 obj1로 호출이 가능하다.

@Autowired
@Qualifier("obj1")
private DataBean2 data4;

하지만 하나의 객체당 하나의 Component만 선언 가능하므로 이름 호출은 큰 의미가 없다. 같은 빈 객체를 여러개 생성하고 싶으면 Beans.xml 또는 BeanConfigClass에 직접 빈 객체를 선언해주는게 좋다.

 

3. 생성자

생성자를 통한 주입에서는 아래 코드와 같이 객체는 별도의 설정 없이 타입을 통해서 자동 주입이 되고, 자료형은 @Value를 통해 값을 주입한다.

@Component
public class TestBean2 {

	private int data1;
	private String data2;
	private DataBean1 data3;
	private DataBean2 data4;
	
	public TestBean2(@Value("100") int data1,@Value("문자열") String data2,DataBean1 data3,DataBean2 data4) {
		this.data1 = data1;
		this.data2=data2;
		this.data3=data3;
		this.data4=data4;
	}

	public int getData1() {
		return data1;
	}

	public String getData2() {
		return data2;
	}

	public DataBean1 getData3() {
		return data3;
	}

	public DataBean2 getData4() {
		return data4;
	}
	
}

MainClass

public class MainClass {

	public static void main(String[] args) {
		AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(BeanConfigClass.class);

		TestBean1 t1 = ctx.getBean(TestBean1.class);
		System.out.println("t1 getData3()=>"+t1.getData3());
		System.out.println("t1 getData4()=>"+t1.getData4());
		System.out.println("t1 getData5()=>"+t1.getData5());
		
		TestBean2 t2 = ctx.getBean(TestBean2.class);
		
		System.out.println("t2 getData1()=>"+t2.getData1());
		System.out.println("t2 getData2()=>"+t2.getData2());
		System.out.println("t2 getData3()=>"+t2.getData3());
		System.out.println("t2 getData4()=>"+t2.getData4());
		ctx.close();
	}

}

반응형

'Java > Spring' 카테고리의 다른 글

Spring - execution 사용법  (0) 2020.08.30
Spring - AOP  (0) 2020.08.29
Spring- Component Bean 기본 설정  (0) 2020.08.27
Spring - Component  (0) 2020.08.26
Spring - JSR-250 어노테이션  (0) 2020.08.25