2016년 9월 27일 화요일

01day Spring

패턴 : 클래스 형태를 만드는 방법론

  • model1 / model2
  • MVC
  • SingleTon
  • ...
  • 프레임워크 - 라이브러리
    • 스프링(자바에서 대형 어플리케이션을 만들때 효율적임)
    • ...

스프링
https://spring.io/

전자정부 프레임워크
http://www.egovframe.go.kr/


세팅
spring 폴더를 만들고, eclipse와 tomcat-apache을 새로 받음
eclipse 기본설정 UTF-8으로 바꿈
서버를 아파치8로 설정해줌

eclipse market place에서 sts검색
설치완료하면 spring 아이콘 생김
property에 spring생김

DI (Dependency Injection) 의존성 주입
  • 클래스간의 관계를 xml 중심으로 기술 방법
  • 클래스간의 관계를 xml이 만들어줌
Spring Library 가져오는 방법
  • 수동 다운로드 받아서
  • 전용다운로드 툴을 사용하는 방법 maven / gradle

Spring 프로젝트 폴더 만듦
스프링 라이브러리 추가
자바폴더와 스프링 폴더가 J, S 마크로 구분됨

1. 스프링으로 간단하게 hello 프로젝트 만들기
폴더구조


HelloSpring.java 클래스 만듦
package spring;

public class HelloSpring {
	public void sayHello(String name){
		System.out.println(name + "님 안녕하세요");
	}
}

context.xml Bean 만듦

<?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 name="helloBean" class="spring.HelloSpring" />

</beans>

HelloSpringMain.java 메인 클래스 만듦
package spring;

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 HelloSpringMain {

	public static void main(String[] args) {
		// context bean 경로 설정
		Resource resource = new ClassPathResource("spring/context.xml");
		//HelloSpring instance 과정이 없어짐
		BeanFactory beanFactory = new XmlBeanFactory(resource);
		
		HelloSpring helloSpring = (HelloSpring)beanFactory.getBean("helloBean");
		helloSpring.sayHello("홍길동");
	}

}

HelloSpring.java & HelloSpringMain.java 둘의 관계를 context.xml이 만들어줌


2. 똑같은거 자바프로젝트와 비교
자파프로젝트 폴더구조

HelloSpring.java
package springEx01;

public class HelloSpring {
	public void sayHello(String name){
		System.out.println(name + "님 안녕하세요");
	}
}

HelloSpringMain.java
package springEx01;

public class HelloSpringMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		HelloSpring helloSpring = new HelloSpring();
		helloSpring.sayHello("홍길동");
	}

}


3. Bean.xml 을 부르는 두번쨰 방법 (현재 많이 사용)

HelloSpring.java
package spring;

public class HelloSpring {
	public void sayHello(String name){
		System.out.println(name + "님 안녕하세요");
	}
}

context.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 name="helloBean1" class="spring.HelloSpring" /><!-- name 메인에서 사용할 이름 class 실제클레스명 -->
    <bean id="helloBean2" class="spring.HelloSpring" /><!-- id : name과 역할 같음 -->

</beans>

HelloSpringMain2.java
package spring;

import org.springframework.context.support.GenericXmlApplicationContext;

public class HelloSpringMain2 {

	public static void main(String[] args) {
		//현재 xml가져오는 방법
		GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:spring/context.xml");
		//XmlBeanFactory는 퇴출됨
		//BeanFactory beanFactory = new XmlBeanFactory(resource);
		
		//HelloSpring helloSpring = (HelloSpring)ctx.getBean("helloBean2");
		HelloSpring helloSpring = (HelloSpring)ctx.getBean("helloBean2", HelloSpring.class);
		helloSpring.sayHello("홍길동");
		
		ctx.close(); //ctx 닫아주는게 좋음
	}

}


4. 원격으로 라이브러리 받는 프로젝트 만들기

프로젝트 maven 만듦

폴더 아이콘에 M이 생김

porn.xml 에서 프로젝트 버전 관리를 할 수있음 버전을 높이면 자동적으로 원격에서 다운로드가 일어남


HelloSpring.java
package spring;

public class HelloSpring {
	public void sayHello(String name){
		System.out.println(name + "님 안녕하세요");
	}
}

context.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-4.1.xsd">

    <bean id="helloBean" class="spring.HelloSpring" />
    
</beans>

HelloSpringMain.java
package spring;

import org.springframework.context.support.GenericXmlApplicationContext;

public class HelloSpringMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:spring/context.xml");
		
		HelloSpring helloSpring = (HelloSpring)ctx.getBean("helloBean", HelloSpring.class);
		helloSpring.sayHello("홍길동");
		
		ctx.close();
	}

}


5. 인터페이스를 통한 구현

폴더구조


HelloSpringInter.java 인터페이스 만들기
package spring2;

public interface HelloSpringInter {
	public abstract void sayHello(String name);
}

HelloSpring1.java 메소드 클래스 인터페이스 상속받아서 완성함

package spring2;

public class HelloSpring1 implements HelloSpringInter {

	public HelloSpring1() {
		// 함수호출보다 먼저 처리할 것을 생성자에 넣음
		System.out.println("생성자 호출 1");
	}
	
	@Override
	public void sayHello(String name) {
		System.out.println("안녕 " + name);
	}

}

HelloSpring2.java 메소드 클래스 인터페이스 상속받아서 완성함
package spring2;

public class HelloSpring2 implements HelloSpringInter {
	
	public HelloSpring2() {
		// 함수호출보다 먼저 처리할 것을 생성자에 넣음
		System.out.println("생성자 호출 2");
	}
	
	@Override
	public void sayHello(String name) {
		System.out.println("Hello " + name);
	}

}

context.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-4.2.xsd">

    <bean id="helloBean1" class="spring2.HelloSpring1"></bean>
    <bean id="helloBean2" class="spring2.HelloSpring2"></bean>
</beans>

HelloSpringMain.java
package spring2;

import org.springframework.context.support.GenericXmlApplicationContext;

public class HelloSpringMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:spring2/context.xml");
		
		HelloSpringInter hello = (HelloSpringInter)ctx.getBean("helloBean1");
		hello.sayHello("홍길동");
		
		hello = (HelloSpringInter)ctx.getBean("helloBean2");
		hello.sayHello("박문수");
	}

}


댓글 없음:

댓글 쓰기