빈의 객체 범위

JAVA/Java_DataBase 2013.10.23 23:27

지난번에 bean 사용법과 더불어 여러기능에 대해서 

한번 써본적이 있는거 같다. 


request에도 여러 설정이 있고 bean에도 여러설정이 있는데

scope라고 해서 빈의 속성을 결정해주는게 있다.

<bean id="jdbcDao" class="springtest.jdbcDao" scope="??"></bean>



범위 

 설명

 singleton

 스프링 컨테이너에 의해 한개의 빈 객체만 생성

 prototype

 빈을 사용할 때마다 객체를 생성 

 request

 HTTP 요청마다 빈 객체를 생성(WebApplicationContext에서만 적용) 

 session

 HTTP 세션마다 빈 객체를 생성(WebApplicationContext에서만 적용) 

 global-session

글로벌 HTTP 세션에 대해 빈 객체를 생성. 포틀릿을 지원하는 컨텍스트에 대해서만 적용가능 



*나도 퍼온거라 .. 마지막 부분꺼만 대체 무슨 말인지를 모르겠다;;


singleton 이란거는 디자인 패턴이나 이런곳에서 뒤져보면 많은 설명이 있지만 설명하자면


TYPE A                        TYPE B

String A = "B";               String A = "B";

String B = "B";               String B = new String("B");


타입A와 타입B의 차이라고 할 수 있는데


TYPE A                                     TYPE B

A -------------"B"                    A -------------- "B"

B -----------┘                        B ---------------"B"


여기서 싱글톤은 타입A와 같다고 생각하면 되겠다.

한번 생성이 되고 나면 계속해서 처음 객체를 생성한 것만을 리턴해준다.


prototype같은 경우는 타입B와 동일하다고 보면되고

request는 사용자가 어떤 행위를 하여서 서버에 요청이 들어갔을 경우에 생성이 된다.

session은 홈페이지에 접속한 사용자마다 세션이라는 것이 생성이되는데 그 세션마다 어떠한 빈을 생성하게 한다했을 경우에 설정하는 거 같고..


전체적으로 좀 부족한 설명이긴 한데 나도 배우는 입장이라 이해해주기를 바란다~

싱글톤 패턴의 경우에는 주의사항이 있다. 객체를 한번만 생성하기 때문에 매우 편리하지 않을까 하는 생각도 있는데 쉽게 풀어 설명하면 전역변수라고 생각하면 되겠다. 여기저기서 참조해서 사용할 수 있는

리딩이라던지 DBConnection을 리턴해준다던지의 용도로 사용하면 적절하지만 긴 시간동안 처리되는 작업 또는 공유적으로 처리되는 변수값들 또는 작업들을 싱글톤으로 지정했을 경우에는 


-상호 배제(mutual exclusion, Mutex, 뮤텍스)는 동시 프로그래밍에서 공유 불가능한 자원의 동시 사용을 피하기 위해 사용되는 알고리즘으로, 임계 구역(critical section)으로 불리는 코드 영역에 의해 구현된다.

공유 불가능한 자원의 예로는 동시에 실행되고 있는 프로그램간의 통신에 사용되는 비트 단위의 깃발, 계수기,  등이다. 문제는 스레드가 언제라도 정지되거나 시작될 수 있다는 것이다.

예) 프로그램의 일부분이 여러 단계를 거치면서 데이터를 읽고 쓰고 있다고 하자. 그런데 예상치 못한 사건 등에 의해 다른 스레드가 동작하기 시작했다. 첫 번째의 스레드가 쓰고 있는 영역에서, 이 두 번째의 스레드가 또 다른 작업을 시작한다면, 해당 영역의 값은 부적절하며 예상할 수 없는 상태에 놓이게 된다. 게다가 두 번째의 스레드가 값을 덮어 써버리기라도 한다면, 복구 불가능한 상태로 되고 만다. 그러므로 공유 데이터를 접근하는 프로그램 내부의 이른바 임계 구역이라는 부분은 홀로 수행되도록 보호되어야 하며, 다른 스레드가 동일한 부분의 프로그램을 수행해서 동일한 공유 데이터를 접근하는 것을 막아야 한다.

단일 프로세서 시스템에서, 상호 배제를 구현하는 가장 단순한 방법은 인터럽트를 억제해서 공유 데이터가 손상되는 것을 막는 것이다. 성능에 최소한의 영향을 주기 위해 인터럽트가 발생하지 않을 명령어 집합의 수는 가능한 최소로 유지시키는 것이 좋다.

