[Spring]2. Spring DI - xml파일을 이용한 DI

- xml설정파일을 이용하는 방법..


자바에서 클래스를 추가할 때 import를 하는것 처럼 태그를 추가할 때 xml설정 파일에도 스키마로 네임스페이스를 추가하여야 한다.



- Dao 인터페이스와 그 것을 구현한 OracleDao. 

1
2
3
4
5
6
7
8
9
10
11
public interface Dao {
    public void getList();
}
//인터페이스 구현을 통해 OracleDao를 만든다.
public class OracleDao implements Dao{
    @Override
    public void getList(){
        System.out.println("OracleDao.getList() - Oracle DB에 접근합니다.");
    }
}
 


- Service인터페이스와 구현한 OracleService. Dao에 의존성이 있기 때문에 멤버로 Dao를 가지고 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public interface Service {
    public void getList();
}
//역시 service또한 인터페이스 구현으로 만든다.
public class OracleService implements Service{
    Dao dao;
    @Override
    public void getList(){
        System.out.println("OracleService.getList() - OracleDao.GetList() 를 호출합니다.");
        dao.getList();
        System.out.println("OracleService.getList() - Dao에서 데이터를 받아 Controller에게 넘져줍니다.");
    }
    @Override
    public void setDao(Dao dao) {
        this.dao = dao;
    }
}


- Service를 가지고 있는 Coltroller.

1
2
3
4
5
6
7
8
9
10
11
12
13
public class ListController {
    private Service service;
    
    public void setService(Service service) {
        this.service = service;
    }
    
    public void doGet(){
        System.out.println("Controller - OracleService를 호출합니다.");
        service.getList();
        System.out.println("Controller - Service에서 데이터를 받아 View에 넘겨줍니다.");
    }
}

  

- Controller를 호출할 메인 메소드.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
 
public class testMain {
 
    public static void main(String[] args) {
        Resource resource = new ClassPathResource("apllicationContext.xml");
        BeanFactory bf = new XmlBeanFactory(resource);
        ListController c = (ListController) bf.getBean("listController");
        System.out.println("Controller를 호출합니다.");
        c.doGet();
    }
 
}

- 예상 결과

Controller를 호출합니다.

Controller - OracleService를 호출합니다.

OracleService.getList() - OracleDao.GetList() 를 호출합니다

OracleDao.getList() - Oracle DB에 접근합니다

OracleService.getList() - Dao에서 데이터를 받아 Controller에게 넘져줍니다.

Controller - Service에서 데이터를 받아 View에 넘겨줍니다



- 이것을 실행 시키기 위해서는 설정된 xml파일이 필요하다.

  - 위의 세 클래스(controller, service, dao)를 이와 같이 등록한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.2.xsd">
 
    <bean id="oracleDao" class="com.OracleDao" >
        
    </bean>
    
    <bean id="oracleService" class="com.OracleService" >
        <property name="dao">
            <ref bean="oracleDao"/>
        </property>
    </bean>
 
    <bean id="listController" class="com.ListController" >
        <property name="service">
            <ref bean="oracleService"/>
        </property>
    </bean>
        
</beans>

 

- Bean은 객체이다. Spring DI는 모든 등록된 클래스를 프로젝트를 처음 실행할때 전부 객채로 생성한다. 객체가 다른 객체를 필요로 할 때, 필요로 하는 객체를 생성자나 setter를 통해 주입시켜준다.

- xml파일에 <constructor-arg>를 이용하여 생성자를 이용한 DI도 가능하다.


autowire속성으로 자동으로 의존성 주입이 가능하다.


1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<beans>
 
    <bean     id="service" 
            class="wakeup.di.service.Service">
    </bean>
            
    <bean     id="listController" 
            class="wakeup.di.controller.ListController"
            autowire="byType">
    </bean>
</beans>
 





 

- 다음 코드는 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<bean id="oracleDao" class="com.OracleDao" >
        
</bean>
    
<bean id="oracleService" class="com.OracleService" >
    <property name="dao">
        <ref bean="oracleDao"/>
    </property>
</bean>
 
<bean id="listController" class="com.ListController" >
    <property name="service">
        <ref bean="oracleService"/>
    </property>
</bean> 


     - 다음과 같다.

 
1
2
3
4
5
6
7
8
9
10
//xml파일의 id속성은 객체변수명이 되고, class는 클래스명이다.
OracleDao oracleDao = new OracleDao();
 
