spring 네 가지 의존 주입 방식에 대한 상세한 소개

일반적인 자바 개발에서 프로그래머는 특정한 클래스에서 다른 클래스에 의존하는 방법을 필요로 한다. 보통 new는 클래스에 의존하여 클래스를 재호출하는 방법이다. 이런 개발에 존재하는 문제는 new의 클래스 실례가 통일적으로 관리되지 않는다는 것이다. 스프링은 의존 주입 사상을 제기했다. 즉, 의존 클래스는 프로그래머가 실례화하지 않고spring 용기를 통해 new가 지정한 실례를 도와주고 실례를 이 대상이 필요한 클래스에 주입하는 것이다.주입에 의존하는 또 다른 표현은'반전을 제어한다'는 것이다. 일반적인 이해는 다음과 같다. 평소에 우리 new의 실례는 이 실례의 제어권은 우리 프로그래머이고 반전을 제어하는 것은 new의 실례 작업을 우리 프로그래머가 하지 않고spring 용기에 맡기는 것을 말한다.
스프링은 여러 가지 의존 주입 형식이 있는데 다음은 스프링이 xml을 통해 IOC 설정을 하는 방식만 소개한다.
1、Set 주입
이것은 가장 간단한 주입 방식이다. 만약에 SpringAction이 있다고 가정하면 클래스에서 SpringDao 대상을 실례화해야 한다. 그러면 프라이빗한 SpringDao 구성원 변수를 정의하고 SpringDao를 만드는 set 방법(이것은 ioc의 주입 입구)이다.

package com.bless.springdemo.action; 
public class SpringAction { 
    // springDao 
  private SpringDao springDao; 
    // set  
    public void setSpringDao(SpringDao springDao) { 
    this.springDao = springDao; 
  } 
 
    public void ok(){ 
    springDao.ok(); 
  } 
} 
다음에spring의 xml 파일을 작성합니다. 의name 속성은class 속성의 별명입니다. class 속성은 클래스의 전체 이름을 가리킵니다. SpringAction에 공통 속성인 Springdao가 있기 때문에 탭에 탭을 만들어서 SpringDao를 지정합니다. 탭의name은 SpringAction 클래스의SpringDao 속성 이름입니다. ref는 아래의 를 가리킵니다.이렇게 하면 스프링이 SpringDaoImpl 대상을 실례화하고 SpringAction의 setSpringDao 방법으로 SpringDao를 주입합니다.

<!-- 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 파일에서도 의 형식이 아니라 라벨을 사용하고,ref 속성은 다른 라벨의name 속성을 가리킵니다.

<!-- 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 프로필, 가 가리키는 class는 Factory Dao의 실현 클래스가 아니라 정적 공장인 DaoFactory를 가리키고, factory-method='getStaticFactory DaoImpl'을 설정하여 어떤 공장 방법을 호출할지 지정합니다.

<!-- 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> 
총결산
스프링 IOC 주입 방식이 가장 많이 쓰이는 것은 (1)(2)종이다. 고마워요. 많이 연습하면 익숙해져요.
또한 참고: Spring을 통해 생성된 객체는 기본적으로 하나의 예입니다. 다중 인스턴스 객체를 만들려면 탭 뒤에 속성을 추가할 수 있습니다.

<bean name="..." class="..." scope="prototype"> 
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기