Spring - Component

2020. 8. 26. 22:05Java/Spring

반응형

@Component 어노테이션을 사용하면 Bean Configuration 파일에 Bean을 등록하지 않아도 자동으로 등록된다.

 

 

Bean 객체로 사용할 클래스(TestBean1)에 @Component 을 붙여준다.

package cookingcoding.beans;

import org.springframework.stereotype.Component;

@Component
public class TestBean1 {

}

@Component를 붙여주면 해당 객체는 자동으로 Bean 객체로 등록 될 준비가 된다.

 

해당 빈 객체를 가져오기 위해서 BeanConfigClass 클래스에서 다음 설정을 추가해준다.

@ComponentScan(basePackages = "cookingcoding.beans")

public class BeanConfigClass {

	
}

basePackages를 통해서 원하는 패키지를 검색하고 해당 패키지에 있는 객체 중 @Component가 있는 객체를 빈 객체로 등록한다.

 

cookingcoding.beans 패키지에 TestBean1, TestBean2 객체가 @Component이 정의되어 있다면 다른 별도의 설정 없이 두 객체를 자동으로 빈 객체로 등록한다.

 

@ComponentScan(basePackages = {"cookingcoding.beans","cookingcoding.beans2"})

 

두개 이상의 패키지는 위와 같이 등록 가능하다.

 

이를 beans.xml 파일에서 등록하기 위해서는 아래와 같이 태그를 작성한다.

<context:component-scan base-package="cookingcoding.beans"/>
<context:component-scan base-package="cookingcoding.beans2"/>

@Component 어노테이션은 빈 객체 생성의 이름을 설정 가능하다.

@Component("java")
public class TestBean3 {

}

 위와 같이 설정하면 TestBean3은 java라는 이름으로 호출 가능하다.

 

한 객체당 하나의 이름만 설정 가능하다. 같은 타입을 갖는 다른 이름의 빈 객체를 설정하긴 위해서는 BeanConfigClass 파일에 @Bean을 통해서 직접 설정하거나 beans.xml에 설정을 해줘야 한다.


각 객체를 호출하는 MainClass

public class MainClass {

	public static void main(String[] args) {
		ClassPathXmlApplicationContext ctx1 = new ClassPathXmlApplicationContext("cookingcoding/config/beans.xml");
		TestBean1 t1 = ctx1.getBean(TestBean1.class);
		System.out.println("t1 =>"+t1);
		TestBean2 t2 = ctx1.getBean(TestBean2.class);
		System.out.println("t2 =>"+t2);
		TestBean3 t3 = ctx1.getBean(TestBean3.class);
		TestBean3 t4 = ctx1.getBean("java",TestBean3.class);
		System.out.println("t3=>"+t3);
		System.out.println("t4=>"+t4);
		ctx1.close();
		
		AnnotationConfigApplicationContext ctx2 = new AnnotationConfigApplicationContext(BeanConfigClass.class);
		TestBean1 z1 = ctx2.getBean(TestBean1.class);
		System.out.println("z1=>"+z1);
		TestBean2 z2 = ctx2.getBean(TestBean2.class);
		System.out.println("z2=>"+z2);
		TestBean3 z3 = ctx2.getBean(TestBean3.class);
		System.out.println("z3=>"+z3);
		TestBean3 z4 = ctx2.getBean("java",TestBean3.class);
		System.out.println("z4=>"+z4);
		ctx2.close();
	}

}

- @Bean : 개발자가 Class의 코드를 수정할 수 없는 경우

               같은 클래스 타입의 Bean을 여러 개 등록할 경우

- @Component : 개발자가 Class의 코드를 수정할 수 있는 경우

 

 

- @Component 사용하면 Bean Configuration FileBeand 을 정의하지 않아

도 자동으로 등록된다

             

반응형