프로젝트 시작에 앞서서 간단한 정리
- 메이븐 프로젝트 생성
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("스프링"));
}
}
'학습 > SPRING' 카테고리의 다른 글
13. 스프링 - Paging (0) | 2022.12.30 |
---|---|
07. 스프링 - 의존 자동 주입 (0) | 2022.12.22 |
06. 스프링 - 두 개 이상의 설정 파일 사용하기 (0) | 2022.12.21 |
04. 스프링 DI : 생성자 방식 (0) | 2022.12.21 |
03. 스프링 DI - 애노테이션 방식, XML 방식 (0) | 2022.12.19 |
댓글