2020. 8. 26. 22:05ㆍJava/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 File에 Beand 을 정의하지 않아
도 자동으로 등록된다
'Java > Spring' 카테고리의 다른 글
Spring - Component 자동주입 (0) | 2020.08.27 |
---|---|
Spring- Component Bean 기본 설정 (0) | 2020.08.27 |
Spring - JSR-250 어노테이션 (0) | 2020.08.25 |
Spring - Annotation을 통한 Bean 설정 (0) | 2020.08.24 |
Spring - Java를 이용한 주입(생성자,getter,autowire) (0) | 2020.08.20 |