TIL

조지성·2022년 3월 31일
0

TIL

목록 보기
51/78
post-thumbnail

2022.03.31

  • 이산수학 듣기
  • 스프링5 31 ~ 52P

스프링5 입문

메이븐 프로젝트

  • 메이븐 프로젝트에서 핵심은 pom.xml
  • pom.xml은 프로젝트에서 필요로 하는 의존 모듈이나 플러그인 등에 대한 설정을 담는다.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
		http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>sp5</groupId>
	<!-- 프로젝트의 식별자를 지정 - 프로젝트 이름과 동일하게 설정 -->
	<artifactId>sp5-chap02</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<dependencies>
		<!--5.2.2 RELEASE 버전의 아티팩드에 대한 의존을 추가-->
      	<!--메이븐은 한 개의 모듈을 아티팩트라는 단위로 관리
의존을 추가한다는 말은 자바 어플리케이션에서 클래스 패스에 모듈을 추한다는 것을 의미-->
      <!-- 클래스패스에  spring-context-5.2.2.RELEASE.jar를 추가하겠다. -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.2.2.RELEASE</version>
		</dependency>
	</dependencies>

	<build>
		<!-- 1.8 버전을 기준으로 자바 소스를 컴파일하고 결과 클래스를 생성 , 
		자바 컴파일러가 소스 코드를 읽을 때 사용할 인코딩은 utf-8 -->
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.7.0</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>utf-8</encoding>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

메이븐 리포지토리

  • 메이븐 로컬 리포지토리 : 로컬에서 해당 jar가 있는지 확인해서 있으면 가져옴
  • 원격 리포지토리 : 로컬에 없는 경우 메이븐 원격 중앙 리포지토리에서 가져옴

의존 전이

  • 의존한 아티팩트가 또다시 의존하고 있는 다른 아티팩트가 있다면 그 아티팩트도 함께 다운로드!

메이븐 기본 폴더 구조

  • src\main\java : 자바 소스 코드
  • src\main\resources : 자바 소스 이외의 다른 자원 파일
  • src\main\webapp : 웹 애플리케이션 기준폴더

예제 소스

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;
	}
}
//스프링 설정 파일
package chap02;

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

//스프링 설정 파일

@Configuration //해당 클래스를 스프링 설정 클래스로 지정
public class AppContext {
	
	
	@Bean // 해당 메서드가 생성하는 객체를 스프링이 관리하는 빈 객체로 등록
	//빈 - 스프링이 생성하는 객체
	public Greeter greeter() { // 메서드 이름은 빈 객체를 구분할 때 사용 
		//객체를 생성하고 알맞게 초기화 해야한다.
		Greeter g = new Greeter();
		g.setFormat("%s, 안녕하세요!");
		return g;
	}
}
//main메서드를 통해 스프링과 Greeter를 실행하는 자바 클래스
package chap02;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;


public class Main {

	public static void main(String[] args) {
		//AnnotationConfigApplicationContext : 자바 설정에서 정보를 읽어봐 빈 객체를 생성하고 관리
		// GenericXmlApplicationContext : XML로부터 객체 설정 정보를 가져온다.
		//생성자 파라미터에 설정파일 클래스를 넣어줌
		// 해당 클래스에서 bean으로 정리한 객체를 관리
		AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(chap02.AppContext.class);
		//빈 객체를 검색해서 객체를 리턴받음
		Greeter g = ctx.getBean("greeter", Greeter.class);
		String msg = g.greet("스프링");
		System.out.println(msg);
		ctx.close();
	}

}

Application context

  • ApplicationContext(BeanFactory)는 빈 객체의 생성,초기화,보관,제거 등을 관리하고 있어서 컨테이너 , 스프링 컨테이너 라고 부른다.
  • 스프링 컨테이너는 내부적으로 빈 객체와 빈 이름을 연결하는 정보를 갖는다.

싱글톤 객체

package chap02;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main2 {
	public static void main(String[] args) {
		AnnotationConfigApplicationContext ctx = 
				new AnnotationConfigApplicationContext(AppContext.class);
		Greeter g1 = ctx.getBean("greeter", Greeter.class);
		Greeter g2 = ctx.getBean("greeter", Greeter.class);
		System.out.println("(g1 == g2) = " + (g1 == g2));
		ctx.close();
	}
}
  • 별도 설정을 하지 않을 경우 스프링은 한 개의 객체만 생성

  • 이 때 빈 객체를 싱글톤 범위를 갖는다라고 표현

  • 스프링은 기본적으로 한 개의 @Bean 어노테이션 대해 한 개의 빈 객체를 생성

//스프링 설정 파일
package chap02;

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

//스프링 설정 파일

@Configuration //해당 클래스를 스프링 설정 클래스로 지정
public class AppContext {
	
	
	@Bean // 해당 메서드가 생성하는 객체를 스프링이 관리하는 빈 객체로 등록
	//빈 - 스프링이 생성하는 객체
	public Greeter greeter() { // 메서드 이름은 빈 객체를 구분할 때 사용 
		//객체를 생성하고 알맞게 초기화 해야한다.
		Greeter g = new Greeter();
		g.setFormat("%s, 안녕하세요!");
		return g;
	}
	
	
	@Bean
	public Greeter greeter1() { // 메서드 이름은 빈 객체를 구분할 때 사용 
		//객체를 생성하고 알맞게 초기화 해야한다.
		Greeter g = new Greeter();
		g.setFormat("%s, 안녕하세요!");
		return g;
	}
}
  • 해당 설정을 통해서 서로 다른 객체를 참조할 수 있도록 할 수 있다.
profile
초보 개발자의 성장기💻

0개의 댓글