728x90
ApplicationContext : 지시서를 읽어서 생성해주고 조립해주는 인터페이스

 

지시서를 넘겨줄 때의 위치에 따라 사용

  • ClassPathXmlApplicationContext
  • FileSystemXmlApplicationContext
  • XmlWebApplicationContext
  • AnnotationConfigApplicationContext

'spring' 카테고리의 다른 글

DI 지시서 작성하기 (property, constructor-arg)  (0) 2021.08.29
Maven Repository 라이브러리 가져오기  (0) 2021.08.29
스프링 플러그인 설치하기, 파일추가하기  (0) 2021.08.26
IoC 컨테이너  (0) 2021.08.26
DI  (0) 2021.08.26
728x90

상단 메뉴 Help → Eclipse Marketplace...

 

spring 검색 → Spring Tools 3 install

 

전체 선택 후 Confirm >

 

동의 후  Finish

 

Restart Now

 


만들고자하는 Package 우클릭 → New → Other...

 

Spring폴더 → Spring Bean Configuration File → Next>

 

File name 입력 → Finish

'spring' 카테고리의 다른 글

DI 지시서 작성하기 (property, constructor-arg)  (0) 2021.08.29
Maven Repository 라이브러리 가져오기  (0) 2021.08.29
ApplicationContext의 종류  (0) 2021.08.29
IoC 컨테이너  (0) 2021.08.26
DI  (0) 2021.08.26
728x90
IoC(Inversion of Control) container : 역순으로 객체를 생성 하는 컨테이너

 

container : 주문서에 입력되어 있는 내용대로 객체를 생성해서 담는 그릇

 

조립순서 : 작은 부품 생성 -> 큰 부품 생성 -> 결합

 

 

'spring' 카테고리의 다른 글

DI 지시서 작성하기 (property, constructor-arg)  (0) 2021.08.29
Maven Repository 라이브러리 가져오기  (0) 2021.08.29
ApplicationContext의 종류  (0) 2021.08.29
스프링 플러그인 설치하기, 파일추가하기  (0) 2021.08.26
DI  (0) 2021.08.26
728x90
Dependency Injection (DI) : 종속성 주입

 

일체형 Composition has a

A 안쪽에서 B라는 부품을 직접 생성 

결합력이 높다

class A
{
	private B b;
    
    public A(){
    	b = new B();
    }
}

 

 

조립형 Association has a

A 안쪽이 아닌 외부에서 B라는 부품을 생성 

결합력이 낮다 -> 부품(Dependency)을 갈아끼우기(업데이트하기) 편하다 = 기업형에서 주로 선호

※ 부품을 쉽게 바꿀 수 있지만 조립해야된다는 번거로움이 있다. -> spring이 갖고있는 기본능력 DI

class A
{
	private B b;
    
    public A(){
    	//b = new B();
    }
    
    public void setB(B b) {
    this.b = b;
    }
}

 

 

조립형의 두 가지 방법

B b = new B();		//new B() -> Dependency
A a = new A();

a.setB(b);		//(b) -> Injection

 

Setter Injection

setter를 통해 조립

B b = new B();
A a = new A();

a.setB(b);

 

Construction Injection

생성자를 이용하여 조립

B b = new B();
A a = new A(b);

 


예제 1.

<자바코드에서 수작업으로 해보기>

package spring.di;

import spring.di.entity.Exam;
import spring.di.entity.NewlecExam;
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 NewlecExam();
		//InlineExamconsole, GridExamConsole이 exam객체를 조립 = DI
		ExamConsole console = new InlineExamConsole(exam);
//		ExamConsole console = new GridExamConsole(exam);
		console.print();
	}

}

 

package spring.di.entity;

public interface Exam {
	int total();
	float avg();
}

 

package spring.di.entity;

public class NewlecExam implements Exam {

	private int kor;
	private int eng;
	private int math;
	private int com;
	
	@Override
	public int total() {
		return kor + eng + math + com;
	}

	@Override
	public float avg() {
		return total() / 4.0f;
	}

}

 

package spring.di.ui;

public interface ExamConsole {
	void print();
}

 

package spring.di.ui;

import spring.di.entity.Exam;

public class InlineExamConsole implements ExamConsole {

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

	@Override
	public void print() {
		System.out.printf("total is %d, avg is %f\n", exam.total(), exam.avg());
	}
}

 

package spring.di.ui;

import spring.di.entity.Exam;

public class GridExamConsole implements ExamConsole {

	private Exam exam;
	
	public GridExamConsole(Exam exam) {
		this.exam = exam;
	}
	@Override
	public void print() {
		System.out.println("───────────────────");
		System.out.println("total ///// avg");
		System.out.printf("%3d   ///// %3.2f\n", exam.total(), exam.avg());
		System.out.println("───────────────────");
	}
}

[InlineExamConsole 실행결과]

total is 0, avg is 0.000000

 

[GridExamConsole 실행결과]

+ Recent posts