관리 메뉴

有希

3. @Component 본문

프로그래밍/Spring4

3. @Component

有希. 2022. 3. 14. 22:26

DI컨테이너가 관리한, 주로 인젝션을 위한 인스턴스를 설정하는 것. 클래스 선언 앞에 @Component를 붙이면 스프링의 DI컨테이너가 찾아서 관리하고 @Autowired가 붙은 인스턴스 변수나 메서드에 인젝션해준다. 또한, 이름을 붙여서 관리하고 싶으면 @Component("이름") 처럼 이름을 붙여서 사용할 수도 있다.

용도에 따라 표시를 명확히 하기 위해 4가지로 분화된다.

@Controller: 프레젠테이션 층 스프링 MVC용 어노테이션(사용자에게 보여지는 화면)

@Service: 비즈니스 로직 층 Service용 어노테이션. @Component와 동일

@Repository: 데이터 액세스 층의 DAO 어노테이션

@Configuration: Bean 정의를 자바 프로그램에서 실행하는 JavaConfig용 어노테이션


@Scope("")

@Component와 함께 사용한다. " "안에 올 수 있는 속성으로 5가지가 있다.

1. singleton: 인스턴스를 싱글턴으로 함(static을 붙여서 하나만 만들고 여기저기서 돌려쓰는거)

2. prototype: 이용할 때마다 인스턴스화한다

3. request: Servlet API의 request 스코프인 동안만 인스턴스가 생존

4. session:      ``       의 session 스코프인 동안만 인스턴스가 생존

5. application:   ``     의 application 스코프인 동안만 인스턴스가 생존

속성은 문자열로 @Scope("singleton") 처럼 직접 넣어도 되지만, @Scope(value = WebApplicationContext.SESSION_SCOPE) 처럼 상수로 지정해도 된다.

Servlet: 자바를 사용하여 웹페이지를 동적으로 생성하는 자바 프로그램. ASP. NET 같은거

3가지로 설정할 수 있다.

1.

<bean id = "xxx" class = "xxx" scope = "session">
	<aop:scoped-proxy />
<!bean>

2.

@Scope(
	value = WebApplicationContext.SESSION_SCOPE,
    proxyMode = ScopedProxyMode.TARGET_CLASS
)

3.

<context:component-scan base-package="xxx" scoped-proxy="targetClass"/>

@Lazy

인스턴스의 생성을 지연시키는 어노테이션. @Lazy가 없으면 DI 컨테이너가 시작될 때 @Component가 붙은 클래스가 한 번에 전부 인스턴스화된다. 테스트 단계에서 필요한 녀석만 인스턴스화 시키고 싶을때 유용하다.

@Component
@Lazy
public class ProudctDaoImpl implements ProductDao
{
	...
}

'프로그래밍 > Spring4' 카테고리의 다른 글

5. 리플렉션과 성능 문제  (0) 2022.03.14
4. 생명 주기 관리  (0) 2022.03.14
2. @Autowired  (0) 2022.03.14
1. service, dao 개념  (0) 2022.03.13