일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Spring
- Spring Batch
- ubuntu
- JVM
- it
- 요리
- javascript
- db
- Oracle
- php
- Gradle
- Spring Boot
- springboot
- jsp
- tool
- Web Server
- 맛집
- ReactJS
- jenkins
- linux
- MySQL
- laravel
- java
- Design Patterns
- elasticsearch
- redis
- Git
- devops
- AWS
- IntelliJ
- Today
- Total
아무거나
[spring] DI(Dependency Injection) - 1 본문
[ DI(Dependency Injection) 와 IOC컨테이너 ]
정의) A객체는 B/C 객체에 의존한다.
방법 1)
어떤 A라는 객체가 있는데 그 객체가 다른 객체를 필요로할때 new라는 연산자를 사용해서 A라는 객체가 직접 생성한다.
ex) new B();
new C();
방법2)
어떤 A라는 객체가 있는데 B라는 객체와 C라는 객체가 필요로 할 때 A라는 객체가 방법1과 다르게
A라는 객체안에 필드를 만들어 놓는다. b,c
그럼 b,c라는 필드에 대해서 setter() or construct()(=생성자)
생성자일경우 this.b = 매개변수 방식으로 표현한다.
즉, B,C객체를 외부에서 생성해서 A객체가 갖고있는 setter() 또는 생성하는 시점에 construct() 넣어준다.
spring [ IOC컨테이너(new B(), new C(), new X()....) -> A객체(setter() or construct()) ]
즉, spring이란 부품을 생성하고 조립하는 라이브러리의 집합체
ex) 부품(=new B())
1. 스프링을 이용한 객체 생성과 조립
[공통 소스]
# MyCalculator.java)
public class MyCalculator {
Calculator calculator;
private int firstNum;
private int secondNum;
public MyCalculator() {}
public void add() {
calculator.addition(firstNum, secondNum);
}
public void sub() {
calculator.subtraction(firstNum, secondNum);
}
public void mul() {
calculator.multiplication(firstNum, secondNum);
}
public void div() {
calculator.division(firstNum, secondNum);
}
public void setCalculator(Calculator calculator) {
this.calculator = calculator;
}
public void setFirstNum(int firstNum) {
this.firstNum = firstNum;
}
public void setSecondNum(int secondNum) {
this.secondNum = secondNum;
}
}
# Calculator.java)
public class Calculator {
public void addition(int f, int s) {
System.out.println("addition()");
int result = f + s;
System.out.println(f + " + " + s + " = " + result);
}
public void subtraction(int f, int s) {
System.out.println("subtraction()");
int result = f - s;
System.out.println(f + " - " + s + " = " + result);
}
public void multiplication(int f, int s) {
System.out.println("multiplication()");
int result = f * s;
System.out.println(f + " * " + s + " = " + result);
}
public void division(int f, int s) {
System.out.println("division()");
int result = f / s;
System.out.println(f + " / " + s + " = " + result);
}
}
[#1. 스프링 특징이 적용되지 않는 소스]
# MainClass.java)
public class MainClass {
public static void main(String[] args) {
MyCalculator myCalculator = new MyCalculator();
myCalculator.setCalculator(new Calculator());
myCalculator.setFirstNum(10);
myCalculator.setSecondNum(2);
myCalculator.add();
myCalculator.sub();
myCalculator.mul();
myCalculator.div();
}
}
[#2. 스프링 특징이 적용된 소스]
# MainClass.java)
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
String configLocation = "classpath:applicationCTX.xml"; // 해당 xml파일에서 bean객체를 가져옴
AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLocation);
MyCalculator myCalculator = ctx.getBean("myCalculator", MyCalculator.class);
myCalculator.add();
myCalculator.sub();
myCalculator.mul();
myCalculator.div();
}
}
# /src/main/resources/applicationCTX.xml) // 오른쪽클릭 -> new -> spring configuration file 에서 생성
<?xml version="1.0" encoding="UTF-8"?>
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="calculator" class="com.javalec.ex.Calculator" />
<!-- MyCalculator.java의 필드를 선언해 주어야한다. -->
<bean id="myCalculator" class="com.javalec.ex.MyCalculator">
<property name="calculator"> <!-- Calculator 필드 -->
<ref bean="calculator"/> <!-- Calculator.java 객체를 참조 -->
</property>
<property name="firstNum" value="10" /> <!-- 값 주입: 10 -->
<property name="secondNum" value="2"></property> <!-- 값 주입: 2 -->
</bean>
</beans>
* <bean id="" // 변수설정
class="com.javalec.ex.MyCalculator" /> // 객체 생성(반드시 풀네임을 다 써줘야 한다.)
setter함수는 무조건 존재해야 한다.(xml에서 bean을 생성해서 만들때 반드시 setter가 존재하여야한다.)
'Java & Kotlin > Spring' 카테고리의 다른 글
[spring] DI(Dependency Injection) 활용 (0) | 2019.12.25 |
---|---|
[spring] DI(Dependency Injection) - 2 (0) | 2019.12.25 |
[spring] 스프링 프로젝트 생성 (0) | 2019.12.24 |
[Spring Boot] elasticsearch 5.x 사용(transportClient) (0) | 2019.08.23 |
[springboot] SpringBoot & Handlebars로 화면 생성 [퍼옴] (0) | 2019.07.04 |