有希
3. @Component 본문
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 |