스프링 프레임워크는 주요기능으로 DI, AOP, MVC, JDBC 등을 제공한다.
DI : Dependency Injection
AOP : Aspect Oriented Programming
MVC : Model-View-Controller
JDBC : Java Database Connectivity
프레임워크? 업무를 정해놓은 추상적인 틀
어시스턴스없이 일을 진행 VS 있이 진행은 큰 차이 --> 네비없이 운전 VS 네비갖고 운전
| 스프링 모듈 | 기능 |
|---|---|
| spring-core | 스프링의 핵심인 DI(Dependency Injection) 와 IoC(Inversion of Control)를 제공 |
| spring-aop | AOP구현 기능 제공 |
| spring-jdbc | 데이터베이스를 쉽게 (적은 양의 코드) 다룰 수 있는 기능 제공 |
| spring-tx | 스프링에서 제공하는 트랜젝션 관련 기능 제공 |
| spring-webmvc | 스프링에서 제공하는 컨트롤러(Controller)와 뷰(View)를 이용한 스프링 MVC 구현 기능 제공 |
- 스프일 프레임워크에서 제공하고 있는 모듈을 사용하려면❓
- 모듈에 대한 의존설정을 개발 프로젝트에 XML파일등을 이용해서 개발자가 직접하면 된다.
- 모듈화되어 제공되니 필요한 것만 사용하자 〰️
스프링에서 객체를 생성하고 조립하는 객체를 컨테이너(Container)로, 컨테이너를 통해 생성된 객체를 빈(Bean)이라고 부른다.

외부에서 생성한 객체를 내부 객체에 포함시켜 의존성을 더한다.
제어의 역전, 컨테이너는 개발자 대신 객체의 생성부터 소멸까지 책임진다.
자바에서 Contrainer == IoC 〰️
배터리 일체형 : 배터리가 떨어지면 제품을 다시 구매
배터리 분리형 : 배터리가 떨어지면 배터리만 교체
--> 객체지향프로그램의 유연성
// 일체형 ~
public class DI1 {
private Battery battery;
public ElectronicCarToy() {
battery = new NormalBattery();
}
}// 분리형 ~
public class DI2 {
private Battery battery;
public ElectronicRobotToy() {
}
public void setBattery(Battery battery) {
this.battery = battery;
}
}// 분리형 ~
public class ElectronicRadioToy {
private Battery battery;
public ElectronicRadioToy(Battery battery) {
this.battery = battery;
}
public void setBattery(Battery battery) {
this.battery = battery;
}
}외부에서 생성해 의존성을 더하는 것
-
생성자를 이용한 의존 객체 주입
public StudentResgisterService(StudentDao studentDao) { this.studentDao = studentDao; } 👇🏻 <bean id="registerService" class="ems.member.service.StudentRegisterService"> <constructor-arg ref="studentDao" ></constructor-arg> </bean>
-
Setter를 이용한 의존 객체 주입
public void setJdbcUrl(String jdbcUrl) { this.jdbcUrl = jdbcUrl; } public void setUserId(String userId) { this.userId = userId; } public void setUserPw(String userPw) { this.userPw = userPw; } 👇🏻 property 생성 (set 없애고 앞글자 소문자로 ~ ) <bean id="dataBaseConnectionInfoDev" class="ems.member.DataBaseConnectionInfo"> <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe" /> <property name="userId" value="scott" /> <property name="userPw" value="tiger" /> </bean>
-
List타입 의존 객체 주입
public void setDevelopers(List<String> developers) { this.developers = developers; } 👇🏻 <property name="developers"> <list> <value>Cheney.</value> <value>Eloy.</value> <value>Jasper.</value> <value>Dillon.</value> <value>Kian.</value> </list> </property>
-
Map타입 객체 주입
public void setAdministrators(Map<String, String> administrators) {
this.administrators = administrators;
}
👇🏻
<property name="administrators">
<map>
<entry>
<key>
<value>Cheney</value>
</key>
<value>cheney@springPjt.org</value>
</entry>
<entry>
<key>
<value>Jasper</value>
</key>
<value>jasper@springPjt.org</value>
</entry>
</map>
</property>