롸?
Spring application - xml기반 DI 본문
1. 사전 준비 (Maven 프로젝트) - pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>spr_app_di</groupId>
<artifactId>spr_app_di</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<!-- Generic properties -->
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- Spring -->
<spring-framework.version>5.0.0.RELEASE</spring-framework.version>
</properties>
<dependencies>
<!-- Spring and Transactions -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-framework.version}</version>
</dependency>
</dependencies>
</project>
2. 생성자 주입
2-1. model.DataDaoInter.java
package model;
public interface DataDaoInter {
void selectDb();
}
2-1. model.DataDaoImpl.java
package model;
public class DataDaoImpl implements DataDaoInter{
public void selectDb() {
System.out.println("selectDb 수행");
}
}
2-2. controller.SelectServiceInter.java
package controller;
public interface SelectServiceInter {
void selectProcess();
}
2-2. controller.SelectServiceImpl
package controller;
import model.DataDaoInter;
public class SelectServiceImpl implements SelectServiceInter{
private DataDaoInter daoInter;
public SelectServiceImpl(DataDaoInter daoInter) {
this.daoInter = daoInter;
}
public void selectProcess() {
System.out.println("selectProcess 에서 DataDaoInter의 메소드 수행");
daoInter.selectDb();
}
}
2-3. Main.java
package controller;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainSelect {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("init.xml");
SelectServiceInter selectServiceInter = (SelectServiceInter)context.getBean("selectServiceImpl"); //스프링이 생성한 객체는 모드 오브젝트 타입이므로 캐스팅
selectServiceInter.selectProcess();
}
}
2-4. init.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- constructor injection -->
<bean id="selectServiceImpl" class="controller.SelectServiceImpl" >
<constructor-arg>
<ref bean="dataDaoImpl"/>
</constructor-arg>
</bean>
<bean id="dataDaoImpl" class="model.DataDaoImpl" />
</beans>
3. Setter 주입
3-1. model.DataDaoInter.java
package model;
public interface DataDaoInter {
String getName();
String getHobby();
}
3-1. model.DataDaoImpl.java
package model;
public class DataDaoImpl implements DataDaoInter{
public String getName() {
return "홍길동";
}
public String getHobby() {
return "운동";
}
}
3-2. controller.DataServiceInter.java
package controller;
public interface DataServiceInter {
void showData();
}
3-2. controller.DataServiceImpl.java
package controller;
import model.DataDaoInter;
public class DataServiceImpl implements DataServiceInter{ //비즈니스 로직
private int age;
private DataDaoInter dataDaoInter;
public DataServiceImpl() {}
public void setAge(int age) {
this.age = age;
}
public void setDataDaoInter(DataDaoInter dataDaoInter) {
this.dataDaoInter = dataDaoInter;
}
public void showData() {
System.out.println("이름은 " + dataDaoInter.getName() + ", 나이는 " + age + ", 취미는 " + dataDaoInter.getHobby());
}
}
3-3. Main.java
package controller;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("init.xml");
DataServiceImpl dataServiceImpl = (DataServiceImpl)context.getBean("dataServiceImpl");
dataServiceImpl.showData();
}
}
3-4. init.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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 방법 1 : 일반적인 setter-->
<bean id="dataServiceImpl" class="controller.DataServiceImpl" >
<property name="age" value="23" />
<property name="dataDaoInter" ref="dataDaoImpl" />
</bean>
<bean id="dataDaoImpl" class="model.DataDaoImpl" />
<!-- 방법 2 : 일반적인 setter에서 value를 하위 엘리먼트로 넣기-->
<bean id="dataServiceImpl" class="controller.DataServiceImpl" >
<property name="age" >
<value>25</value>
</property>
<property name="dataDaoInter">
<bean class="model.DataDaoImpl" />
</property>
</bean>
<!-- 방법 3 : namespace -->
<bean id="dataServiceImpl" class="controller.DataServiceImpl" p:age="27" p:setterShowData-ref="dataDaoImpl"/>
<bean id="dataDaoImpl" class="model.DataDaoImpl" />
</beans>
'Framework > Spring' 카테고리의 다른 글
스프링 MVC의 흐름 (0) | 2020.04.07 |
---|---|
Spring application - Annotation기반 DI (0) | 2020.04.06 |
AOP (Aspect Oriented Programming) 용어 (0) | 2020.04.05 |
DI(Dependency Injection) 개념 (0) | 2020.04.03 |
Spring 기본 용어 및 개념 이해해보려고 노력하기 (0) | 2020.04.02 |
Comments