English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
온라인 도구
Spring 프레임워크의 자동 구성 기능은 객체 의존성을 은닉 주입할 수 있도록 합니다. 그것은 내부에서 setter 또는 생성자를 사용하여 주입합니다.
자동 구성의 장점 필요합니다코드가 적습니다
자동 구성의 단점
그것은 원시 값과 문자열 값에 사용할 수 없습니다. 프로그래머의 제어권을 가지지 않습니다.
자동 구성 모드가 많이 있습니다:
모드 | 설명 |
no | 이것은 기본 자동 구성 패턴입니다. 즉 기본적으로 자동 구성이 없다는 의미입니다. |
byName | byName 패턴은 bean의 이름에 따라 객체 의존성을 주입합니다. 이 경우 속성 이름과 bean 이름이 같아야 합니다. 그것은 내부에서 setter 메서드를 호출합니다. |
byType | byType 패턴은 객체 의존성을 타입에 따라 주입합니다. 따라서 속성 이름과 bean 이름이 다를 수 있습니다. 그것은 내부에서 setter 메서드를 호출합니다. |
constructor | constructor 패턴은 클래스의 생성자를 호출하여 의존성을 주입합니다. 많은 매개변수를 가진 생성자를 호출합니다. |
autodetect | Spring 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
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>
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>
이 경우, 예외가 발생합니다.
생성자 자동 구성 모드에서, spring 컨테이너는 가장 많은 파라미터를 가진 생성자를 통해 의존성을 주입합니다.
如果一个类中的3개의 생성자(무参数, 하나의参数, 두 개의参数)가 있으며, 두 개의参数 생성자를 호출하여 주입을 수행합니다.
<bean id="b" class="org.sssit.B"></bean> <bean id="a" class="org.sssit.A" autowire="constructor"></bean>
자동 구성 모드가 없는 경우, spring 컨테이너는 자동 구성을 통해 의존성을 주입하지 않습니다.
<bean id="b" class="org.sssit.B"></bean> <bean id="a" class="org.sssit.A" autowire="no"></bean>