* 제공 : spring framework
import org.springframework.stereotype.Component;
* 설명 :
- 스프링에게 해당 클래스가 스프링에서 관리해야 하는 대상(Bean)이라는 것을 알려준다.
- 즉, Bean 클래스를 지정하여 Bean을 IoC 컨테이너에 등록한다.
- 개발자가 직접 생성한 클래스를 Bean 으로 등록한다. (@Bean과 확연한 차이점)
- @Component을 확장하여 @Service, @Controller, @Repository 등이 생겨났다.
- @Component는 모양을 바꾸거나 다른 어노테이션을 추가로 붙여 사용할 수도 있다.
Bean ID 지정하기
|
@Component("ID로 지정할 이름")
@Component 만 사용한다면 자동적으로 클래스의 이름을 ID로 사용 (앞글자는 소문자로 바뀜. DogClassName -> dogClassName) |
@Lazy
|
Bean이 사용될 때 객체를 생성한다.
(일반적으로는 ApplicationContext 객체가 생성될때 Bean 도 생성) |
@Scope
|
[Spring] @Component 애노테이션 및 함께 사용하는 애노테이션 정리
[Spring] @Component 애노테이션 및 함께 사용하는 애노테이션 정리 스프링 빈 설정 XML 파일에 나 자바 @Configuration 클래스에서 @Bean을 붙여 빈을 등록하던 것처럼 빈 클래스에 @Component 애노테이션..
atoz-develop.tistory.com
# 간단한 예제
*PetC 클래스
@Component // 스프링에게 PetC를 Bean으로 등록할 것이라고 알려줌.
@Data
public class PetC {
@Setter (onMethod_ = @Autowired)
private Cat cat;
}
*Cat 클래스
@Component // 스프링에게 Cat을 Bean으로 등록할 것이라고 알려줌.
@Data
public class Cat {
}
*root-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- @Component로 지정된 것들을 찾는다. -->
<context:component-scan base-package="org.test.sample"></context:component-scan>
</beans>
### 참고 ###
@Component 가 나오기 전에는 XML에 직접 Bean의 정보를 설정해야 한다. => 매우 불편 + 귀찮
*PetD 클래스
@Data
public class PetD {
@Setter
private Dog dog;
}
*Dog 클래스
@Data
public class Dog {
}
* root-context.xml
<!-- dog 빈을 생성한다. -->
<bean id="dog" class="org.test.sample.Dog"></bean>
<!-- PetD에 dog를 주입한다. -->
<bean id="petD" class="org.test.sample.PetD">
<property name="dog" ref="dog"></property>
</bean>
매번 Bean을 이렇게 등록해야 한다면 너무 힘들 것 같다.
*PetTest 클래스 (JUnit 테스트)
package org.test.sample;
import static org.junit.Assert.assertNotNull;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import lombok.Setter;
import lombok.extern.log4j.Log4j;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class PetTest {
@Setter(onMethod_ = {@Autowired})
private PetC petC;
@Setter(onMethod_ = {@Autowired})
private PetD petD;
@Test
public void testExam() {
assertNotNull(petC);
log.info("----------------------------------------------");
log.info(petC);
log.info("----------------------------------------------");
}
@Test
public void testExam2() {
assertNotNull(petD);
log.info("----------------------------------------------");
log.info(petD);
log.info("----------------------------------------------");
}
}
* 실행결과

'SPRING FRAMEWORK > ANNOTATION' 카테고리의 다른 글
Lombok 어노테이션 정리 (0) | 2022.08.29 |
---|---|
@RequestMapping (0) | 2022.08.29 |
@Controller (0) | 2022.08.29 |
@Bean (0) | 2022.08.28 |
Annotation / Meta-Data (0) | 2022.08.28 |