일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- FileZilla다운로드
- calc.minus
- push오류
- calc.plus
- Math.round()
- Excel
- 주석이 먹히지 않을 때
- selectoptions
- 1521
- slideUp
- Parent
- toFixed()
- 증가값
- removeClass
- FileZilla설치
- 파일질라설치오류
- Math.ceil()
- index %
- ctrl+/
- Git
- is_check
- hide
- SUB함수
- Math.floor()
- selectedIndex
- addClass
- 파일질라다운로드
- 소스트리인증실패
- 파일질라설치
- excel중복체크
- Today
- Total
잡동사니에도 사랑을
[21.11.08] (chapter01) 본문
★ DI (Dependency Injection)
스프링의 핵심 개념
객체사이의 의존 관계를 자기 자신이 아닌 외부에 의해서 설정된다는 개념이다
스프링에서는 설정파일을 사용하여 손쉽게 객체간의 의존관계를 설정하기에 스프링을 DI컨테이너라고 부르기도 한다.
DI 컨테이너는 어떤 클래스가 필요로 하는 인스턴스를 자동으로 생성, 취득하여 연결시켜주는 역활을 한다.
DI 컨테이너가 인스턴스를 생성하도록 하려면 프로그램 소스 내부에서 new 로 직접 생성하지 않고 설정파일에서 필요로 하는 클래스의 정보를 설정해 주어야한다.
스프링은 각 클래스간의 의존관계를 관리하기 위한 방법
- Constructor Injection
- Setter Injection
가. Constructor Injection
: 생성자를 통해서 의존 관계를 연결시키는 것을 말한다.
: 생성자를 통해서 의존 관계를 연결하기 위해서는 XML 설정 파일에서 <bean>요소의 하위요소로 <constructor-arg>를 추가해야 한다.
1. 객체를 전달할 경우에는 ref 요소를 사용
public class Foo {
private Bar bar;
public Foo(Bar bar){
this.bar = bar;
}
}
[applicationContext.xml]
<bean id="foo" class="Foo">
<constructor-arg>
<ref bean="bar" />
</constructor-arg>
</bean>
<bean id="bar" class="Bar" />
[실습]
Project : chapter01
Package : sample01
Class : HelloSpring.java - main()
MessageBean.java
Package : sample02
Interface : MessageBean.java
Class : HelloSpring.java - main()
MessageBeanKo.java
MessageBeanEn.java
Package : sample03
Interface : MessageBean
Class : HelloSpring - main()
MessageBeanKo
MessageBeanEn
src : applicationContext.xml
클래스파일은 sample02와 같으므로 그대로 복사해서 들고온다.
xml은 다음과 같이 만들어준다.
만약 context를 선택하지 못하고 Finish를 눌러줬다면, Namespaces에서 선택해주면 된다.
////////HelloSpring.java
package sample03;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class HelloSpring {
public static void main(String[] args) {
// 인터페이스라 뉴 생성이 안되므로 다음과 같은 방법을 써준다.
// ApplicationContext context = new
// FileSystemXmlApplicationContext("src/applicationContext.xml");
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 클래스 패스라 기본적으로 src에서 시작한다.
MessageBean messageBean = (MessageBean) context.getBean("messageBean"); // xml에서의 id="messageBean"을 가져온다.
messageBean.sayHello("Spring");
System.out.println();
MessageBean messageBean2 = context.getBean("messageBean", MessageBean.class);
messageBean2.sayHello("Spring");
System.out.println();
MessageBean messageBean3 = context.getBean("messageBean", MessageBean.class);
messageBean3.sayHello("Spring");
System.out.println();
// 기본 생성자가 한번밖에 생성이 되지 않는다 - SingleTon되었다는 뜻.
}
}
////////MessageBean.java - Interface
package sample03;
public interface MessageBean {
public void sayHello(String name);
}
////////MessageBeanEn.java
package sample03;
public class MessageBeanEn implements MessageBean {
@Override
public void sayHello(String name) {
System.out.println("Hello " + name + "!!");
}
}
////////MessageBeanKo.java
package sample03;
public class MessageBeanKo implements MessageBean {
private int num;
public MessageBeanKo() {
System.out.println("MessageBeanKo 기본생성자");
}
@Override
public void sayHello(String name) {
num++;
System.out.println("num = " + num);
System.out.println("안녕하세요" + name + "!!");
}
}
////////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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- sample03 -->
<!--scope : prototype, request, session, singleton -->
<bean id="messageBean" class="sample03.MessageBeanKo" scope="prototype"></bean>
Package : sample04
Interface : Calc.java
추상Method : public void calculate(int x, int y);
Class : HelloSpring - main()
CalcAdd.java
CalcMul.java
[실행결과]
25 + 36 = xx
25 * 36 = xxx
////////Calc.java - interface
package sample04;
public interface Calc {
public void calculate(int num1, int num2);
}
////////CalcAdd.java
package sample04;
public class CalcAdd implements Calc {
@Override
public void calculate(int num1, int num2) {
System.out.println(num1 + "+" + num2 + "=" + (num1 + num2));
}
}
////////CalcMul.java
package sample04;
public class CalcMul implements Calc {
@Override
public void calculate(int num1, int num2) {
System.out.println(num1 + "*" + num2 + "=" + (num1 * num2));
}
}
////////HelloSpring.java - void main
package sample04;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloSpring {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Calc calc;
calc = (Calc) context.getBean("calcAdd");
calc.calculate(25, 36);
System.out.println();
calc = (Calc) context.getBean("calcMul");
calc.calculate(25, 36);
System.out.println();
}
}
////////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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- sample04 -->
<bean id="calcAdd" class="sample04.CalcAdd"></bean>
<bean id="calcMul" class="sample04.CalcMul"></bean>
</beans>
Package : sample05
Interface : SungJuk.java
public void calc();
public void display();
Class : SungJukImpl.java - SungJuk를 Override하는 클래스
기본생성자 - Scanner 통해서 데이터 입력
public void calc() - 총점, 평균 계산
public void display() - 출력
Class : HelloSpring.java - main
////////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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- sample05 -->
<bean id="sungJukImpl" class="sample05.SungJukImpl"></bean>
</beans>
////////HelloSpring.java
package sample05;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloSpring {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
SungJuk sungJuk = (SungJuk) context.getBean("sungJukImpl");
sungJuk.calc();
sungJuk.display();
}
}
////////SungJuk.java
package sample05;
public interface SungJuk {
public void display();
public void calc();
}
////////SungJukImpl.java
package sample05;
import java.util.Scanner;
public class SungJukImpl implements SungJuk {
private String name;
private int kor;
private int eng;
private int math;
private int tot;
private double avg;
public SungJukImpl() {
Scanner scan = new Scanner(System.in);
System.out.println("이름 입력 : ");
name = scan.next();
System.out.println("국어 입력 : ");
kor = scan.nextInt();
System.out.println("영어 입력 : ");
eng = scan.nextInt();
System.out.println("수학 입력 : ");
math = scan.nextInt();
}
@Override
public void calc() {
tot = kor + eng + math;
avg = tot / 3.0;
}
@Override
public void display() {
System.out
.println(name + "\t" + kor + "\t" + eng + "\t" + math + "\t" + tot + "\t" + String.format("%.3f", avg));
}
}
'SPRING' 카테고리의 다른 글
[21.11.11] (sample03 - chapter02_SpringMaven) (0) | 2021.11.11 |
---|---|
[21.11.10] (0) | 2021.11.09 |
[21.11.09] (Chapter02 - sample02) (0) | 2021.11.09 |
[21.11.09] (Chapter02 - sample02 / 03 / 04) (0) | 2021.11.09 |
[21.11.08] (Chapter02) (0) | 2021.11.08 |