Spring Framework



<!-- http://mvnrepository.com/artifact/org.springframework/spring-context -->

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-context</artifactId>

    <version>4.1.6.RELEASE</version>

</dependency>


<!-- http://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.1.6.RELEASE</version>
</dependency>

스프링 컨테이너 -> 객체관리 컨테이너

기존 방법은 필요할 때 객체를 생성해서 사용

스프링 컨테이너에 사용할 객체를 맡겨두고 필요할때 얻어다가 사용!

스프링 컨테이너도 하나의 자바 객체이다.


의존성 주입 : 전략패턴 (리스코프치환+의존성역전원칙)이 적용된 상태에서 객체를 만들어서 넣어주는 작업


스프링 컨테이너를 만드는 방법 -> 스프링 컨테이너 설정파일을 설정하고, 

- xml을 이용하는 방법(주로 사용)

- 자바코드만을 이용하는 방법


스프링 컨테이너도 자바 객체라 그랬고, 이아이는 ApplicationContext의 구현 클래스로 만들어져 있음

GenericXmlApplicationContext도 있고, FileSystemXmlApplicationContext


<bean id="robot" class="di03.Robot" lazy-init="true"></bean>

 lazy-init 속성을 true로 주면 빈 객체는 컨테이너 빌드시 생성 안하고, 처음으로 getBean요청이 있을때 생성함


<bean id="robot" class="di03.Robot" scope="prototype"></bean>

getBean할 때 마다 딴놈줌, default값은 싱글턴


<bean id="robot" class="di04_2.Robot"> <constructor-arg name="attack" ref="punchAttack"/> </bean>

기본 생성자가 아닌 생성자를 통해 객체를 생성하려면 어떤 매개변수를 받는 생성자에 어떤 값을 넣을지를 constructor-arg태그를 통해 지정해줘야함


<bean id="singleton" class="di04_2.Singleton" factory-method="getInstance"></bean>

기본 생성자도 없고 다른 생성자도 없는 아이를 빈으로 등록하려면 객체를 생성해주는 팩토리메소드를 factory-method 속성에 지정해주셔야됨

' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글

Day52 jdbcTemplate // MyBatis  (0) 2016.05.31
Day51 스프링 JDBC  (0) 2016.05.30
Day48 DB / Spring Framwork  (0) 2016.05.25
Day47 MVC, 커맨드 패턴  (0) 2016.05.24
Day46 자바스크립트  (0) 2016.05.24

템플릿 메소드 패턴



//부모클래스에서 템플릿에 해당하는 메소드(fight)가 정의되있고 fight 내용중 세부 attack,move하는 기능에 대한 정의는 추상메소드로 남겨둔채


//자식클래스에서 세부 attack,move를 구현해서 템플릿을 완성하는 방법


package d02;


public abstract class Robot {

protected String name;

public void fight(){

System.out.println(name +  "가 전투를 시작합니다.");

attack();

move();

attack();

System.out.println(name + "가 전투를 종료합니다.");

}

public abstract void attack();

public abstract void move();

}

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

package d02;


public class TaekwonV extends Robot{


// String name = "태권브이";

public TaekwonV(){

name = "태권브이";

}

public void attack(){

System.out.println("펀치로 공격!");

}

public void move(){

System.out.println("날아서 이동!");

}

}


전체 윤곽인 구조(템플릿)에 대한 재사용은 잘 이뤄지지만, 세부구형기능에 대한 재사용은 이뤄지지 않음.


기능을 재사용하려면, 일단 기능을 분리해야됨. <-- 기능을 구현하는 독립적인 클래스로 구현.



단일 책임 원칙 : 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다. 클래스가 제공하는 모든 기능은 이 책임과 주의 깊게 부합해야 한다.




단일 책임 원칙의 장점 단일 책임 원칙을 지키려고 하다 보면 인터페이스 등을 도입하게 되며여러 디자인 패턴을 적용해서 설계를 우아하게 만들게 된다그러면서 자연스럽게 모듈간의 결합이 느슨해진다이것은 어떤 변경이 필요할 때 수정 대상을 명확하게 하는 결과를 가져온다.


의존 관계 역전 원칙 :  소프트웨어 모듈들을 분리하는 특정 형식을 지칭한다. 이 원칙을 따르면, 상위 계층(정책 결정)이 하위 계층(세부 사항)에 의존하는 전통적인 의존 관계를 반전(역전)시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다.


리스코프 치환 원칙 : 컴퓨터 프로그램에서 자료형 S가 자료형 T의 하위형이라면 필요한 프로그램의 속성(정확성, 수행하는 업무 등)의 변경 없이 자료형 T의 객체를 자료형 S의 객체로 교체(치환)할 수 있어야 한다는 원칙이다. 



' IOT 기반 응용 SW과정 > Java, Eclipse ' 카테고리의 다른 글

Day17 제네릭과 컬렉션  (0) 2016.04.05
Day16 패키지  (0) 2016.04.04
Day 14 형변환 , 추상클래스  (0) 2016.03.31
Day13 상속  (0) 2016.03.30
Day12 변수  (0) 2016.03.29

+ Recent posts