//property name은 멤버 Dao변수를 뜻하고, ref는 그 필드에 들어갈 객체이다.
OracleService oracleService = new OracleService();
oracleService.setDao(oracleDao);
 
//controller도 마찬가지.
ListController listController = new ListController();
listController.setOracleService(oracleService);





'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

[Spring]4. scope  (0) 2013.10.21
[Spring]3. Spring DI - @(어노테이션)을 이용한 DI  (0) 2013.10.21
[Spring] 1. Spring DI  (0) 2013.10.21
XML 이란?  (0) 2013.10.21
Spring  (0) 2013.10.18

댓글()

[Spring] 1. Spring DI

1. Spring DI


 - Spring DI : 모든 클래스의 객체를 미리 생성해 두고, 어떠한 객체가 필요로 하는 객체를 주입 시켜주는 일종의 컨테이너.

주입 시키는 방법은 xml 설정과 @어노테이션이 있다. 어노테이션도 결국 xml로 바뀐다. 보통 어노테이션 방법을 많이 쓰지만 소스는 없고 클래스 파일만 가지고 있을때는 xml 설정을 쓴다.


- 생성자, setter주입을 사용한다. xml에 설정하면 자동으로 주입 시킨다.

 

- 경량 컨테이너라고도 한다. 다른 컨테이너에 비해 리소스 용량이 크지 않기 때문이다.


- DI를 사용하기 위해서는 필요한 클래스를 멤버 변수로 가지고 있어야 하고, 생성자 혹은 setter를 가지고 있어야 한다.

     

- 빈은 빈팩토리에서 getBean()을 실행 할 때 모든 객체 생성이 이루어 진다. 




'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

[Spring]3. Spring DI - @(어노테이션)을 이용한 DI  (0) 2013.10.21
[Spring]2. Spring DI - xml파일을 이용한 DI  (0) 2013.10.21
XML 이란?  (0) 2013.10.21
Spring  (0) 2013.10.18
Maven  (0) 2013.10.18

댓글()

XML 이란?

 - XML(Extensible Markup Language) : 확장형 마크업 언어. 데이터 교환에 대한 표준을 정의 한다.


 - SGML(Standard Generalized Markup Language) : xml 과 html의 모체가 되는 언어. 

다양한 형태의 전자문서들을 서로 다른 시스템들 사이에 정보의 손실없이 효율적으로 전송, 저장, 자동처리를 위한 국제표준화기구, ISO 문서처리표준의 하나이다. html과 xml도 이것을 이용해 만들어졌다.

'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

[Spring]2. Spring DI - xml파일을 이용한 DI  (0) 2013.10.21
[Spring] 1. Spring DI  (0) 2013.10.21
Spring  (0) 2013.10.18
Maven  (0) 2013.10.18
Transaction(트랜젝션) - 어떠한 과정을 한 묶음으로 처리하는 것.  (0) 2013.10.17

댓글()

Spring

- Spring : 스프링은 컨테이너와 같다. 객체 생성과 관리는 스프링이 한다. 스프링에서 객체는 bean이라고 한다.


- InsertController

1
2
3
4
5
6
public class InsertController {
    public void execute(){
        System.out.println("InsertController.execute() 실행.");
    }
}
 



- applicationContext.xml

* bean을 관리하는 설정 파일.

* 반드시 이런 이름을 쓸 필요는 없다.

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    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-3.2.xsd">
    
    <bean     id      = "insertController" 
            class = "wakeup.controller.InsertController">
    </bean>
 
</beans>
 



- Maintest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
 
import wakeup.controller.InsertController;
 
public class MainTest {
    public static void main(String[] a){
        //빈 설정을 한 xml 리소스 파일의 위치를 찾음.
        Resource resource = new ClassPathResource("applicationContext.xml");
        
        //찾은 리소스 파일을 가지고 빈을 생성할 수 있는 빈 팩토리를 만든다.
        BeanFactory beanFactory = new XmlBeanFactory(resource);
        
        //빈 팩토리에서 insertController를 가져온다. id나 클래스 이름을 적는다.
        //id는 여러개의 객체에서 호출 할 때,
        //class는 하나의 객체에서 호출 할 때 사용한다.
        InsertController Controller = (InsertController) beanFactory.getBean("insertController");
        Controller.execute();
    }
}
 



- 새로 객체 생성을 할 필요 없이 spring 에서 객체를 관리하고 호출 할 수 있다.

