>  기사  >  Java  >  Spring IOC 및 DI에 대한 자세한 설명

Spring IOC 및 DI에 대한 자세한 설명

Guanhui
Guanhui앞으로
2020-06-23 17:59:333315검색

Spring IOC 및 DI에 대한 자세한 설명

Spring이란 무엇입니까

Spring은 IoC와 AOP를 핵심으로 하는 프레임워크입니다.

IoC(Inversion of Control, Inversion of Control)는 Spring의 기초입니다.

IoC는 단순히 객체를 생성할 때 이전 프로그래머가 객체 생성을 Spring에 맡기는 대신 새 생성자 메서드를 호출했다는 것을 의미합니다.

DI(Dependency Inject, 의존성 주입)는 두 이름이 두 가지 관점에서 동일한 개념을 설명한다는 점을 제외하면 IoC와 동일한 의미를 갖습니다.

간단히 말하면 DI는 객체의 속성에 관련 값이 주입되어 직접 사용할 수 있습니다.

Spring IOC 및 DI에 대한 자세한 설명

IoC-Inversion of Control

  각 개체 클래스를 캡슐화한 후 IoC 컨테이너를 통해 이러한 개체 클래스를 연결합니다. 이런 방식으로 객체는 IoC 컨테이너를 통해 연결되며, 객체 간 직접적인 연결은 없습니다.
Spring IOC 및 DI에 대한 자세한 설명

  애플리케이션이 IoC 컨테이너를 도입하기 전에 객체 A는 객체 B에 의존합니다. 그런 다음 객체 A가 인스턴스화되거나 특정 지점까지 실행될 때 객체 B를 적극적으로 생성하거나 이미 생성된 객체 B를 사용해야 합니다. 생성된 객체 B를 생성하거나 사용하는 경우 제어권은 애플리케이션 자체에 있습니다.

   애플리케이션에 IoC 컨테이너가 도입되면 객체 A와 객체 B 사이의 직접적인 연결이 끊어집니다. 따라서 객체 A가 인스턴스화되어 실행될 때 객체 B가 필요한 경우 IoC 컨테이너는 주입을 위해 객체 B를 적극적으로 생성합니다. .(즉, 종속성 주입)을 객체 A가 필요로 하는 곳에 적용합니다. 결과적으로 객체 A가 객체 B에 종속되는 과정은 능동 동작에서 수동 동작으로 변경됩니다. 즉, 객체 생성이 처리를 위해 IoC 컨테이너에 넘겨지고 제어 권한이 반전됩니다. 소위 통제 역전.

DI 종속성 주입

IoC 컨테이너는 런타임 중에 특정 종속성을 객체에 동적으로 주입합니다. 예를 들어, 객체 B를 객체 A의 멤버 변수에 주입(할당)합니다.

  사실 DI(의존성 주입)와 IoC(제어 역전)는 동일한 내용을 어떤 측면에서는 다른 관점에서 설명하는 것입니다. 종속성 주입은 애플리케이션의 관점에서 설명됩니다. 즉, 애플리케이션은 컨테이너에 의존하여 필요한 외부 리소스를 생성하고 주입하는 반면 제어 역전은 컨테이너의 관점에서 설명됩니다. 애플리케이션은 애플리케이션에 필요한 외부 리소스를 주입합니다. 여기서 언급되는 외부 리소스는 외부 인스턴스 개체, 외부 파일 개체 등이 될 수 있습니다.

IoC 및 DI 구현

  (1) 속성 setter 메서드 주입: 종속 인스턴스를 주입하기 위해 setter 메서드를 사용하는 IoC 컨테이너를 말합니다. 매개변수 없는 생성자 또는 매개변수 없는 정적 팩토리 메소드를 호출하여 Bean을 인스턴스화한 후 해당 Bean의 setter 메소드를 호출하여 setter 메소드 기반의 종속성 주입을 구현할 수 있습니다. 이 방법은 간단하고 직관적이며 이해하기 쉽기 때문에 Spring의 설정 주입이 널리 사용됩니다.

package com.ssm.entry;

public class UserServiceImpl implements UserService {

	private UserDao userDao;
	
	// setter()实现依赖注入
	public void setUserDao(UserDao userDao){
		this.userDao = userDao;
	}
	
	public void login() {
		this.userDao.login();
		System.out.println("UserService login");
	}

}

  (2) 생성자 메서드 주입: 생성자 메서드를 사용하여 종속 인스턴스를 주입하는 IoC 컨테이너를 말합니다. 생성자 기반 종속성 주입은 매개변수를 사용하여 생성자를 호출하여 구현되며, 각 매개변수는 종속성을 나타냅니다.

applicationContext.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-4.3.xsd">
    		
    <!-- 将指定类配置给Spring,让Spring创建其对象的实例 控制反转 -->
		<bean id="UserDao" class="com.ssm.entry.UserDaoImpl"></bean>
		
		<!-- 添加一个id为userService的Bean 依赖注入-->
		<bean id="UserService" class="com.ssm.entry.UserServiceImpl">
			<!-- 将name为UserDao的Bean注入UserService实例中 -->
			<property name="UserDao" ref="UserDao"/>
		</bean>
</beans>

IoC 테스트

package com.ssm.entry;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class IoC {
	public static void main(String[] args) {
		
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao userDao = (UserDao)applicationContext.getBean("UserDao");
		userDao.login();
		
	}
}

DI 테스트

package com.ssm.entry;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class DI {
	
	public static void main(String[] args) {
		ApplicationContext applicationContext = new 
				ClassPathXmlApplicationContext("applicationContext.xml");
		UserService userService = (UserService)applicationContext.getBean("UserService");
		userService.login();
	}
	
}

추천 튜토리얼: "Java Tutorial"

위 내용은 Spring IOC 및 DI에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제