Spring 의존 주입의 몇 가지 방식 상세 설명
일반적인 자바 개발에서 프로그래머는 어떤 클래스에서 다른 클래스에 의존하는 방법을 필요로 한다.
일반적으로 new는 클래스에 의존하여 클래스 실례를 재호출하는 방법이다. 이런 개발에 존재하는 문제는 new의 클래스 실례가 통일적으로 관리되기 어렵다는 것이다.
스프링은 의존 주입의 사상을 제기했다. 즉, 의존 클래스는 프로그래머가 실례화하지 않고 스프링 용기를 통해 new가 지정한 실례를 도와주고 실례를 이 대상이 필요한 클래스에 주입하는 것이다.
주입에 의존하는 또 다른 표현은 반전을 제어하는 것이다.통속적인 이해는 평상시에 우리 new의 실례가 있는데, 이 실례의 통제권은 우리 프로그래머이다.
반전을 제어하는 것은 new 실례 작업을 우리 프로그래머가 하지 않고 스프링 용기에 맡기는 것을 말한다.
스프링은 주입에 의존하는 여러 가지 형식이 있는데, 이 글은 스프링이 xml을 통해 IOC 설정을 하는 방식만 소개한다.
1. Set 주입
이것은 가장 간단한 주입 방식이다. 만약에 SpringAction이 있다고 가정하면 클래스에서 SpringDao 대상을 실례화해야 한다. 그러면 프라이빗한 SpringDao 구성원 변수를 정의하고 SpringDao를 만드는 set 방법(이것은 ioc의 주입 입구)이다.
다음에spring의 xml 파일을 작성합니다.
<!-- bean, spring -->
<bean name="springAction" class="com.bless.springdemo.action.SpringAction">
<!--(1) , -->
<property name="springDao" ref="springDao"></property>
</bean>
<bean name="springDao" class="com.bless.springdemo.dao.impl.SpringDaoImpl"></bean>
2. 구조기 주입이런 방식의 주입은 파라미터가 있는 구조 함수 주입을 가리킨다. 아래의 예를 보면 나는 두 개의 구성원 변수인 SpringDao와 User를 만들었지만 대상의 set 방법을 설정하지 않았기 때문에 첫 번째 주입 방식을 지원할 수 없다. 이곳의 주입 방식은 SpringAction의 구조 함수에 주입하는 것이다. 즉, SpringAction 대상을 만들 때 SpringDao와 User 두 개의 매개 변수 값을 전달해야 한다.
public class SpringAction {
// springDao
private SpringDao springDao;
private User user;
public SpringAction(SpringDao springDao,User user){
this.springDao = springDao;
this.user = user;
System.out.println(" springDao user");
}
public void save(){
user.setName(" ");
springDao.save(user);
}
}
XML 파일에서도
<!-- bean, spring -->
<bean name="springAction" class="com.bless.springdemo.action.SpringAction">
<!--(2) , -->
<constructor-arg ref="springDao"></constructor-arg>
<constructor-arg ref="user"></constructor-arg>
</bean>
<bean name="springDao" class="com.bless.springdemo.dao.impl.SpringDaoImpl"></bean>
<bean name="user" class="com.bless.springdemo.vo.User"></bean>
구조 방법 파라미터의 불확실성을 해결하려면 구조 방법이 전송된 두 파라미터가 모두 같은 유형의 것을 만날 수 있다. 어떤 대응 값을 부여해야 하는지 구분하기 위해서는 작은 처리를 해야 한다.다음은 인덱스를 설정하는 것입니다. 인자 위치입니다.
<bean name="springAction" class="com.bless.springdemo.action.SpringAction">
<constructor-arg index="0" ref="springDao"></constructor-arg>
<constructor-arg index="1" ref="user"></constructor-arg>
</bean>
다른 하나는 매개변수 유형을 설정하는 것입니다.
<constructor-arg type="java.lang.String" ref=""/>
3. 정적 공장 주입 방법정적 공장은 말 그대로 정적 공장을 호출하는 방법을 통해 자신이 필요로 하는 대상을 얻는 것이다. 스프링이 모든 대상을 관리하기 위해 우리는'공정류. 정적 방법()'을 통해 대상을 직접 얻을 수 없고 스프링을 주입하는 형식으로 얻을 수 있다.
package com.bless.springdemo.factory;
import com.bless.springdemo.dao.FactoryDao;
import com.bless.springdemo.dao.impl.FactoryDaoImpl;
import com.bless.springdemo.dao.impl.StaticFacotryDaoImpl;
public class DaoFactory {
//
public static final FactoryDao getStaticFactoryDaoImpl(){
return new StaticFacotryDaoImpl();
}
}
마찬가지로 관건적인 종류를 보면 여기는 Factory Dao 대상을 주입해야 합니다. 여기는 첫 번째 주입과 똑같아 보이지만 그 후의 xml을 보면 큰 차이가 있습니다.
public class SpringAction {
//
private FactoryDao staticFactoryDao;
public void staticFactoryOk(){
staticFactoryDao.saveFactory();
}
// set
public void setStaticFactoryDao(FactoryDao staticFactoryDao) {
this.staticFactoryDao = staticFactoryDao;
}
}
Spring의 IOC 프로필,
<!-- bean, spring -->
<bean name="springAction" class="com.bless.springdemo.action.SpringAction" >
<!--(3) , (3)-->
<property name="staticFactoryDao" ref="staticFactoryDao"></property>
</property>
</bean>
<!--(3) -->
<bean name="staticFactoryDao" class="com.bless.springdemo.factory.DaoFactory" factory-method="getStaticFactoryDaoImpl"></bean>
4. 실례 공장의 방법 주입실례 공장은 대상의 실례를 얻는 방법이 정태적이지 않다는 뜻이다. 따라서 먼저 new 공장 종류를 사용하고 일반적인 실례 방법을 사용해야 한다.
public class DaoFactory {
//
public FactoryDao getFactoryDaoImpl(){
return new FactoryDaoImpl();
}
}
그러면 아래의 클래스는 말할 것도 없고 앞과 비슷하지만 우리는 실례적인 공장 클래스를 통해 Factory Dao 대상을 만들어야 한다.
public class SpringAction {
//
private FactoryDao factoryDao;
public void factoryOk(){
factoryDao.saveFactory();
}
public void setFactoryDao(FactoryDao factoryDao) {
this.factoryDao = factoryDao;
}
}
마지막으로 스프링 프로필을 보려면 다음과 같이 하십시오.
<!-- bean, spring -->
<bean name="springAction" class="com.bless.springdemo.action.SpringAction">
<!--(4) , (4)-->
<property name="factoryDao" ref="factoryDao"></property>
</bean>
<!--(4) -->
<bean name="daoFactory" class="com.bless.springdemo.factory.DaoFactory"></bean>
<bean name="factoryDao" factory-bean="daoFactory" factory-method="getFactoryDaoImpl"></bean>
5. 요약스프링 IOC 주입 방식이 가장 많이 쓰이는 것은 (1)(2)종이다. 많이 쓰고 많이 연습하면 익숙해진다.
또한 참고: Spring을 통해 생성된 객체는 기본적으로 하나의 예입니다. 다중 인스턴스 객체를 만들려면
<bean name="..." class="..." scope="prototype">
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.