댓글()

Maven

- group id : 패키지 명.name space.


- artifact id : 프로젝트 명.  메이븐 프로젝트는 전 세계 공유를 목적으로 하기 때문에 패키지 명과 함께 전 세계에 유일한 이름이 들어가야 한다.


모든 자바 파일은 소스와 리소스로 구성된다. xml파일은 리소스 파일이다.


maven 설정은 pom.xml 에 전부 들어간다.


pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<project xmlns="http://maven.apache.org/POM/4.0.0" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                                           http://maven.apache.org/xsd/maven-4.0.0.xsd">
                                        
  <modelVersion>4.0.0</modelVersion>
  <groupId>wakeup</groupId>
  <artifactId>maven-test</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <!-- 라이브러리를 직접 다운 받아 클래스패스에 넣지 않아도
         maven의 pom.xml 파일에 다음 코드를 입력하면 자동으로 서버에서 다운받는다.-->
  <dependencies>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
          <version>3.2.4.RELEASE</version>
      </dependency>
      
  </dependencies>
  
</project>




- 스코프

* compile 스코프

* provided 스코프

* runtime 스코프

* test 스코프



- 추이 의존성 : 의존성이 추가 될 때 라이브러리가 중복 될 때가 있다. 


- 메이븐 프로젝트는 보통의 export가 아닌 메이븐 빌드를 통해 일반 jar, war 파일로 배포해야 한다.

댓글()

html 태그 목록 -펌-

웹 & 안드로이드/HTML5|2013. 10. 18. 11:06

출처 - http://blog.naver.com/ioiioizzz/189161093



Attribute (name) is obsolete. Its use is discouraged in HTML5 documents

Attribute : 속성

obsolete : 더 이상 쓸모없는

discouraged : 낙담한, 술에취한

그 속성은 더 이상 쓸모가 없고 그것을 사용하는것은 HTML5에서는 별로라네요

HTML5에서 제외된 속성들을 아래 태그목록에서 별도로 표시해놓겠습니다.

 

 


색(color)는 다음과 같이 지정 "red", "green", "blue", '#ff0000(16진수)



