Java java지도 시간 Spring IOC 및 DI에 대한 자세한 설명

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

Jun 23, 2020 pm 05:59 PM
di ioc spring

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. 크로스 플레이가 있습니까?
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Spring Boot가 OpenAI를 만났을 때 새로운 프로그래밍 패러다임 Spring Boot가 OpenAI를 만났을 때 새로운 프로그래밍 패러다임 Feb 01, 2024 pm 09:18 PM

2023년에는 AI 기술이 화두가 되면서 다양한 산업, 특히 프로그래밍 분야에 큰 영향을 미치고 있다. 사람들은 AI 기술의 중요성을 점점 더 인식하고 있으며 Spring 커뮤니티도 예외는 아닙니다. GenAI(일반 인공 지능) 기술이 지속적으로 발전함에 따라 AI 기능을 갖춘 애플리케이션 생성을 단순화하는 것이 중요하고 시급해졌습니다. 이러한 배경에서 AI 기능 애플리케이션 개발 프로세스를 단순화하고 간단하고 직관적이며 불필요한 복잡성을 피하는 것을 목표로 하는 "SpringAI"가 등장했습니다. 'SpringAI'를 통해 개발자는 AI 기능이 포함된 애플리케이션을 더욱 쉽게 구축할 수 있어 사용 및 운영이 더욱 쉬워진다.

Spring Boot 및 Spring AI를 사용하여 생성 인공 지능 애플리케이션 구축 Spring Boot 및 Spring AI를 사용하여 생성 인공 지능 애플리케이션 구축 Apr 28, 2024 am 11:46 AM

업계 리더인 Spring+AI는 강력하고 유연한 API와 고급 기능을 통해 다양한 산업에 선도적인 솔루션을 제공합니다. 이 주제에서는 다양한 분야의 Spring+AI 적용 사례를 살펴보겠습니다. 각 사례에서는 Spring+AI가 어떻게 특정 요구 사항을 충족하고 목표를 달성하며 이러한 LESSONSLEARNED를 더 넓은 범위의 애플리케이션으로 확장하는지 보여줍니다. 이 주제가 여러분이 Spring+AI의 무한한 가능성을 더 깊이 이해하고 활용하는 데 영감을 줄 수 있기를 바랍니다. Spring 프레임워크는 소프트웨어 개발 분야에서 20년 이상의 역사를 가지고 있으며, Spring Boot 1.0 버전이 출시된 지 10년이 되었습니다. 이제 봄이 왔다는 것에 대해 누구도 이의를 제기할 수 없습니다.

Spring 프로그래밍 방식 트랜잭션의 구현 방법은 무엇입니까? Spring 프로그래밍 방식 트랜잭션의 구현 방법은 무엇입니까? Jan 08, 2024 am 10:23 AM

Spring 프로그래밍 방식 트랜잭션을 구현하는 방법: 1. TransactionCallback 및 TransactionCallbackWithoutResult를 사용합니다. 3. Transactional 주석을 사용합니다. 4. @Transactional과 함께 TransactionTemplate을 사용합니다.

Spring Boot와 Spring Cloud의 차이점과 연결 Spring Boot와 Spring Cloud의 차이점과 연결 Jun 22, 2023 pm 06:25 PM

SpringBoot와 SpringCloud는 모두 개발자가 마이크로서비스 애플리케이션을 더 빠르게 구축하고 배포하는 데 도움이 되는 Spring Framework의 확장이지만 각각 다른 목적과 기능을 가지고 있습니다. SpringBoot는 Java 애플리케이션을 빠르게 구축하기 위한 프레임워크로, 개발자가 Spring 기반 애플리케이션을 더 빠르게 생성하고 배포할 수 있도록 해줍니다. 독립 실행형 실행 가능한 Spring 애플리케이션을 구축하는 간단하고 이해하기 쉬운 방법을 제공합니다.

역사상 가장 강력한 조직, Spring에서 가장 많이 사용되는 7가지 Annotation! 역사상 가장 강력한 조직, Spring에서 가장 많이 사용되는 7가지 Annotation! Jul 26, 2023 pm 04:38 PM

기술의 업데이트와 반복으로 Java5.0은 주석을 지원하기 시작했습니다. Java의 선도적인 프레임워크인 Spring은 버전 2.5로 업데이트된 이후 천천히 xml 구성을 포기하기 시작했으며 더 많은 주석이 spring 프레임워크를 제어하는 ​​데 사용됩니다.

Spring에서 트랜잭션 격리 수준을 설정하는 방법 Spring에서 트랜잭션 격리 수준을 설정하는 방법 Jan 26, 2024 pm 05:38 PM

Spring에서 트랜잭션 격리 수준을 설정하는 방법: 1. @Transactional 주석을 사용합니다. 2. Spring 구성 파일에서 설정합니다. 3. PlatformTransactionManager를 사용합니다. 4. Java 구성 클래스에서 설정합니다. 자세한 소개: 1. @Transactional 주석을 사용하고, 트랜잭션 관리가 필요한 클래스나 메소드에 @Transactional 주석을 추가하고, 속성에서 격리 수준을 설정합니다. 2. Spring 구성 파일에서 등.

Java 언어로 IoC 및 AOP 적용 Java 언어로 IoC 및 AOP 적용 Jun 10, 2023 pm 12:10 PM

Java 언어에서 IoC(Inversion of Control)와 AOP(AspectOriented 프로그래밍)는 두 가지 매우 중요한 프로그래밍 아이디어이자 기술입니다. 이들 응용 프로그램은 코드의 유지 관리성, 확장성 및 재사용성을 크게 향상시켜 개발자가 소프트웨어 시스템을 보다 효율적으로 개발하고 유지 관리하는 데 도움이 됩니다. IoC는 "종속성 주입"이라고도 알려진 객체 지향 디자인 패턴입니다.

Spring Cloud를 처음부터 배우세요 Spring Cloud를 처음부터 배우세요 Jun 22, 2023 am 08:11 AM

Java 개발자로서 Spring 프레임워크를 배우고 사용하는 것은 필수적인 기술입니다. 클라우드 컴퓨팅과 마이크로서비스의 인기로 인해 Spring Cloud를 배우고 사용하는 것은 반드시 숙달해야 하는 또 다른 기술이 되었습니다. SpringCloud는 분산 시스템을 빠르게 구축하기 위한 SpringBoot 기반 개발 도구 세트입니다. 개발자에게 서비스 등록 및 검색, 구성 센터, 로드 밸런싱 및 회로 차단기 등을 포함한 일련의 구성 요소를 제공하여 개발자가 마이크로 구축을 가능하게 합니다.

See all articles