Day 83

ChangWoo·2022년 12월 30일
0

중앙 HTA

목록 보기
27/51

Spring

DI(의존성 주입)

Maven Project 생성 과정

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>com.sample</groupId>
  <artifactId>spring-di-auto</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <!-- pom.xml 파일에서 사용되는 프로퍼티값(상수값)을 설정한다. -->
	<properties>
		<!-- 프로젝트의 자바버전을 정의한다. -->
		<maven.compiler.source>11</maven.compiler.source>
		<maven.compiler.target>11</maven.compiler.target>
		<!-- 
			로그출력을 지원하는 slf4j 라이브러리 버전 정보를 상수로 정의한다.
			<version>${slf4j.version}</version>와 같이 ${} 형식으로 값을 사용할 수 있다.
		 -->
		<slf4j.version>1.7.25</slf4j.version>
	</properties>

	<!-- 프로젝트의 의존성 라이브러리를 정의한다. -->
	<dependencies>
		<!--  
			spring-context 라이브러리 의존성 정의
			spring-context 라이브러리 의존성은 spring-core, spring-beans, spring-aop, spring-expression 라이브러리도 포함한다.
			* 스프링을 이용해서 객체 생성, 의존성 주입, 관점지향 프로그래밍 실습이 가능하다.
		 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.3.24</version>
		</dependency>
		<!-- 
			로그 출력을 지원하는 라이브러리 의존성 정의
		 -->
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.2.3</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jul-to-slf4j</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>log4j-over-slf4j</artifactId>
			<version>${slf4j.version}</version>
		</dependency>

	</dependencies>
  
</project>

스프링의 의존성 주입

수동 의존성 주입
1. 애플리케이션 실행에 관여하는 객체를 스프링 컨테이너가 생성하게 한다.

 <bean id="userController" class="com.sample.controller.UserController"></bean>
  <bean id="orderController" class="com.sample.controller.OrderController"></bean>

  <bean id="userDao" class="com.sample.dao.UserOracleDao"></bean>
  <bean id="orderDao" class="com.sample.dao.OrderOracleDao"></bean>
  1. 의존성 주입을 받는 객체는 의존하는 객체를 전달받기 위해서 멤버변수와 Setter 메소드를 정의한다.
    public class UserController {
        // 멤버변수 정의
        private UserOracleDao userOracleDao;
        // Setter 메소드 정의
        public void setUserOracleDao(UserOracleDao userOracleDao) {
           this.userOracleDao = userOracleDao;
        }
     }
     public class OrderController {
        // 멤버변수 정의
        private UserOracleDao userOracleDao;
        private OrderOracleDao orderOracleDao;
        // Setter 메소드 정의
        public void setUserOracleDao(UserOracleDao userOracleDao) {
           this.userOracleDao = userOracleDao;
        }
        public void setOrderOracleDao(OrderOracleDao orderOracleDao) {
           this.orderOracleDao = orderOracleDao;
        }
     }

   3. 스프링 컨테이너가 생성한 객체들을 조립시킨다.
<bean id="userController" class="com.sample.controller.UserController">
  <!-- 
     <property /> 태그는 setter 메소드를 이용한 의존성 주입을 수행한다.
     name속성 : setter 메소드의 이름을 적는다.
     ref속성: 주입할 빈의 id를 적는다.
  -->
  <property name="userOracleDao" ref="userDao"></property>



context-2.xml

App2.java

![](https://velog.velcdn.com/images/hcw0709/post/2f4daba2-79be-4069-ac56-c0556d6c0a2b/image.png)

![](https://velog.velcdn.com/images/hcw0709/post/73d0e214-8de5-44ae-a587-aa56f9857597/image.png)
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글