<a 속성> anchor, 링크

   href - 문서경로(url, #name, mailto:메일주소?"제목"

   name - 책갈피 ( HTML5 X )

   target - 열릴대상(_blank, _parent, _self, _top)


<address> 주소나 연락처

 

<b> font 속성이 bold

 

<blockquote> 문단을 하나로

 

<body 속성>  </body>

   background - 배경(백그라운드)이미지 파일명

   bgcolor - 배경색

   text - 글자색

   link - 링크색

   vlink -방문했던 링크색

   alink - 링크를 클릭했을때의 색

 

<br> break, 줄바끔


<center> 중앙정렬 (HTML5 X )

 

<dl> description list, 순번이 없는 목록, <dt>,<dd>태그와 같이 사용

 

<em> emphasized 강조하다, 이텔릭체(italicized)


<embed 속성> embedded plug-in, 끼워넣다, 미디어연결

   src - 파일경로

   autostart - 자동재생(true,false)

   hidden - 화면에 감춤(true,false)

   width - 넓이

   height - 높이

   loop - 반복회수, 반복여부(true, false)  

 

<font 속성> 폰트지정

    face - 글꼴 "굴림체"

    color - 글꼴색상

    size-글꼴크기(1~7)


<frameset 속성> 페이지를 프레임으로 나눔

    rows - 페이지를 상하로 나눔(픽셀, %)

    cols - 페이지를 좌우로 나눔(픽셀, %)

    border - 테두리

    bordercolor - 테두리색상

    frameborder - 테두리여부(yes,no)

 

<frame 속성> frameset에 대한 지정

    name - 프레임명(target)

    src - 파일경로

    noresize - 프레임고정

    scrolling - 스크롤바(yes,no,auto)

 



 


<h1> ~ <h6> heading, 헤드라인

 

<hr 속성> horizontal rule, 수평선

    align(left,right,center) - 정렬

    color - 색상

    size - 굵기(픽셀)

    width - 길이(필셀.%)

    noshade - 그림자없음


<i> 이텔릭체(italic)


<iframe 속성> inline frame, 다른 웹페이지를 포함 (HTML5 X)

    name - 프레임명(target)

    src - 파일경로

    scrolling - 스크롤바(yes,no,auto)

    align(left,right,center) - 정렬    

    width - 넓이

    height - 높이

    frameborder - 테두리 (HTML5 X)

    bordercolor - 테두리색상 


<img 속성> image, 이미지

    src - 이미지경로

    alt - 설명

    align(left,right,top,middle,bottom) - 정렬

    border - 테두리를 숫자로

    height - 높이

    width - 넓이

    hspace - 좌우여백

    vspace - 상하여백


  

  

<marquee 속성> 스크롤

    behavior(scroll,slide,altermate) - 형태

    direction(left,right,up,down) - 방향

    scrolldelay - 지연속도(1/1000초)

    scrollmount - 픽셀수

    bgcolor - 배경색

    height - 높이

    width - 넓이

    loop - 반복횟수(기본값 infinite) 

 

<ol 속성> ordered list, 순번이 있는 목록, <li>태그와 같이 사용 (HTML5 X)

   type(a,i,1) - 목록앞에 붙는 표식

   start - 시작번호

 

<p 속성> paragraph. 단구분

        align(left, right, center) - 정렬

 

<pre> preformatted, 내용을 그대로 보여줌

 

<s> 취소선 (HTML5 x)

 

<strong> 굵은글씨체

 

<sup><sub> 위첨자(superscript),아래첨자(subscipt)

    

 

<u> 밑줄문자 (HTML5 X)

 

<ul 속성> unordered list, 순번이 없는 목록, <li>태그와 같이 사용

        type(disc, circle, square)

 

<xmp> 문단내용중 태그를 그대로 보여줌



   

----------

  

<form 속성> 폼안에 있는 데이타를 전송

    method - get,post 방식지정

    name - 폼이름

    action - 이동할 위치

    enctype - 대용량파일의 속성(multipart, form-data)


<input type=타입> 폼에서 사용

        button - 버튼

        name - 이름

        value - 값

   - checkbox - 체크박스

        name - 이름

        value - 값

        checked - 선택된상태 

   - file - 파일첨부

        name - 이름

        size - 길이

        readonly - 읽기전용  

   - hidden - 숨김

        name - 이름

        value - 값

   - password - 비밀번호 입력

        name - 이름

        size - 길이

        maxlength - 최대글자수

   - radio - 라디오버튼

        name - 이름이 같으면 같은 그룹

        value - 값

        checked - 선택된상태 

   - reset - 초기값으로 재설정

        name - 이름

        value - 값

   - submit- formd의 action 위치로 전송

        name - 이름

        value - 값

   - text - 텍스트입력

        name - 이름

        size - 길이

        value - 값

        maxlength - 최대글자수

        readonly - 읽기전용  

   


<select 속성> 폼에서 사용, option 태그하고 같이 사용, 목록에서 선택

     name - 이름

     size - 길이

     multiple - 복수선택가능


<option 속성> 폼에서 사용. select 태그의 세부 목록

     value - 값

     selected - 선택된 상태


<textarea 속성> 폼에서 사용. 메모장

     name - 이름

     cols - 넓이

     rows - 높이

     readonly - 읽기전용


--------------


<table 속성>

   align(left,right,center) - 정렬

   bgcolor - 배경색

   background - 배경이미지

   border - 테두리 두께

   bordercolor - 테두리색상

   cellpaddin - 셀 안쪽 여백  

   cellspacing - 셀과 셀사이의 여백

   width - 테이블넓이

   height - 테이블높이

   frame(above,below,border,box,rhs,ths,hsides,vsides,void) 표의 바깥쪽 테두리

   rules(all,cols,rows,group,none) 표의 안쪽 테두리


   <caption> 표의 제목

   <col> 모든 row에 대한 col의 속성

   <colgroup> 여러 col을 하나의 그룹으로

   <thead> 머리글

   <tfoot> 바닥글

   <tbody> 본문


<tr 속성> 테이블의 row

   align(left,right,center) - 정렬

   bgcolor - 배경색

   valign(top,middle,bottom) - 세로 정렬방식

   height - 높이

   rowspan - 병합 


<th 속성>,<td 속성> 테이블의 column

   align(left,right,center) - 정렬  

   valign(top,middle,bottom) 세로 정렬방식

   background - 배경이미지

   bgcolor - 배경색

   colspan - 병합

   nowrap - 줄바꿈안되게

   width - 넓이


    



댓글()

버튼을 누르면 키보드가 숨겨지는 예제.

웹 & 안드로이드/Android|2013. 10. 18. 09:29

- 토큰 : 여러개의 데이터를 구분 짓기위한 기호. ','(쉼표), '-', '_' 등등이 될 수 있다.



- 키보드를 사라지게 하는 코드.

1
2
3
4
5
6
//InputMethodManager에 키보드와 관련된 시스템서비스를 불러온다.
InputMethodManager im = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
//소프트 키보드를 숨김.
im.hideSoftInputFromWindow(
                        getCurrentFocus().getWindowToken(),     
                        InputMethodManager.HIDE_NOT_ALWAYS);


댓글()

웹 뷰 (Web View)

웹 & 안드로이드/Android|2013. 10. 18. 09:15

웹 뷰 : 안드로이드 앱 상에서 웹 페이지를 볼 수 있도록 하는 뷰.


웹 클라이언트 : 웹 뷰에게 웹 페이지를 공급해주는 것. 웹 뷰는 웹 클라이언트로부터 페이지를 공급받아 뷰 화면에 보여준다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
 
public class MainActivity extends Activity {
    EditText et;
    Button b;
    WebView wv;
    InputMethodManager imm;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b = (Button) findViewById(R.id.button1);
        et = (EditText) findViewById(R.id.editText1);
        wv = (WebView) findViewById(R.id.webView1);
        
        imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
        
        wv.setWebViewClient(new MyWebViewclient());
        WebSettings ws = wv.getSettings();
        ws.setJavaScriptEnabled(true);
        ws.setBuiltInZoomControls(true);
        
        wv.loadUrl("http://www.naver.com/");
        
        b.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                wv.loadUrl(et.getText().toString());
                imm.hideSoftInputFromWindow(
                        getCurrentFocus().getWindowToken(),     
                        InputMethodManager.HIDE_NOT_ALWAYS);
                
            }
        });
        
    }
        
    class MyWebViewclient extends WebViewClient{
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return super.shouldOverrideUrlLoading(view, url);
        }
    }
}
 


