2015년 4월 13일 월요일

SpringFramework 에서 *.xml 설정 파일 작성방법

1. web.xml 설정(기본만)
    다이나믹 웹 프로젝트에 기본 옵션으로 web.xml 을 설정할 수 있는데
    여기에 다음 내용을 추가해 주면 xxxxx-servlet.xml 이라는 명칭으로 
    Springframework 설정을 할수 있다.

1
2
3
4
5
6
7
8
<servlet>
    <servlet-name>xxxxx</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
    <servlet-mapping>
        <servlet-name>xxxxx</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>

여기서 servlet-name 명칭 -servlet.xml 이라는 이름으로 작성해야 한다.
 (내부 구조는 모르겠지만 약속되어 있음  여기서는 xxxxx-servlet.xml)

2. xxxxx-servlet.xml 파일 의 객체 등록하는 방법
(1) 빈 객체 올리기 첫번째

1
2
3
<bean name="쓸 아이디명칭 beanida"  
           id="클래스 위치 및 클래스 명칭kr.com.SpringFrameworkabout">
</bean>

(2)빈 객체 올리기 두번째- static 객체 올리기
       만약에 끌어올 객체가(클래스가) getInstance로 호출되야만 객체를 생성할 수 있는
         static 선언된 객체일 경우 컨테이너에 올리는 설정 방법이다.
       뒤에 저거만 붙여주면 됨

1
2
3
4
<bean name="쓸 아이디명칭 beanida"  
           id="클래스 위치 및 클래스 명칭kr.com.SpringFrameworkabout"
           factory-method="getInstance">
</bean>

(3) 빈객체 올리기 세번째- 생성자에 의존 클래스 추가해서 작성하기
      생성자에 다른 클래스가 포함되어 있는경우 태그 하나를 추가함

1
2
3
4
5
6
<bean name="쓸 아이디명칭 beanida"  
           id="클래스 위치 및 클래스 명칭kr.com.SpringFrameworkabout">
<constructor-arg>
<ref bean="클래스 위치 및 명칭"/>
</constructor-arg>
</bean>

(4) 빈객체 올리기 네번째 setxxx() 함수를 사용해서 
     static 이 아닌 객체 올리기
     방법 : constructor-arg 대신에 아래 내용을 대체함

1
2
3
<property name="프로퍼티 이름(임의로 부여하는거">
   <reg bean="클래스 명칭">
 </property>

(5) peoperty 에 기본 데이터 타입의 변수를 붙이기

1
2
3
4
5
6
7
<property name="프로퍼티 이름(임의로 부여하나 변수명과 일치함">
   <value>3</value>
 </property>
<property name="프로퍼티 이름(임의로 부여하는거" ref="추가해야할 클래스 이름">
   <reg bean="클래스 명칭"/>
 </property>

 (6) (4)번 내용은 아래 내용으로 치환 가능함

1
2
    p:프로퍼티 이름 ="3"
    p:프로퍼티 이름-ref="클래스 명칭"

(7) 특정 메소드를 사용해야만(다른클래스의) 객체가 생성되는 경우
      방법 :  lookup-method 를 이용함

1
2
3
<bean........>
<lookup-method name="쓸 메소드명칭" bean="메소드가 포함된 클래스명칭"/>
</bean>
ps . CGLIB 라는 cglib-nodep-2.1.jar 파일을 라이브러리에 추가해야함

(8) 배열 형태(List, map, set, 등등)을 
    방법: 입력 형태니깐 자료를 직접 입력하는 형태이다.
            안에 다음과 같은 코드를 삽입하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<bean.............>
     <peoperty name="">
             <map>
                      <entry>
                            <key><value></value><key>
                            <ref bean="">
                      </entry>
                      <entry>
                            <key><value>2값</value><key>
                            <ref bean="">
                      </entry>
             </map>
     </peoperty>
</bean>

 (8)-2 List 의 경우 
    <map>  부분은 아래와 같이 바뀌게 됨

1
2
3
4
<list>
        <value>1</value>
        <value>2</value>
</list>

(8)-3 set type(배열인데 중복을 체크해주는 형태)

1
2
3
4
5
6
<property name="subset">
   <set value-type="java.lang.Integer">
      <value>10</value>
      <value>20</value>
   </set
</property>

(9) Properties 타입(Map 인데 환경설정을 위한 타입)

