English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spring 자동 구성

온라인 도구

Spring 프레임워크의 자동 구성 기능은 객체 의존성을 은닉 주입할 수 있도록 합니다. 그것은 내부에서 setter 또는 생성자를 사용하여 주입합니다.

자동 구성은 기본 값과 문자열 값에 사용할 수 없습니다. 그것은 참조만 사용할 수 있습니다.

자동 구성의 장점 필요합니다코드가 적습니다

우리는 의존성을 명시적으로 주입할 코드를 작성하지 않아도 됩니다.

자동 구성의 단점

그것은 원시 값과 문자열 값에 사용할 수 없습니다. 프로그래머의 제어권을 가지지 않습니다.

자동 구성 모드

자동 구성 모드가 많이 있습니다:

모드설명
no이것은 기본 자동 구성 패턴입니다. 즉 기본적으로 자동 구성이 없다는 의미입니다.
byNamebyName 패턴은 bean의 이름에 따라 객체 의존성을 주입합니다. 이 경우 속성 이름과 bean 이름이 같아야 합니다. 그것은 내부에서 setter 메서드를 호출합니다.
byTypebyType 패턴은 객체 의존성을 타입에 따라 주입합니다. 따라서 속성 이름과 bean 이름이 다를 수 있습니다. 그것은 내부에서 setter 메서드를 호출합니다.
constructorconstructor 패턴은 클래스의 생성자를 호출하여 의존성을 주입합니다. 많은 매개변수를 가진 생성자를 호출합니다.
autodetectSpring 3시작할 때는 권장하지 않습니다。

자동 구성 예제

Spring에서 자동 구성을 사용하는 간단한 코드를 보让我们看一下在Spring使用自动装配的简单代码。您需要使用bean元素的autowire属性来应用自动装配模式。

<bean id="a" class="org.sssit.A" autowire="byName"></bean>

Spring에서 자동 연결의 전체 예제를 보让我们看看Spring自动布线的完整示例。为了创建此示例,我们创建了4개 파일.

B.java A.java applicationContext.xml Test.java

B.java

이 클래스는 생성자와 메서드만 포함하고 있습니다。

package org.sssit;
public class B {
B(){System.out.println("b is created");}
void print(){System.out.println("hello b");}
}

A.java

이 클래스는 B 클래스의 참조 및 생성자와 메서드를 포함하고 있습니다。

package org.sssit;
public class A {
B b;
A(){System.out.println("a is created");}
public B getB() {
  return b;
}
public void setB(B b) {
  this.b = b;
}
void print(){System.out.println("hello a");}
void display(){
  print();
  b.print();
}
}

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"
  xmlns:p="http://www.springframework.org/schema/p"
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="b" class="org.sssit.B"></bean>
<bean id="a" class="org.sssit.A" autowire="byName"></bean>
</beans>

Test.java

이 클래스는 applicationContext.xml 파일에서 Bean을 가져와서 표시 메서드를 호출합니다.

package org.sssit;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
  ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
  A a=context.getBean("a",A.class);
  a.display();
}
}

출력:

b is created
a is created
hello a
hello b

1)byName 자동 조립 모드

byName 자동 조립 모드에서 bean id와 참조 이름은 같아야 합니다.

setter를 통해 내부 사용.

<bean id="b" class="org.sssit.B"></bean>
<bean id="a" class="org.sssit.A" autowire="byName"></bean>

하지만, bean의 이름을 변경하면 의존성이 주입되지 않습니다.

bean의 이름을 b에서 b로 변경하는 것을 보겠습니다.1의 코드.

<bean id="b1" class="org.sssit.B"></bean>
<bean id="a" class="org.sssit.A" autowire="byName"></bean>

2)byType 자동 조립 모드

byType 자동 조립 모드에서 bean ID와 참조 이름은 다를 수 있습니다. 하지만 하나의 타입의 bean만 있을 수 있습니다.

setter 주입을 내부에서 사용합니다.

<bean id="b1" class="org.sssit.B"></bean>
<bean id="a" class="org.sssit.A" autowire="byType"></bean>

이 경우에는 정상적으로 작동합니다. B 타입의 인스턴스를 생성했기 때문입니다. 상관없습니다. 참조 이름과 다른 Bean 이름을 사용할 수 있습니다.

하지만, 여러 가지 타입의 Bean이 있는 경우에는 작동하지 않으며 예외가 발생합니다.

코드에서 많은 B형 bean이 있습니다.

<bean id="b1" class="org.sssit.B"></bean>
<bean id="b2" class="org.sssit.B"></bean>
<bean id="a" class="org.sssit.A" autowire="byName"></bean>

이 경우, 예외가 발생합니다.

3)생성자 자동 구성 모드

생성자 자동 구성 모드에서, spring 컨테이너는 가장 많은 파라미터를 가진 생성자를 통해 의존성을 주입합니다.

如果一个类中的3개의 생성자(무参数, 하나의参数, 두 개의参数)가 있으며, 두 개의参数 생성자를 호출하여 주입을 수행합니다.

<bean id="b" class="org.sssit.B"></bean>
<bean id="a" class="org.sssit.A" autowire="constructor"></bean>

4)자동 구성 모드가 없습니다

자동 구성 모드가 없는 경우, spring 컨테이너는 자동 구성을 통해 의존성을 주입하지 않습니다.

<bean id="b" class="org.sssit.B"></bean>
<bean id="a" class="org.sssit.A" autowire="no"></bean>