- 전체
- JAVA 일반
- JAVA 수학
- JAVA 그래픽
- JAVA 자료구조
- JAVA 인공지능
- JAVA 인터넷
- Java Framework
- Java GUI (AWT,SWING,SWT,JFACE)
- SWT and RCP (web RAP/RWT)[eclipse], EMF
Java Framework [스프링] 스프링 Java 어노테이션
2014.06.11 23:20
■ Spring annotation
spring Framework는 java 5+ 부터 annotaion을 제공 하며,
annotation의 사용으로 설정파일을 간결화하고, 객체 또는 메소드의 맵핑을 명확하게 할 수 있다.
ο @Component
패키지 : org.springframework.stereotype
버젼
: spring 2.5
개요 : <context:component-scan> 태그를 설정파일에 추가하면 해당
어노테이션이 적용된 클래스를 빈으로 등록하게 된다.
범위는 디폴트로 singleton이며 @Scope를 사용하여
지정할 수 있다.
설정 위치: 클래스 선언부 위
추가설정 : XML 설정파일에
<context:component-scan>을 정의하고 적용할 기본 패키지를 base-package 속성으로
등록한다.
<context:component-scan> 태그를 사용하면 @Component,
@Required, @Autowired 등의 어노테이션이 같이 적용 된다.
예를 들어 <context:component-scan base-package="xxx" />에서 xxx패키지 하위에서
@Component로 선언된 클래스를 bean으로 자동 등록한다.
bean의 이름은 해당클래스명(첫글자는 소문자)이
사용된다.
<context:component-scan /> 요소에는 scoped-proxy 속성이 존재 한다.
scoped-proxy 속성은 <aop:scoped-poxy/> 요소처럼 WebApplicationContext 에서만 유효하며
"session", "globalSession", "request" 이외의 scope는 무시 되며 아래의 3가지 값을 설정 할 수
있다.
no : proxy를 생성하지 않는다.(기본값)
interfaces : JDK Dynamic
Proxy를 이용한 Proxy 생성
targetClass : 클래스에 대해 프록시를 생성(CGLIB를 이용한 Proxy
생성)
- 사용 예
@Component
@Scope("prototype") // 생략하면
싱글톤
public class Test {
.....
}
ο @Required
패키지 :
org.springframework.beans.factory.annotaion
버젼 : spring 2.0
개요
: 리콰이얼드 어노테이션은 필수 프로퍼티임을 명시하는 것으로 필수 프로퍼티를 설정하지 않을 경우 빈 생성시 예외를 발생시킨다.
설정 위치 : setter 메소드
추가설정 : <bean
class="org.springframework.beans.factory.annotaion.RequiedAnnotaionBeanPostProcessor"
/> 클래스를 빈으로 등록시켜줘야 한다. 해당 설정 대신에<context:annotation-config> 태그를 사용해도
된다.
context:annotation-config 태그는 어노테이션과 관련해서 다음의 BeanPostProcessor를 함께
등록 한다.
-
@Required(RequiedAnnotaionBeanPostProcessor)
-
@Autowired(AutowiredAnnotaionBeanPostProcessor)
- @Resource,
@PostConstruct, @PreDestory(CommonAnnotaionBeanPostProcessor)
-
@Configuration(ConfigurationClassPostProcessor)
- 1단계 : 코드내에 프로퍼티 설정 메소드에 @Required 어노테이션을 붙인다.
import
org.springframework.beans.factory.annotation.Required
public class
TestBean {
private TestDao testDao;
@Required
public void setTestDao(TestDao testDao) {
this.testDao = testDao;
}
}
- 2단계 : 스프링 설정 파일에 RequiredAnnotationBeanPostProcessor 클래스를 빈으로 등록
<bean
class="org.springframework.beans.factory.annotaion.RequiredAnnotationBeanpostProcessor"/>
<bean name="testBean" class="han.test.TestBean">
<property name="testDao" ref="testDao"/> <!--@Required 어노테이션을 적용하였으므로 설정하지 않으면 예외를 발생시킨다.-->
</bean>
RequiredAnnotationBeanPostProcessor 클래스는 스프링 컨테이너에 등록된 bean 객체를 조사하여
@Required 어노테이션으로 설정되어 있는 프로퍼티의 값이 설정되어 있는지 검사하고 설정되어있지 않으면 bean 생성시 예외를
발생시킨다.
RequiredAnnotationBeanPostProcessor 클래스를 빈으로 등록하지 않고
<context:annotation-config> 다음과 같이 태그를 이용할 수도 있다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config/>
</beans>
ο @Autowired
패키지 :
org.springframework.beans.factory.annotaion
버젼 : spring 2.5
개요
: 오토 와이어링 어노테이션은 의존관계를 자동설정할 때 사용하며 타입을 이용하여 의존하는 객체를 삽입해 준다. 그러므로 해당 타입의 빈객체가
존재하지 않거나 또는 2개 이상 존재할 경우 스프링은 예외를 발생시키게 된다.
설정 위치 : 생성자, 필드,
메소드(setter메소드가 아니여도 된다)
추가설정 : <bean
class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"
/> 클래스를 빈으로 등록시켜줘야 한다. 해당 설정 대신에 <context:annotation-config> 태그를 사용해도
된다.
옵션 : required - @Autowired어노테이션을 적용한 프로퍼티에 대해 설정할 필요가 없는 경우에
false값을 주며 이때 해당 프로퍼티가 존재하지 않더라도 스프링은 예외를 발생시키지 않는다.
@Autowired(required=false)로 선언한다. (기본값은 true)
특징 : byType으로 의존관계를 자동으로
설정할 경우 같은 타입의 빈이 2개 이상 존재하게 되면 예외가 발생하는데, Autowired도 이러한 문제가 발생한다. 이럴 때
@Qualifier를 사용하면 동일한 타입의 빈 중 특정 빈을 사용하도록 하여 문제를 해결할 수 있다.
@Autowired
@Qualifier("test")
private Test
test;
ο @Qualifier
패키지 :
org.springframework.beans.factory.annotaion
버젼 : spring 2.5
개요
: 콸리파이어 어노테이션은 @Autowired의 목적에서 동일 타입의 빈객체가 존재시 특정빈을 삽입할 수 있게 설정한다.
@Qualifier("mainBean")의 형태로 @Autowired와 같이 사용하며 해당 <bean>태그에 <qualifire
value="mainBean" /> 태그를 선언해주어야 한다. 메소드에서 두개이상의 파라미터를 사용할 경우는 파라미터 앞에
선언해야한다.
설정위치 : @Autowired 어노테이션과 함께 사용된다.
추가설정 : 동일타입의 빈객체
설정에서 <qualifier value="[alias명]" />를 추가하여 준다.
옵션 : name -
alias명
ο @Resource
개요 : 자바 6버전 및 JEE5 버전에 추가된 것으로 어플리케이션에서 필요로 하는
자원을 자동 연결할 때 사용 한다. 스프링 2.5 부터 지원하는 어노테이션으로 스프링에서는 의존하는 빈 객체를 전달할 때
사용하다.
@Autowired 와 같은 기능을 하며 @Autowired와 차이점은 @Autowired는
타입으로(by type), @Resource는 이름으로(by name)으로 연결시켜준다는 것이다.
설정위치 : 프로퍼티,
setter 메소드
추가설정 : <bean
class="org.springframework.beans.factory.annotation.CommonAnnotationBeanPostProcessor"/>
클래스를 빈으로 등록시켜줘야 한다. 해당 설정 대신에 <context:annotation-config> 태그를 사용해도
된다.
옵션 : name
name속성에 자동으로 연결될 빈객체의 이름을
입력한다.
@Resource(name="testDao")
CommonAnnotationBeanPostProcessor 클래스를 설정파일에 빈객체로 등록하여 어노테이션을 적용시킨다.
ο @PostConstruct
패키지 : javax.annotation
버젼 :
jdk1.6, spring 2.5
개요 : 의존하는 객체를 설정한 이후에 초기화 작업을 수행하기 위해 사용
설정위치 : 초기화 작업 수행 메소드
추가설정 : CommonAnnotationBeanPostProcessor 클래스를 빈으로
등록시켜줘야 한다. 해당 설정 대신에 <context:annotation-config> 태그를 사용해도 된다.
ο @PreConstruct
패키지 : javax.annotation
버젼 : jdk1.6,
spring 2.5
개요 : 컨테이너에서 객체를 제거하기 전에 해야할 작업을 수행하기 위해 사용
설정위치 :
해당 작업 메소드
추가설정 : CommonAnnotationBeanPostProcessor 클래스를 빈으로 등록시켜줘야 한다.
해당 설정 대신에 <context:annotation-config> 태그를 사용해도 된다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.

