스프링 프레임워크 (4) 설치 및 지시서 생성, 기능

넙데데맨·2022년 4월 14일
0
post-thumbnail

Spring 설치

  1. Eclipse Marketplace에 sts 검색
  2. Spring add-on 설치
  3. Eclipse 재시작

스프링에게 전달한 조립 지시서를 만들어야 함
-> XML 파일, 어노테이션 형태
1. 패키지 우클릭
2. New - Others - Spring Bean Configuration File 선택

3. 지시서로 사용할 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">


</beans>

의존성 주입 예시

Exam.java

package spring.di.entity;
public interface Exam {
	int total();
	float avg();
	
}

KimExam.java

package spring.di.entity;

public class KimExam implements Exam {
	private int kor;
	private int eng;
	private int math;
	private int com;
	
	@Override
	public int total() {
		// TODO Auto-generated method stub
		return kor+eng+math+com;
	}

	@Override
	public float avg() {
		// TODO Auto-generated method stub
		return total()/4.0f;
	}

}

ExamConsole

package spring.di.ui;

import spring.di.entity.Exam;

public interface ExamConsole {
	void print();
	void setExam(Exam exam);
}

GridExamConsole.java.


package spring.di.ui;

import spring.di.entity.Exam;

public class GridExamConsole implements ExamConsole {
	private Exam exam;
	public GridExamConsole() {
		
	}
	
	public GridExamConsole(Exam exam) {
		this.exam = exam;
	}

	@Override
	public void print() {
		System.out.println("┌─────────┬─────────┐");
		System.out.println("│  total  │   avg   │");
		System.out.println("├─────────┼─────────┤");
		 System.out.printf("│   %3d   │  %3.2f   │\n",exam.total(),exam.avg());
		System.out.println("└─────────┴─────────┘");

	}

	@Override
	public void setExam(Exam exam) {
		// TODO Auto-generated method stub
		this.exam = exam;
	}

}

InlineExamConsole.java

package spring.di.ui;

import spring.di.entity.Exam;

public class InlineExamConsole implements ExamConsole {
	private Exam exam;
	
	public InlineExamConsole() {
		
	}
	public InlineExamConsole(Exam exam) {
		this.exam = exam;
	}

	@Override
	public void print() {
		// TODO Auto-generated method stub
		System.out.printf("total is %d, avg is %f\n",exam.total(),exam.avg());
	}
	@Override
	public void setExam(Exam exam) {
		// TODO Auto-generated method stub
		this.exam = exam;
	}


}

Program.java

package spring.di;

import spring.di.entity.Exam;
import spring.di.entity.KimExam;
import spring.di.ui.ExamConsole;
import spring.di.ui.GridExamConsole;
import spring.di.ui.InlineExamConsole;

public class Program {

	public static void main(String[] args) {
		Exam exam = new KimExam();
		ExamConsole console = new GridExamConsole(); 
		console.setExam(exam); // 생성자와 set메서드를 통한 결합
        
		console.print();
	}

}

Interface를 만들어 사용해 결합도를 낮춘다.
스프링 사용 시 변경점

		Exam exam = new KimExam();
		ExamConsole console = new GridExamConsole(); 
		console.setExam(exam);

이 부분을 스프링에게 맡기게 된다.
setting.xml

  <bean id="exam" class="spring.di.entity.KimExam" />
  <bean id="console" class="spring.di.ui.GridExamConsole">
    <property name="exam" ref="exam"></property>
  </bean>

bean

  • id : 어떤 이름으로 사용할 것인지
  • class : 어떤 클래스의 객체를 생성할 것인지 적는다
    -> 다른 패키지에 같은 이름의 클래스가 있을 수 있기 때문에 패키지명까지 입력해준다.

property
해당 객체의 필드들을 초기화할 수 있다.

  • name : setExam을 호출하기 위한 함수명 묵시적으로 exam으로 바꿔서 사용
  • value, ref : setter에 설정할 객체의 이름을 설정
    타입에 따라 value / ref 하나만 사용한다.
    위의 예에서는 <bean id="exam" class="spring.di.entity.KimExam" />가 reference기 때문에 ref 사용
<property name="exam" ref="exam"></property>
<property name="exam" value="30"></property>

다음과 같은 형태도 사용 가능
<property name="exam">
	<value>30</value>
</property>

STS가 제공하는 기능

  • Bean 클래스 이름 자동완성
  • 설정파일 생성 위자드 (XML
  • bean 의존관계 그래프
  • aop 적용 대상 표시
profile
차근차근

0개의 댓글