728x90
반응형

Spring DI ( Dipendency Injection ) 을 이용하여 객체를 조립하는 방법에 대해 알아보자.

기본적으로 DI 를 이용한 bean 생성은 내부적으로 싱글톤 패턴을 이용해 객체를 인스턴스화 한다.

Spring DI 를 사용하지 않을시에 는 아무리 인터페이스의 다형성을 이용하여 유연한 코드를 작성하였다하여도

자식클래스의 인스턴스 를 변경하게 될수있는데 DI 패턴을 이용하면 그 문제를 해결할 수 있다, 


test01.xml

<?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.xsd">


<!-- OracleDao 를 생성해라 -->

<bean name="daoOra" class="test.dao.OracleDao"/>

<bean name="daoMy" class="test.dao.MysqlDao"/>

<!-- MyController 를 생성하고 OracleDao 를 주입해라.  -->

<bean name="controller" class="test.controller.MyController">

<!--  위에서 생성한 daoOra 를 멤버변수 dao 에 주입해라. -->

<!-- value = 문자열 , ref = 객체 참조값 -->

<!-- <property name="dao" ref="daoOra"/> -->

<property name="dao" ref="daoMy"/>

</bean>

<!-- 

[[ scope 속성 ]]

- 스프링은 기본적으로 객체를 싱글톤객체로 생성한다.

- singleton : 객체를 하나만 생성(싱글톤 객체로 생성)

- prototype : 객체를 사용할때마다 생성

- request : 클라이언트가 요청할때마다 생성 ( WebApp 에서만 사용 )

- session : 세션에서만 가능 ( WebApp 에서만 사용 )

-->

<bean name="oracleDao" class="test.dao.OracleDao"

scope="prototype">

</bean>

</beans>


CommonDao.java

package test.dao;

// DAO가 가져야할 기능들의 목록을 정의

public interface CommonDao {

// interface 에서의 메서드는 기본적으로 public 임.. 

void insert( String data );

void update( String data );

void delete( String data );

void select( String data );

}


MysqlDao.java

package test.dao;

public class MysqlDao implements CommonDao {

@Override

public void insert(String data) {

// TODO Auto-generated method stub

System.out.println("mysql을 이용하여 "+data+" 를 추가");

}

@Override

public void update(String data) {

// TODO Auto-generated method stub

System.out.println("mysql을 이용하여 "+data+" 를 수정");

}


@Override

public void delete(String data) {

// TODO Auto-generated method stub

System.out.println("mysql을 이용하여 "+data+" 를 삭제");

}

@Override

public void select(String data) {

// TODO Auto-generated method stub

System.out.println("mysql을 이용하여 "+data+" 를 조회");

}

}


OracleDao.java

package test.dao;

public class OracleDao implements CommonDao {

public void insert( String data ) {

System.out.println(data+"를 추가 했습니다.");

}

public void delete( String data ) {

System.out.println(data+"를 삭제 했습니다.");

}

public void select( String data ) {

System.out.println(data+"를 조회 했습니다.");

}

public void update( String data ) {

System.out.println(data+"를 수정 했습니다.");

}

}


MyController.java

package test.controller;

import test.dao.CommonDao;

public class MyController {

// 다형성을 이용

private CommonDao dao;// = new OracleDao();

// 스프링이 생성한 객체를 주입받아야 하므로 setter 메소드가 필요하다.

public void setDao( CommonDao dao ) {

this.dao = dao;

}

public void insert( String data ) {

dao.insert(data);

}

public void delete( String data ) {

dao.delete(data);

}

public void update( String data ) {

dao.update(data);

}

public void select( String data ) {

dao.select(data);

}

}



TestMain.java

package test.main;


import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;


import test.controller.MyController;

import test.dao.OracleDao;


public class TestMain {


public static void main(String[] args) {

String res = "test/main/test01.xml";

ApplicationContext context = 

new ClassPathXmlApplicationContext(res);

// spring 은 기본적으로 싱글턴으로 객체를 생성

MyController controller = 

(MyController)context.getBean("controller");

controller.select("이상훈");

controller.delete("이상훈");

controller.update("이상훈");

controller.insert("이상훈");

MyController controller1 = 

(MyController)context.getBean("controller");

// 아래 두객체는 같은 객체 임 기본 싱글턴 이기때문..

System.out.println("controller : "+controller);

System.out.println("controller1 : "+controller1);

// Bean 설정파일에서 scope="prototype" 옵션을 주었으므로 객체를 

// 사용할떄마다 객체를 계속 생성한다. 아래 두객체는 다른 객체

OracleDao oracle = (OracleDao)context.getBean("oracleDao");

System.out.println("oracle : "+oracle);

OracleDao oracle1 = (OracleDao)context.getBean("oracleDao");

System.out.println("oracle : "+oracle1);

}

}


[출력결과]

간단하게 생성을 해보았는데 TestMain.java 의 context.getBean(); 인스턴스를 가져오고 반환형이 Object 이기 때문에 모든 클래스타입으로의 형변환이 가능하다.


728x90
반응형
728x90
반응형

1. 헤더에 메타태그로 직접 기술하는방법

<meta http-equiv="X-UA-Compatible" content="IE=8" />

2. jsp 표준객체를 이용하여 헤더에 set 해주는방법 

<script> 

window.onload = function{

function agentChange(){

if(navigator.userAgent.match(/Trident\/(\d.\d)/i)[1] == '6.0'){

<%

response.setHeader("X-UA-Compatible", "IE=8");

%>

}

}

}

</script> 


결론

익스플로러 9 나 10이전에 만들어진 웹사이트들의 경우 익스플로러8에 맞게끔 제작이되어있어서 

자바스크립트나 몇가지 태그들이 안먹히는 경우들이 있다. 

보통은 1번의 방법으로 처리를 하는데 간혹가다가 먹히지 않는 사이트들이 더러 있다 -ㅅ-;; 

그럴 경우에 자바에서 제공하는 setHeader 를 이용하여 렌더링 방식을 변경하는 방법이 있다. 

2번 방식대로 하게되면 1번에서 안될경우에도 처리가 되는것으로 보인다. 

728x90
반응형
728x90
반응형

<!DOCTYPE html>

<html>

<head>

<meta charset="EUC-KR">

<title>Insert title here</title>

<script>

function showResult() {

var a = document.getElementById("num1");

var b = document.getElementById("num2");

var c = parseInt(a.value)+parseInt(b.value);    //    parseInt 를 이용하여 문자열을 숫자로 변환

var d = document.getElementById("num3");

d.value = c;

}

</script>

</head>

<body> 

<input type="text" id="num1"/>+

<input type="text" id="num2"/>=

<input type="text" id="num3"/>

<br/>


<input type="button" value="두수합" onclick="showResult();"/>



</body>

</html>




[결과] 




728x90
반응형

+ Recent posts