1. 개발자는 하체 운동을 해야 한다. 앉아있는 시간이 너무 길기 때문에 운동은 필수다.
이번 주 금요일 능력단위 평가 실시. 이론보다는 실습이 필요하다. 계속 코드를 입력해보자.
2. Spring DI 진도 나간 후 Spring DB 연동 실시. TDD, DAO Transaction(C/R)?
3. Spring AOP는 뭐야?
4. DI : 우리말로 의존성 주입이라 부른다. 스프링 프레임워크에서는 기본적으로 DL이 아닌 DI방식을 사용한다.
주입... 만들어진 객체를 주입한다? 그것을 IoC라고 한다. '제어의 역행'이다. 일반적으로 main()을 호출하고 필요한 객체를 만들어서 사용했는데, 스프링프레임워크에서는 컨테이너에게 객체 생성과 공급을 위임한다.
스프링 컨테이너라는 친구가 객체를 생성하고 관리하는 것 같다.
5. javaBean 예시 코드
- 데이터를 저장하기 위한 구조체로 자바 빈 규약을 따르는 구조체
- private 프로퍼티와 getter/setter로만 데이터를 접근함
- 인수(augument)가 없는 기본 생성자가 있음.
public class Person {
private String name;
private int age;
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
스프링에서는 이러한 Bean들을 XML이나 자바 설정 클래스를 통해 정의하고 관리한다. 이를 통해 객체 간의 의존 관계를 쉽게 설정할 수 있다.
6. DI를 위한 워밍업인데... 워밍업이 복잡하네. 코드를 다시 뜯어봐야겠어
package com.earth.di2;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
/*
* 빈(Bean)
* 1) Spring (IoC) Container가 관리하는 객체
* 2) ApplicationContext가 담고 있는 객체
* 3) 일반적인 객체 생성 방법으로 만든 객체는 Bean이 아님
*
*/
class Car{}
class SuvCar extends Car {}
class ElectronCar extends Car {}
class Engine {}
// 변경에 유리한 코드
//ApplicationContext 정의 - 저장소
class AppContext {
Map map; //객체 저장소 (key-value 형식, car - 0x100...)
public AppContext() {
//2. txt파일만 바꾸면 메서드나 내부 소스를 안 바꾸고 원하는 결과를 얻을 수 있음.
Properties p = new Properties();
try {
p.load(new FileReader("config.txt"));
//Properties에 저장된 내용을 Map에 저장
map = new HashMap(p);
// 클래스 이름의 객체로 변환해서 Map에 저장
for(Object key : map.keySet()) {
Class clazz = Class.forName((String) map.get(key));
map.put(key, clazz.newInstance());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public Object getBean(String key) { return map.get(key);}
}
//변경에 유리한 코드
public class SpringDIIntro {
public static void main(String[] args) {
AppContext ac = new AppContext();
Car car = (Car) ac.getBean("car");
Engine engine = (Engine) ac.getBean("engine"); //다형성
System.out.println(" car : " + car);
System.out.println(" engine : " + engine);
}
}
7. 메이븐 라이브러리 다운로드 - 사이트에서 복사 후 porm.xml에 붙여넣기.
구아바 라이브러리를 활용한다.
8. Class clazz = classInfo.load();
일반적으로 new연산자를 사용하여 객체를 만드는 것만 알고 있었는데... 다른 방식으로도 객체를 생성할 수 있다.
classInfo.load(); 메서드를 사용하여 객체 정보를 불러오면서 객체를 만든다.
9. 의존성 주입이라고 하니 어렵게 느껴진다. 의존성을 주입받는다는 것은 다른 객체를 가져와서 사용한다는 뜻과 같다.
@Component class Car{
Engine engine;
Door door;
}