본문 바로가기
학습/SPRING

01~02 스프링 시작하기

by Elfen Lied 2022. 12. 19.
반응형

프로젝트 시작에 앞서서 간단한 정리

- 메이븐 프로젝트 생성

 

1. 스프링 시작하기

## 톰캣 서버 생성

1. 다이나믹 웹 프로젝트에서 메이븐 프로젝트 변환
	- Content Directory : WebContent
	- 기존의 src/main/webapp과 같음
	- 메이븐 프로젝트 변경후 spring-context 의존 라이브러리 추가
	
2. 메이븐 프로젝트 구조
	- /src/main/java : 자바 소스코드와 프로퍼티 파일
	- /src/main/resources : 자바 소스코드 외 프로퍼티 파일, xml파일
		- resources 생성 후 메이븐 업데이트 -> 패키지 형태로 나타남
		
	- /src/test/java : 테스트 코드
	- /src/test/resources : 테스트 코드에 필요한 자원(프로퍼티 파일, xml파일)
		- 위 폴더 생성후 메이븐 업데이트 -> 패키지 형태로 나타남
	
	- /WebContent 또는 /src/main/webapp
		- /src/main/webapp : HTML, JS, CSS, JSP 등 클라이언트가 곧 요청할 수 있음
		- /src/main/webapp/WEB-INF : 클라이언트가 요청할 수 없음, 주로 설정파일이나 특정 서비스로직을 거쳐와야하는 것들
		
3. 예제코드
	- 클래스명 : chap02.Greeter
		- /src/main/java에 작성.
	-메인메서드를 이용한 실행 : MainGreeter.java
	- 스프링 활용
		- AppContext.java : 스프링빈 설정 정보를 관리하는 클래스 
		- SpringMain.java : 스프링 컨테이너에서 스프링빈을 가져옴
		
4. 싱글톤 객체
	- MainGreeter2.java : new 연산자가 생성하는 객체 (항상 새로운 객체 생성)
	- SpringMain2.java : 스프링 컨테이너가 생성하는 객체 (싱글톤 객체)

 

 

2. 스프링 시작하기_XML

## 톰캣 서버 생성

1. 다이나믹 웹 프로젝트에서 메이븐 프로젝트 변환
	- 프로젝트명 : chap02_xml
	- Content Directory : WebContent
	- 기존의 src/main/webapp과 같음
	- 메이븐 프로젝트 변경후 spring-context 의존 라이브러리 추가
	
2. 예제코드
	- 클래스명 : chap02.Greeter
		- /src/main/java에 작성.
	- 스프링 활용
		- /src/main/resources/applicationContext.xml : 스프링빈 설정 정보를 관리하는 XML파일
		- SpringMain.java : 스프링 컨테이너에서 스프링빈을 가져옴
		
4. 싱글톤 객체
	- MainGreeter2.java : new 연산자가 생성하는 객체 (항상 새로운 객체 생성)
	- SpringMain2.java : 스프링 컨테이너가 생성하는 객체 (싱글톤 객체)

 

 

- pom.xml

packagin과 build 사이에 dependencies 만들어서 메이븐 저장소에서 spring-context (버전 5.2.22)추가

`
`
	<packaging>war</packaging>

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.2.22.RELEASE</version>
		</dependency>
	</dependencies>

	<build>
`
`

 

 

- 클래스 생성  Greeter, MainGreeter, AppContext, SpringMain

 

 

- Greeter

package chap02;

public class Greeter {
	private String format;

	public String greet(String guest) {
		return String.format(format, guest); // format을 통해서 문자(quest)를 변경
	}

	public void setFormat(String format) {
		this.format = format;
	}
	
}

 

 

- MainGreeter

package chap02;

public class MainGreeter {
	public static void main(String[] args) {
		Greeter g = new Greeter(); // 객체생성
		g.setFormat("%s님 안녕하세요"); // 포멧 설정
		System.out.println(g.greet("joy"));
	}
}

 

 

- AppContext

package chap02;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration // 스프링 컨테이너가 참조하는 설정 정보 클래스
public class AppContext {

	// 스프링 컨테이너가 관리하는 객체를 스프링빈이라고 함
	
