롸?

Spring application - xml기반 DI 본문

Framework/Spring

Spring application - xml기반 DI

허니버터새우깡 2020. 4. 6. 12:46

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>
Comments