* 제공 : 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

+ Recent posts