상호배제를 처음으로 소프트웨어를 통해 해결한 사람은 네덜란드 수학자 데커(Dekker)이며 그 알고리즘을 데커의 알고리즘이라 한다.

상호배제는 교착상태의 4가지 필요조건 중 하나이다.

(출처 : 위키펌)


위와같이 상호배제의 문제가 발생할 것으로 추측된다. (직접 겪어본건 아니라서;;;)


저작자 표시 비영리 변경 금지
신고

'JAVA > Java_DataBase' 카테고리의 다른 글

AOP?  (0) 2013.11.07
빈의 라이프 사이클  (0) 2013.11.05
빈의 객체 범위  (0) 2013.10.23
객체간의 의존관계 설정.  (0) 2013.10.21
Spring API  (0) 2013.10.21
빈생성 및 사용  (0) 2013.10.21

객체간의 의존관계 설정.

JAVA/Java_DataBase 2013.10.21 22:56

public class Excutor {


public static void main(String[] args) {

// TODO Auto-generated method stub

ApplicationContext context = new FileSystemXmlApplicationContext("src/springtest/xmlPack/testxml.xml");

jdbcService test = (jdbcService)context.getBean("service");

test.serviceTest();

}

}


public class jdbcDao {

public jdbcDao(){}

public int insert(){

System.out.println("insert작업");

return 0;

}

public int delete(){

System.out.println("delete작업");

return 0;

}

}



public class jdbcService {

private jdbcDao jdbc;

public jdbcService (){

}

public jdbcService(jdbcDao jdbc){

this.jdbc = jdbc;

}

public void serviceTest(){

jdbc.insert();

jdbc.delete();

}

}


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

<bean id="testDao" class="springtest.testDao">

<constructor-arg value="testEEEE"></constructor-arg>

</bean>

<bean id="jdbcDao" class="springtest.jdbcDao">

</bean>

<bean id="service" class="springtest.service.jdbcService">

<constructor-arg ref="jdbcDao"></constructor-arg>

</bean>

</beans>



어려워 보일수도 있는데 xml설정을 보면 대충 답을 알수가 있다. 
jdbcDao라는 빈을 선언하고 id="service"를 보면 jdbcService클래스에 생성자 인수로 jdbcDao의 객체를 초기화로 집어넣는 것을 볼 수 있다. 이또한 constructor-arg를 아무것도 하지 않으면 기본 생성자로 생성이 되게 된다.

위와 같은 설정으로 jdbcDao와 jdbcService는 의존관계를 가지는 설정이 되게 된다.
만약 객체가 아니라 값일경우에는 constructor-arg ref가 아니라 value를 사용하면 된다.

또는 property로 설정이 가능한데
setXXX식의 매소드가 추가되어서 처리가 가능하다

public class jdbcService {

private jdbcDao jdbc;

public setjdbcDao(jdbcDao jdbc){

this.jdbc = jdbc;

}

public void serviceTest(){

jdbc.insert();

jdbc.delete();

}

}

<property name="jdbcDao" ref="jdbcDao"></property>

이런식으로 처리가 가능해진다.

그리고 한번만 그 객체를 쓴다고 가정하였을 경우에는

위 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">


<bean id="jdbcDao" class="springtest.jdbcDao">

</bean>

<bean id="service" class="springtest.service.jdbcService">

<property name="jdbcDao">

<bean id="jdbcDao" class="springtest.jdbcDao"></bean>

</property>

</bean>

</beans>

단점은 맨위에 있는 jdbcDao Bean과 다르게 여러번 사용이 불가능하며 임의로 다른 곳에서 긁어다가 쓸수가 없다는것이다 단지 지금위의 xml에 정의된대로 service라는 것에만 가능하다는 것이다.




저작자 표시 비영리 변경 금지
신고

'JAVA > Java_DataBase' 카테고리의 다른 글

빈의 라이프 사이클  (0) 2013.11.05
빈의 객체 범위  (0) 2013.10.23
객체간의 의존관계 설정.  (0) 2013.10.21
Spring API  (0) 2013.10.21
빈생성 및 사용  (0) 2013.10.21
DI 의존성 주입.  (0) 2013.10.15

Spring API

JAVA/Java_DataBase 2013.10.21 22:24

http://docs.spring.io/spring/docs/3.1.4.RELEASE/javadoc-api/


저작자 표시 비영리 변경 금지
신고