댓글()

Transaction(트랜젝션) - 어떠한 과정을 한 묶음으로 처리하는 것.



은행 현금인출기(ATM)에서 돈을 인출하는 과정을 생각해 봅시다.

현금인출을 하겠다고 기계에게 알려준뒤 현금카드를 넣어서 본인임을 인증받고,
인출할 금액을 선택하면 ATM 기는 돈을 내어줍니다.

이러한 거래에 있어서 지켜져야 할 중요한 것이 있습니다.
기계의 오동작 등으로 인하여 전산상으로는 돈을 인출한 것으로 입력이 되었는데 돈은 안나온다거나,
돈은 나왔는데 일련의 에러나 문제로 인하여서 돈을 인출한 것이 전산상으로 입력이 안되면
상당히 심각한 문제가 발생하겠죠.

때문에 전산상으로도 입력이 정상적으로 잘 되고, 돈도 인출이 정상적으로 잘 됨을 확인하고 나서야,
인출하는 하나의 과정이 정상적으로 처리되었음을 확인할 수 있습니다.
여기서 돈을 인출하는 일련의 과정이 하나의 묶음으로 처리되어야 함을 이해하실 수 있을것입니다.
그리고 혹시 처리도중 중간에 무슨 문제가 발생한다면 진행되던 인출과정 전체를 취소하고
다시 처음부터 시작하도록 해야 될 것입니다.

이것을 트랜잭션이라고 합니다.
transaction 의 사전적의미와도 상통합니다만, 거래함에 있어서 거래하는 양측이 다 원하는
결과물을 얻어야만 정상적으로 처리되는 것이고 그렇지 않다라면 거래자체가 무산되어 원점으로
되돌려져(roll back) 버리는 것이죠.
전산적으로나 데이터베이스에 있어서도 이처럼 하나의 묶음으로 처리가 이루어져야 하는 모든것에
트랜젝션이란 개념이 사용됩니다.

롤백(roll back) 이란 것은 트랜잭션으로 인한 하나의 묶음처리가 시작되기 이전의 상태로
되돌려지는 것을 말합니다.

커밋(commit) 이란 것은 정상적으로 처리되어서 확정(실행을 위해서 엔터키를 치는 것처럼) 한다는
것이구요. 커밋하면 트랜잭션의 처리과정이 모두 반영되며 하나의 트랜잭션 과정이 끝나게 됩니다.

