[스프링] 자동으로 빈 와이어링하기(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();
}
}
'Spring' 카테고리의 다른 글
AOP(Aspect Oriented Programming) (0) | 2023.03.31 |
---|---|
[Spring Framework] IOC/DI (0) | 2023.03.29 |
스프링 목적과 DI 정의 (0) | 2018.11.16 |
FactoryBean을 사용해야하는 경우와 사용예제(link) (0) | 2016.05.26 |
1. Spring프로젝트 생성 후 초기작업 mybatis+mysql 셋팅 (0) | 2015.12.05 |