'JAVA > Java_DataBase' 카테고리의 다른 글

빈의 객체 범위  (0) 2013.10.23
객체간의 의존관계 설정.  (0) 2013.10.21
Spring API  (0) 2013.10.21
빈생성 및 사용  (0) 2013.10.21
DI 의존성 주입.  (0) 2013.10.15
IS-A와 HAS-A  (0) 2013.10.11

빈생성 및 사용

JAVA/Java_DataBase 2013.10.21 22:18

Excutor.java 

public class Excutor {


public static void main(String[] args) {

// TODO Auto-generated method stub

ApplicationContext context = new FileSystemXmlApplicationContext("src/springtest/xmlPack/testxml.xml");

testDao test = (testDao)context.getBean("testDao");

test.printing();

}


}


testDao.java

public class testDao {

public String msg;

public testDao(){};

public testDao(String msg)

{

this.msg = msg;

}

public void printing()

{

System.out.println("EEEEE" + msg);

}

}



testXml.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">

<bean id="testDao" class="springtest.testDao">

<constructor-arg value="testEEEE"></constructor-arg>

</bean>


</beans>




스프링은 bean으로 관리한다 그래서 xml에 bean의 이름을 정해주고 getBean("beanID이름")을 넣어줘서 불러준다. testXml.xml을 보면 testDao라고 있는데 저기에 <constructor-arg value=""></constructor-arg>가 없을 경우 객체를 생성시 testDao의 기본 생성자인 testDao(){};에 의해 생성되게 된다.


저작자 표시 비영리 변경 금지
신고

'JAVA > Java_DataBase' 카테고리의 다른 글

객체간의 의존관계 설정.  (0) 2013.10.21
Spring API  (0) 2013.10.21
빈생성 및 사용  (0) 2013.10.21
DI 의존성 주입.  (0) 2013.10.15
IS-A와 HAS-A  (0) 2013.10.11
SPRING TOOL SUITE 설치하기  (0) 2013.10.01

DI 의존성 주입.

JAVA/Java_DataBase 2013.10.15 00:41

DI 의존성주입이라고 하던데


어렵게 설명해봐야 뭔말인지도 모를테고 핵심만 아는것이 중요하다고 생각된다.


여기저기 여러설명이 있는데 


읽어보다보니 헷갈려서 그냥.. 내가 알아서 정리하고 느낀 내용만 쓰려고한다.


쉽게 말하면


그 뭐지..


그거 있잖아 자판기인데 과자도 팔고 음료수도파는 그런자판기


그걸 인터페이스라고 생각해보자



자판기 = 인터페이스


사람 = 사용 클래스


여기서 중요한건 이 사람이 과자를 먹을지 음료수를 먹을지는 돈넣고 눌러야 안다는 거지


과자 = 인터페이스 상속 받은 클래스 A

음료수 = 인터페이스 상속 받은 클래스 B


A,B가 있는데 이사람이 여기서 공통적으로 해야되는 것은 누르는 행위지

그럼 그 공통 행위를 push()메소드라고 가정하면


                                             자판기 인터페이스

                                             *push() 메소드


                       자판기 인터페이스 상속    자판기 인터페이스 상속

                                과자 클래스                 음료수 클래스

           push()메소드(출력값 "과자과자")     push()메소드(출력값 "음료음료")


로 기본 적으로 구조를 생각한다음


사람 클래스

선택 메소드 {

    자판기인터페이스 자판 = new 과자클래스();

    자판.push();

    자판 = new 음료수클래스();

    자판.push();

}

이렇게 쓸수 있다는거지.

소스는 첨부해서 올릴께 발로 만든거라 유심히 보진마;;

대충봐;;

자판기.zip



저작자 표시 비영리 변경 금지
신고

'JAVA > Java_DataBase' 카테고리의 다른 글

Spring API  (0) 2013.10.21
빈생성 및 사용  (0) 2013.10.21
DI 의존성 주입.  (0) 2013.10.15
IS-A와 HAS-A  (0) 2013.10.11
SPRING TOOL SUITE 설치하기  (0) 2013.10.01
mysql 설치 및 DATABASE생성  (0) 2013.09.28

IS-A와 HAS-A

JAVA/Java_DataBase 2013.10.11 11:59

IS - A

상속 관계를 지칭

창은 무기이다(IS-A) 그래서 창은 무기를 상속해야 한다.




 <Interface>

 Weapon

 attack()

 

interface 상속