1
2
3
4
5
6
7
8
<bean name="client" class="com.spring.bookclient">
   <property name="config">
      <props>
         <prop key="server">localhost</prop>
         <prop key="id">samgugji</prop>
      </props>
   </property>
</bean>


3. xxxxx-servlet.xml 파일 의 의존 관계 설정
(1) 기본적인 스타일

1
2
3
4
<bean name="/customer/noticeDetail.htm" class="controllers.customer.NoticeDetailController">
   <property name="noticeDao" ref="noticeDao"></property>
      </bean>
<bean id="noticeDao" class="dao.NoticeDao"></bean>

이렇게 하면 NoticeDao.java 객체를 NoticeDetailController 
라는 클래스에서 참조할수 있게 설정되었다.

(2) byName , byType 를 property 설정 대신에 autowire="byName" 
            이렇게 넣어준다면 좀더 쉽게 객체를 연결 할수 있다.

1
2
3
4
<bean name="/customer/noticeDetail.htm" 
class="controllers.customer.NoticeDetailController" autowire="byName">
</bean>
<bean id="noticeDao" class="dao.NoticeDao"></bean>

      byName : 이름이 같은 빈 객체를 설정한다. 
                    (물론 빈에 등록된 이름 == .java에서 호출한 이름과 동일)
      byType : 타입이 같다고 생각되는 객체를 입력해준다.
                   (같은 인터페이스를 상속한 객체들(2개이상)이 빈에 등록되어
                      있다면 에러를 유발하게 된다.)
      -- 둘중 하나라도 이름이 바뀌면 엉킬수 있으므로 주의 해야 함.
      constructor : byType 이나 빈에 등록된 객체중에서 선택하되
                    java 파일에 생성된 생성자에서 언급한 파일을 읽어옴
      autodetect : byType 과 동일함
   + 위의 4가지 자동설정 에 수동설정 방법도 같이 쓸수 있음

(3) 부모님 설정 가능

1
2
3
4
5
6
7
8
9
<bean name="noticeDetail.htm" class="controllers.customer.NoticeDetailController">
   <property name="Time" value="100"></property>
</bean>
<bean name="반치스Detail.htm" class="controllers.customer.NoticeDetailController">
   <property name="Time" value="100"></property>
</bean>
<bean name="치토스noticeDetail.htm" class="controllers.customer.NoticeDetailController">
   <property name="Time" value="100"></property>
</bean>

   위와 같이 이름만 틀리고 클래스, 참조하는 변수값이 동일한 경우 
     parent 설정을 가질수 있음

1
2
3
4
5
6
7
<bean name="common.htm" class="controllers.customer.NoticeDetailController">
   <property name="Time" value="100"></property>
</bean>
<bean id="door" parent="common">
<bean id="window" parent="common">
<bean id="human" parent="common">

4. xxxxx-servlet.xml 파일의 범위 설정
(1) 보통 싱글톤으로 생성해 쓰는데 호출시마다 생성하고자 할때가 있음
       이때 scope="" 옵션으로 조절이됨

1
2
3
<bean name="common.htm" class="controllers.customer.NoticeDetailController" scope="">
   <property name="Time" value="100"></property>
</bean>

       singleton : 스프링 컨테이너1개 1객체 존재 
       prototype : 빈 사용시마다 생성
       request : HTTP 요청시마다 생성
       session : HTTP 세션 open 시 1객체 생성
       golbal-session : 글로벌 HTTP 세션에 1객체 생성
                                   포플릿(?) 적용 객체에만 적용됨

(2) 충돌상황 : 싱글톤 객체A가 prototype 객체B를 쓰려고 할때 
       A객체가 더이상 만들어지지않아 B 객체도 A갯수만큼만 생성된다.
       이걸 굳이 쓰고자 한다면
       (A에서 B 호출시마다 B객체 새로 생성) 아래와 같이
           beans에 3줄을 포함하고)

1
2
3
4
5
6
7
8
9
10
11
12
13
14

bean 설정에 다음 <aop:scoped-proxy/> 라는 옵션을 추가해준다.

1
2
3
4
5
6
7
<bean name="common" class="controllers.customer.NoticeDAO" scope="">
   <aop:scoped-proxy/>
</bean>

<bean name="simple.htm" class="controllers.customer.Controller" scope="">
   <property name="common" ref="common" />
</bean>



댓글 없음:

댓글 쓰기