	// 스프링빈 설정
	@Bean // 스프링빈으로 관리될 객체를 반환함
	// @Bean의 name 속성을 지정하지 않으면 빈의 이름은 메서드 이름과 같다
	public Greeter greeting() { 
		Greeter g = new Greeter();
		g.setFormat("%s님 안녕하세요");
		return g;
	}
}

 

 

- SpringMain

package chap02;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class SpringMain {
	public static void main(String[] args) {
		// 메인메소드가 Greeter객체를 생성하지 않음
		
		// 스프링 컨테이너 생성 후 설정 정보 전달
		AnnotationConfigApplicationContext ctx = 
				new AnnotationConfigApplicationContext(AppContext.class);
		
		// 스프링 컨테이너가 생성한 스프링빈을 가져옴
		// getBean(빈이름, 빈타입)
		Greeter g = ctx.getBean("greeting", Greeter.class); // getBean(bean의 이름, 클래스 타입)
		System.out.println(g.greet("스프링"));
		ctx.close();
	}
}

 

 

- MainGreeter2 클래스 생성

package chap02;

public class MainGreeter2 {
	public static void main(String[] args) {
		Greeter g1 = new Greeter();
		Greeter g2 = new Greeter();
		
		System.out.println(g1);
		System.out.println(g2);
		System.out.println(g1 == g2);
	
	}
}

 

 

- SpringMain2 클래스 생성

AnotationConf~~~ 는 ACAC 대문자로 치고 컨트롤 스페이스바로 자동 완성하기

package chap02;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class SpringMain2 {
	public static void main(String[] args) {
		AnnotationConfigApplicationContext ctx = 
				new AnnotationConfigApplicationContext(AppContext.class);
		
		Greeter g1 = ctx.getBean("greeting", Greeter.class);
		Greeter g2 = ctx.getBean("greeting", Greeter.class);
		
		System.out.println(g1);
		System.out.println(g2);
		System.out.println(g1 == g2);
		
		ctx.close();
	}
}

스프링은 싱글톤 객체다.

 

** Greeter g1 = ctx.getBean(Greeter.class) 와 같이 빈 이름 지우고 반환 타입(MemberDao)만 적어도 찾아올수 있다.

단! 반환 타입이 같은게 다수 일경우 찾지 못하니 빈 이름도 다 작성하자

다수일 경우 아래와 같은 오류문구가 뜬다.

 

 


다이나믹 프로젝트 chap02_xml로 생성

Eclipse Market에서 sts3을 받아줌

이클립트 상단 Help 탭 -> Eclipse Marketplace

Trust 창이 뜨면 selectAll 한뒤에 계속 진행하면 됨.

재시작이 되고 ctrl + n 을 눌러 spring 검색

6가지가 나오면 제대로 깔린것

깔고 pom.xml 열어보면 하이라이트가 안되어있다.

기본적으로 xml로 파일을 읽어오지 않게 되어서 그렇다

설정에서 XML을 Default 로 바꿔준다.

 


 

앞전에 만들어둔 Greeter 클래스 복사해서 사용

- chap02 패키지 Greeter

Greeter를 빈으로 등록한다.

package chap02;

public class Greeter {
	private String format;

	public String greet(String guest) {
		return String.format(format, guest);
	}

	public void setFormat(String format) {
		this.format = format;
	}
	
}

 

 

 

 

- src / main / resources 폴더 생성

해당 위치에서 spring Bean Configuration 선택하고 

- applicationContext.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="greeter" class="chap02.Greeter"> 
		<property name="format" value="%s님 안녕하세요"></property>		
	</bean>
	<!-- 
		@Bean
		public Greeter greeter() {
		 	Greeter g = new Greeter();
		 	g.setFormat("%s님 안녕하세요");
		 	return g;
		}
	-->

</beans>

 

 

- chap02 패키지 SpringMain 클래스 생성

package chap02;

import org.springframework.context.support.GenericXmlApplicationContext;

public class SpringMain {
	public static void main(String[] args) {
		
		// 스프링 컨테이너 생성, 빈 설정정보 전달
		GenericXmlApplicationContext ctx = 
				new GenericXmlApplicationContext("classpath:applicationContext.xml");
		Greeter g = ctx.getBean("greeter", Greeter.class);
		System.out.println(g.greet("스프링"));
	}
}

 

반응형

댓글