Spear 

 attack()



Has-A

구성과 집합을 지칭.

유닛은 무기를 가지고있다(Has-A). 그래서 유닛은 무기 객체로 구성될 수 있다.


 <Interface>

 Weapon

 attack()

 

interface 상속


Spear 

 attack()


Spear를 상속 받음


unit 

클래스변수 

 메소드 ...


저작자 표시 비영리 변경 금지
신고

'JAVA > Java_DataBase' 카테고리의 다른 글

빈생성 및 사용  (0) 2013.10.21
DI 의존성 주입.  (0) 2013.10.15
IS-A와 HAS-A  (0) 2013.10.11
SPRING TOOL SUITE 설치하기  (0) 2013.10.01
mysql 설치 및 DATABASE생성  (0) 2013.09.28
버블정렬  (0) 2013.09.16

SPRING TOOL SUITE 설치하기

JAVA/Java_DataBase 2013.10.01 23:41

SPRING 프로젝트를 시작하기에 앞서서

관련 툴을 까는게 좋겠다 싶어서 설치를 하려고한다

기존에 쓰던 Eclipse에 플러그인을 설치해서 사용해도 되지만

workspace를 따로 만든다 하더라도 플러그인 때문에 귀찮아질수도 있으므로

그냥 spring개발 업체의 사이트에가서 다운받는게 편하다.


먼저 이렇게 사진이 있는데 두가지 경우가 있다

spring tool suite가 있고 groovy/grails tool suite가 있는데 당황할 필요는 없다.

groovy가 뭐였는지 기억이 날랑 말랑 하는데 maven이랑 비슷한걸로 알고 있다

그냥 쉽게 생각해보면 외부라이브러리를 받는걸 편하게 해주는거 정도 생각하는데 편할듯하다

*다운로드 주소 : http://spring.io/tools

저기서 spring tool suite가 있다. 그걸 다운로드를 클릭!


**나도 이순간 다운로드 중이다.. 다운로드중에 할게 없으니 왜 이넘을 설치해야 편한가에 대하여 이일민 아저씨 책에 나온 내용을 잠시 쓰겠다.

sts는 최신 이클립스를 기반으로 주요한 스프링 지원플러그인과 관련 도구를 모아서 스프링 개발에 최적화되도록 만든거란다. 뭐 이야기를 종합하자면 플러그인의 호환성 문제를 잘 처리해주고 고장안나게 도와준다 정도 생가하면 되겠다.


자 다운로드가 완료 되었다

계속 진행하겠다.


그냥 next질만 해도 되긴 된다

next하다보면 jdk패스를 묻는곳이 나오는데

당황하지말고 어디 찾지말고 자기가 설치한 jdk폴더를 골라서 ok를 해주자



기본적으로 64bit를 쓰는 사람은 programe files에 보면 java가 있다 자기가 설치한 버전을 참고해서 고르면 된다

혹여 내가 몇 버전을 쓰는지 모르면 cmd(console or 도스창이라고도함)에 java -version 이라고 치면 나온다 대부분 jdk를 설치하면 자동 패스를 잡긴잡고 알아서 설정하지만 안나오면 java_home path를 컴퓨터 환경변수에 등록하는 방법을 찾아서 설정해주기를 바란다.



자 다운받은걸 실행한후에 저딴 메시지가 나온다 

뭐 해석 굳이 하자면 내가 선택한 jdk가 64비트다 32비트 설치가 필요하다 그다음엔

잘 해석이 안되는데 jdk를 어디서든지 쓰게 할꺼냐 이런건가? 여튼 쌩까고 진행했다.


여튼 설치 완료 되었다는 메시지가 나왔다 

이제 실행해봐야한다.

만약 위에 경고 메시지때문에 뭐가 안되면 64비트를 찾아서 다시 재설치 해주는게 나을꺼 같다.



** 혹여 영어를 못읽어서 못찾는 사람들을 위해서 링크랑 스샷을 남겨둔다.






저작자 표시 비영리 변경 금지
신고

'JAVA > Java_DataBase' 카테고리의 다른 글

DI 의존성 주입.  (0) 2013.10.15
IS-A와 HAS-A  (0) 2013.10.11
SPRING TOOL SUITE 설치하기  (0) 2013.10.01
mysql 설치 및 DATABASE생성  (0) 2013.09.28
버블정렬  (0) 2013.09.16
Dao(Data Acess Pattern)개념.  (0) 2012.07.01


티스토리 툴바