트랜잭션, 롤백... 이러한 단어들은 모든 처리가 정상적으로만 이루어진다고 한다면 필요없는
것이겠죠. 그러나 항상 예외나 에러는 발생하는 것이며, 이러한 것이 발생할 때에 적절한 처리를
위해서 존재하는 것입니다.




출처 - http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=104&docId=70097173&qb=7Yq4656c7J6t7IWY&enc=utf8&section=kin&rank=1&search_sort=0&spq=1&pid=RD9F5U5Y7uCssc2RMfVssssssud-458312&sid=Ul9mV3JvLCEAAALoE-k

'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

Spring  (0) 2013.10.18
Maven  (0) 2013.10.18
Dependency Injection, DI - 의존성 주입.  (0) 2013.10.16
Collection - List 배열, Set 셋  (0) 2013.10.15
쓰레드  (0) 2013.10.14

댓글()

Dependency Injection, DI - 의존성 주입.

http://cafe.naver.com/jjdev/247

1. 의존성 주입


 - 의존성 주입(Dependency Injection, DI) : 어느 A객체를 필요로 하는 B객체는 A객체에 의존성을 가지고 있다. 필요로 하는 객체를 소스코드로 직접 객체 생성을 구현하지 않고, 다른 방법으로 객체를 주입 시켜주는 것. 마틴파울러는 세 가지의 의존성 주입패턴을 제시하였다.


* 생성자 주입 : 필요한 의존성을 모두 포함하는 클래스의 생성자를 만들고 그 생성자를 통해 의존성을 주입한다.

* Setter를 통한 주입 : 의존성을 입력받는 세터(Setter) 메소드를 만들고 이를 통해 의존성을 주입한다.

* 인터페이스를 통한 주입 : 의존성을 주입하는 함수를 포함한 인터페이스를 작성하고 이 인터페이스를 구현하도록 함으로써 시에 이를 통하여 의존성을 주입한다.



1. 인터페이스 구현.


1
2
3
4
5
6
7
8
9
10
11
//인터페이스.
public interface Dao {
    public void getList();
}
//인터페이스 Dao를 구현한 OracleDao.
public class OracleDao implements Dao{
    @Override
    public void getList(){
        System.out.println("OracleDao.getList() - Oracle DB에 접근합니다.");
    }
}


 1
2
3
4
5
6
7
8
public class OracleService{
    public void getList(){
        System.out.println("OracleService.getList() - OracleDao.GetList() 를 호출합니다.");
        Dao dao = new OracleDao();
          dao.getList();
        System.out.println("OracleService.getList() - Dao에서 데이터를 받아 Controller에게 넘져줍니다.");
    }
}


- dao는 OracleDao객체가 되었다. 만약 OracleDao의 클래스명칭이 변경 되었을때 하나만 변경하면 된다.


2. Setter.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class ListController {
    public void doGet(){
        System.out.println("Controller - OracleService를 호출합니다.");
          OracleService service = new OracleService();
          service.serDao(new OracleDao()); //setter를 통해 서비스에 Dao를 주입 시켜주었다.
        service.getList();
        System.out.println("Controller - Service에서 데이터를 받아 View에 넘겨줍니다.");
    }
}
    
public class OracleService{
   Dao dao;
 
   public void setDao(Dao dao){
   this.dao = dao;
   }
 
    public void getList(){
        System.out.println("OracleService.getList() - OracleDao.GetList() 를 호출합니다.");
          dao.getList();
        System.out.println("OracleService.getList() - Dao에서 데이터를 받아 Controller에게 넘져줍니다.");
    }
}

 


- ListController에서 Service를 생성할때 Dao를 주입 시켜주었다.

Service에는 Dao를 생성하지 않아도 직접 생성한 것과 같은 결과가 나온다.

즉, Service와 Dao를 동시에 구현을 할때 Dao가 전부 구현할 때 가지 Service는 기다리지 않아도(먼저 구현이 끝나도), 혹은 Dao가 변경되더라도 따로 Service를 수정 할 필요가 없다는 것이다.


3.생성자를 이용.


-Setter와 동일. service를 생성할때 dao를 주입 시키면 된다.


'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

Maven  (0) 2013.10.18
Transaction(트랜젝션) - 어떠한 과정을 한 묶음으로 처리하는 것.  (0) 2013.10.17
Collection - List 배열, Set 셋  (0) 2013.10.15
쓰레드  (0) 2013.10.14
디자인 패턴  (0) 2013.10.14

댓글()