1. component-scan

- spring 2.5 버전에 출시

- 2.5 버전 이전엔 xml file 에 모든 bean 을 설정해야 했는데, component-scan 이 xml 내의 bean 설정 양을 줄여줬다

- @Component, @Repository, @Service, @Controller 어노테이션을 스캔한다

- @Autowired, @Qualifier 어노테이션도 해석

- component-scan 이 선언되어있다면 annotation-config 는 필요없음

 

2.annotation-driven

- annotation-driven 은 spring mvc 컴포넌트를 활성화

- annotation-driven 을 포함하지 않아도 component-scan을 사용하여 Bean을 생성한 경우 mvc application은 동작

- annotation-driven은 구성되지 않은 특정 빈을 구성하는데 추가 작업을 수행

- @Controller 에 요청을 하기 위해 필요한 HandlerMapping, HandlerAdapter 을 등록

- @Number로 숫자 필드 지원 , classPath에 Jackson이 있는 경우 JSON 쓰기 읽기를 지원 와 같은 작업 적용

 

3. annotation-config

- 어플리케이션 context에 이미 등록되어 있는 (xml에 선언돼있거나 package scanning 으로 검색된) 어노테이션 빈을 활성화

- 스프링 컨텍스트에 의해 생성 및 저장된 빈에 대해 @Autowired, @Qualifier 어노테이션을 해석

- component-scan 또한 같은 일을 하지만, annotation-config 는 빈을 찾아 등록해주진 않는다. 이미 등록이 끝난 bean 들을 활성화할 할 뿐이다.

 

※ annotation-config 만 설정에 잡혀있을 경우, Bean 이 스캔에 의해 자동으로 등록되지 않으므로 xml 에 Bean 설정을 해주어야 함. 현재 개발중인 배치서버 설정에 빈이 자동으로 잡히지 않아 찾아보니 annotation-config 설정만 잡혀있고, component-scan 혹은 annotation-driven 은 잡혀있지 않았음.

 

참고 및 해석 : https://javabeat.net/spring-mvc-component-scan-annotations/ 

반응형

1. 우클릭 > New > Spring Starter Project

 

2. 프로젝트명 입력

   Gradle / Maven 선택,

   배포 파일형태 Jar/War 선택

   Java 버전 선택

 

3. Boot Version 선택

   사용할 Library 선택(WEB, JPA 등)

 

4. @SpringBootApplication 어노테이션이 붙은, (main 메소드를 지닌) 클래스의 이름을

Application 으로 수정 밑 실행(Run As > Spring Boot App)

 

5. 프로젝트 우클릭 > Gradle > Refresh Gradle Project

 

 

※ Lombok 설치 (참고)

1) lombok-1.18.10.jar 가 위치한 경로로 이동 (버전은 다를 수 있음)

2) jar 가 위치한 경로에서 shift + 우클릭하여 Powershell 실행

3) java -jar lombok-1.18.10.jar 로 lombok jar 실행 

4) Specify location 버튼을 누른 후 sts.exe(혹은 사용중인 IDE 실행파일) 선택

 

5) 완료 화면

 

6) IDE 재시작

7) sts.ini 파일을 연 후

-vmargs

-javaagent:lombok.jar (약간 다를 수 있음)

위의 내용이 추가 되었는지 확인(sts.exe와 동일한 경로에 위치)

 

참고 :

https://jojoldu.tistory.com/250?category=635883

 

 

반응형

[Spring property 두가지 설정 방법]

1. context:property-placeholder 태그 사용

<context:property-placeholder location="classpath:프로퍼티파일명"/>

* 빈팩토리 후처리기로써 빈 설정 메타정보 모두 준비됐을 때 메타정보 자체를 조작 : 빈 설정이 끝난 이후 ${} 표현을 찾아 해당하는 프로퍼티로 치환해준다는 의미인 듯

* ${} 사용 : "${프로퍼티key}" 와 같이 사용

* @Value annotation 에서도 사용이 가능 : @Value("${프로퍼티key}")

 

2. bean 으로 등록

<util:properties id="빈아이디" location="classpath:프로퍼티파일명" />

* Spring 3.0 이상부터 지원

* 프로퍼티 파일 내용을 Properties 타입의 빈으로 생성

* spEL(Spring Expression Language) 사용 : #{빈아이디['프로퍼티Key']} 와 같이 사용

* @Value annotation 에서도 사용이 가능 : @Value("빈아이디['프로퍼티Key']")

 

[Ex]

1. Comm.properties 파일 생성 (resources/sample/properties/Comm.properties)

api.server.url="https://sample.api.com"
db.driverClass="sampleDriverClass"
db.url="sampleDBUrl"
db.username="sampleDBUrl"
db.password="sampleDBUrl"

2. property 설정(Bean 주입, context.xml 설정)

<context:property-placeholder location="classpath:sample/properties/Comm.properties" />
혹은
<util:properties id="properties" location="classpath:sample/properties/Comm.properties" />

※서버 환경별(로컬, 개발, 운영 등) property 파일을 동적으로 다르게 사용하고자 할 경우 이곳 참고

 

3. 스프링설정파일 (~context.xml) 에서의 사용

context:property-placeholder 태그 사용한 property 설정시 :

1
2
3
4
5
6
<bean id=""dataSource" class="~">
   <property name="driverClass" value="${db.driverClass}" />
   <property name="url" value="${db.url}" />
   <property name="username" value="${db.username}" />
   <property name="password" value="${db.password}" />
</bean>
cs

util:properties 와 같이 bean 으로 property 설정시 :

1
2
3
4
5
6
7
<bean id=""dataSource" class="~">
   <property name="driverClass" value="#{properties['db.driverClass']}" />
   <property name="url" value="#{properties['db.url']}" />
   <property name="username" value="#{properties['db.username']}" />
   <property name="password" value="#{properties['db.password']}" />
</bean>
 
cs

 

4. 소스에서의 사용

context:property-placeholder 태그 사용한 property 사용시 :

@Value("${api.server.url}") 

private String apiServerUrl;

 

util:properties 와 같이 bean 으로 property 사용시 :

@Value("#{properties['api.server.url']}") 

private String apiServerUrl;

 

 

[ property 의 형변환 ]

property 값은 기본적으로 String 형태의 Text로 선언 및 사용되는게 default.

String 이 아닌 다른 기타 자료형을 바꿔서 사용해야하는 경우

1. PropertyEditor : 스프링이 default로 해당 에디터를 사용하여 property를 형변환 함 

: boolean, short, int, long, double 등의 기본 자료형 및 Boolean, Short, Integer, Long, Double 등의 wrapper클래스의 오브젝트 타입도 지원

ex) @Value("1.2") double num;

: array 도 사용 가능

ex) @value("1,2,3") int[] arr;

 

* PropertyEditor interface 직접구현하여 사용자가 직접 정의한 형태로 값을 리턴하도록 사용 가능 (Thread safe X)

 

2. ConversionService : 스프링 3.0부터 지원 (Thread safe O)

bean 으로 선언하여 사용.

 

 

공부를 더 해봐야 하겠지만 지금 당장 String 및 기본자료형 정도로만 property 사용하면 되므로

나중에 필요할 때 공부하는걸로..

 

참고 :

토비의스프링 3.1 (도서)

https://whiteship.tistory.com/2563

반응형

+ Recent posts