스프링 프레임워크의 자동 배선 기능을 사용하면 객체 종속성을 암시적으로 주입할 수 있습니다. 내부적으로 setter 또는 생성자 주입을 사용합니다.
Autowiring은 기본 값과 문자열 값을 주입하는 데 사용할 수 없습니다. 참조로만 작동합니다.
자동 배선의 장점
그것은 적은 코드 종속성을 명시적으로 주입하기 위해 코드를 작성할 필요가 없기 때문입니다.
자동 배선의 단점
프로그래머의 통제가 없습니다.
기본 값과 문자열 값에는 사용할 수 없습니다.
자동 배선 모드
자동 연결 모드에는 여러 가지가 있습니다:
CSS 불투명도 전환
아니요. | 방법 | 설명 |
---|---|---|
1) | 아니요 | 이는 기본 자동 연결 모드입니다. 이는 기본적으로 자동 배선이 없음을 의미합니다. |
2) | 이름으로 | byName 모드는 Bean 이름에 따라 객체 종속성을 주입합니다. 이 경우 Property 이름과 Bean 이름이 동일해야 합니다. 내부적으로 setter 메소드를 호출합니다. |
삼) | 유형별 | byType 모드는 유형에 따라 객체 종속성을 주입합니다. 따라서 Property 이름과 Bean 이름이 다를 수 있습니다. 내부적으로 setter 메소드를 호출합니다. |
4) | 건설자 | 생성자 모드는 클래스의 생성자를 호출하여 종속성을 주입합니다. 많은 수의 매개변수를 갖는 생성자를 호출합니다. |
5) | 자동 감지 | Spring 3부터 더 이상 사용되지 않습니다. |
자동 배선의 예
Spring에서 자동 배선을 사용하는 간단한 코드를 살펴보겠습니다. autowire 모드를 적용하려면 bean 요소의 autowire 속성을 사용해야 합니다.
Spring의 자동 배선의 전체 예를 살펴보겠습니다. 이 예제를 만들기 위해 4개의 파일을 만들었습니다.
- B.java
- A.java
- applicationContext.xml
- Test.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
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의 이름을 변경하면 종속성이 주입되지 않습니다.
Bean의 이름을 b에서 b1로 변경하는 코드를 살펴보겠습니다.
2) byType 자동 배선 모드
byType autowiring 모드의 경우 Bean ID와 참조 이름이 다를 수 있습니다. 그러나 한 유형의 Bean은 하나만 있어야 합니다.
내부적으로 setter 주입을 사용합니다.
이 경우에는 B타입의 인스턴스를 생성했기 때문에 잘 동작합니다. 참조 이름과 다른 Bean 이름을 갖는 것은 중요하지 않습니다.
그러나 한 유형의 Bean이 여러 개 있으면 작동하지 않고 예외가 발생합니다.
B 유형의 빈이 많이 있는 코드를 살펴보겠습니다.
그러한 경우 예외가 발생합니다.
3) 생성자 자동 배선 모드
생성자 자동 배선 모드의 경우 스프링 컨테이너는 가장 높은 매개변수화된 생성자를 통해 종속성을 주입합니다.
클래스에 인수가 0개, 인수가 1개, 인수가 2개인 생성자가 3개 있는 경우 인수가 2개인 생성자를 호출하여 주입이 수행됩니다.
4) 자동 배선 모드 없음
자동 배선 모드가 없는 경우 스프링 컨테이너는 자동 배선을 통해 종속성을 주입하지 않습니다.