거꾸로 바라본 세상
반응형

[스프링] 자동으로 빈 와이어링하기(Bean Auto Wiring)


 와이어링 설정하는 방법은 2가지가 있다.


1. Component Scanning  :  Spring Application Context에서 생성되는 빈을 자동으로 설정

2. Auto Wiring : 스프링이 자동으로 빈 의존성을 충족시키는 것.



1. Component Scanning


(1) XML을 이용한 방법 


(2) 클래스에서 @ComponentScan을 이용한 방법




(2) XML을 이용한 방법  

<context:component-scan base-package="패키지명"/> 을 이용하면된다.


<?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:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">


<context:component-scan base-package="com.spring.study"/>

</beans>



(2) 클래스에서 @ComponentScan을 이용한 방법

@ComponentScan(basePackages="패키지명") 을 사용하면된다.


@Configuration

//@ComponentScan("com.spring.study")

@ComponentScan(basePackages="com.spring.study")

public class CDPlayerConfig {


}





2. Auto 
Wiring


@Autowired 는 생성자, 메서드, 필드에서 사용할 수 있는 annotation 이다.



Ex)


1. 인터페이스 정의

public interface CDPlayerDisc {


public void play();

}


public interface MediaPlayer {


public void play();

}



2. 구현 클래스 정의

@Component

public class SgtPlayer implements CDPlayerDisc {

@Override

public void play() {

System.out.println("Play Music Start~~");


}

}



@Component

public class CDPlayer implements MediaPlayer {


private CDPlayerDisc disc;

@Autowired(required = false) // 매칭되는 빈이 없으면 와이어링이 되지 않은 상태로 남겨짐

public CDPlayer(CDPlayerDisc disc) {

this.disc = disc;

}

@Override

public void play() {

disc.play();

}

}


3. 결과 테스트


@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(classes = CDPlayerConfig.class)  //2번

//@ContextConfiguration(locations= "classpath:context.xml") //1번

public class TestPlay {

@Autowired

private CDPlayerDisc cdPlayerDisc;

@Autowired

private MediaPlayer mediaPlayer;

@Test

public void cdShouldNotBeNull() {

assertNotNull(cdPlayerDisc);

}

@Test

public void testMedia() {

mediaPlayer.play();

}

}







반응형
profile

거꾸로 바라본 세상

@란지에。

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!