[포스코DX|container|9주] 37일차 수업
포스코DX X 비트교육센터 6기 - container
두 개의 Bean이 있을 때,
Qualifier("[name]") 으로 이름을 지정해주기
container - Explicit (Java Configuration) 실습
- DVDPlayerConfig.java
package com.poscodx.container.config.videosystem;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.poscodx.container.videosystem.Avengers;
import com.poscodx.container.videosystem.DVDPlayer;
import com.poscodx.container.videosystem.DigitalVideoDisc;
@Configuration
public class DVDPlayerConfig {
@Bean
public DigitalVideoDisc avengers() {
return new Avengers();
}
// 주입(Injection)하기 I
// Bean 생성메소드를 직접 호출하는 방법
// 생성자 주입
@Bean("dvdPlayer")
public DVDPlayer dvdPlayer01() {
return new DVDPlayer(avengers());
}
// 주입(Injection)하기 II
// Parameter로 Bean을 전달하는 방법
// 생성자 주입
@Bean
public DVDPlayer dvdPlayer02(DigitalVideoDisc dvd) {
return new DVDPlayer(dvd);
}
// 주입(Injection)하기 III
// Parameter로 Bean을 전달하는 방법
// setter 주입
@Bean
public DVDPlayer dvdPlayer03(DigitalVideoDisc dvd) {
DVDPlayer dvdPlayer = new DVDPlayer();
dvdPlayer.setDvd(dvd);
return dvdPlayer;
}
}
- DVDPlayerJavaConfigTest.java
package com.poscodx.container.videosystem;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.poscodx.container.config.videosystem.DVDPlayerConfig;
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes={DVDPlayerConfig.class})
public class DVDPlayerJavaConfigTest {
@Autowired
// 같은 타입의 빈이 2개 이상 있는 경우
// 설정 클래스의 빈생성 메소드의 @Bean의 name(default) 속성으로 Qulify 하기
@Qualifier("dvdPlayer")
DVDPlayer dvdPlayer01;
@Autowired
// 같은 타입의 빈이 2개 이상 있는 경우
// 설정 클래스의 빈생성 메소드의 이름으로 Qulify 하기
@Qualifier("dvdPlayer02")
DVDPlayer dvdPlayer02;
@Autowired
@Qualifier("dvdPlayer03")
DVDPlayer dvdPlayer03;
@Test
public void testDvdPlayer01NotNull() {
assertNotNull(dvdPlayer01);
}
@Test
public void testDvdPlayer02NotNull() {
assertNotNull(dvdPlayer02);
}
@Test
public void testDvdPlayer03NotNull() {
assertNotNull(dvdPlayer03);
}
@Test
public void testPlay() {
assertEquals("Playing Movie MARVEL's Avengers", dvdPlayer03.play());
}
}
container - Explicit - (Xml config) 실습
- applicationConfig.java
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:c="http://www.springframework.org/schema/c"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
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/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">
<!-- 01. 빈 설정: 초간단 -->
<bean class="com.poscodx.container.videosystem.Avengers" />
<!-- 02. 빈 설정: id 부여하기 -->
<bean id="ironMan" class="com.poscodx.container.videosystem.IronMan" />
<!-- 03. 빈 설정: 생성자 리터럴 사용1 -->
<bean id="avengersInfiniteWar" class="com.poscodx.container.videosystem.BlankDisc">
<constructor-arg name="studio" value="MARVEL"/>
<constructor-arg name="title" value="Avenger Infinite War"/>
</bean>
<!-- 04. 빈 설정: 생성자 리터럴 사용2 -->
<bean
id="avengersEndgame"
class="com.poscodx.container.videosystem.BlankDisc"
c:title="Avenger Endgame"
c:studio="MARVEL" />
<!-- 05. 빈 설정: 생성자 리터럴 사용3 -->
<bean
id="avengersAgeOfUltron"
class="com.poscodx.container.videosystem.BlankDisc"
c:_1="MARVEL"
c:_0="Avenger Age of Ultron" />
<!-- 06. 빈 설정: 생성자 null argument -->
<bean id="avengersCaptainAmerica" class="com.poscodx.container.videosystem.BlankDisc">
<constructor-arg name="studio" value="MARVEL"/>
<constructor-arg name="title" value="Avengers Captain America"/>
<constructor-arg><null/></constructor-arg>
</bean>
<!-- 07. 빈 설정: 생성자 Collection Argument -->
<bean id="avengersDirectorEdition" class="com.poscodx.container.videosystem.BlankDisc">
<constructor-arg name="studio" value="MARVEL"/>
<constructor-arg name="title" value="Avengers Director Edition"/>
<constructor-arg name="actors">
<list>
<value>Robert Downey Jr.</value>
<value>Christ Evans</value>
</list>
</constructor-arg>
</bean>
<!-- 08. 빈 설정: 생성자 Wiring Collection -->
<bean
id="avengersTriplePack"
class="com.poscodx.container.videosystem.DVDPack"
c:title="Avengers Triple Pack">
<constructor-arg name="dvds">
<list>
<ref bean="avengersInfiniteWar"/>
<ref bean="avengersEndgame"/>
<ref bean="avengersAgeOfUltron"/>
</list>
</constructor-arg>
</bean>
<!-- 09. 빈 설정: 프로퍼티 사용1 -->
<bean id="avengersExpansionEdition1" class="com.poscodx.container.videosystem.BlankDisc">
<property name="studio" value="MARVEL"/>
<property name="title" value="Avengers Expansion Edition1"/>
</bean>
<!-- 10. 빈 설정: 프로퍼티 사용2 -->
<bean
id="avengersExpansionEdition2"
class="com.poscodx.container.videosystem.BlankDisc"
p:title="Avengers Expansion Edition2"
p:studio="MARVEL">
<property name="actors">
<list>
<value>Robert Downey Jr.</value>
<value>Christ Evans</value>
</list>
</property>
</bean>
<!-- 11. 빈 설정: 프로퍼티 사용3 -->
<util:list id="actorList">
<value>Robert Downey Jr.</value>
<value>Christ Evans</value>
</util:list>
<bean
id="avengersExpansionEdition3"
class="com.poscodx.container.videosystem.BlankDisc"
p:title="Avengers Expansion Edition3"
p:studio="MARVEL"
p:actors-ref="actorList">
</bean>
<!-- 12. 빈 주입: 생성자 주입1 -->
<bean id="dvdPlayer1" class="com.poscodx.container.videosystem.DVDPlayer">
<constructor-arg ref="ironMan" />
</bean>
<!-- 13. 빈 주입: 생성자 주입2: c-namespace의 argument name을 사용하는 방법 -->
<bean
id="dvdPlayer2"
class="com.poscodx.container.videosystem.DVDPlayer"
c:dvd-ref="ironMan"/>
<!-- 14. 빈 주입: 생성자 주입3: c-namespace의 argument name을 사용하는 방법 -->
<bean
id="dvdPlayer3"
class="com.poscodx.container.videosystem.DVDPlayer"
c:_0-ref="ironMan"/>
<!-- 15. 빈 주입: setter 주입1 -->
<bean id="dvdPlayer4" class="com.poscodx.container.videosystem.DVDPlayer">
<property name="dvd" ref="ironMan" />
</bean>
<!-- 16. 빈 주입: 프로퍼티 주입2: p-namespace -->
<bean id="dvdPlayer5" class="com.poscodx.container.videosystem.DVDPlayer"
p:dvd-ref="ironMan">
<property name="dvd" ref="ironMan" />
</bean>
</beans>
- DVDPlayerXmlConfigTest.java
package com.poscodx.container.videosystem;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
@ExtendWith(SpringExtension.class)
@ContextConfiguration(locations={"classpath:com/poscodx/container/config/videosystem/applicationContext.xml"})
public class DVDPlayerXmlConfigTest {
// @Autowired
// 예외
// XML Bean Configuration(Avengers)에서는 자동으로 id를 부여 하지 않는다.
// @Qualifier를 사용할 수 없다.
DigitalVideoDisc dvd1;
@Autowired
@Qualifier("ironMan")
DigitalVideoDisc dvd2;
@Autowired
@Qualifier("avengersInfiniteWar")
DigitalVideoDisc dvd3;
@Autowired
@Qualifier("avengersEndgame")
DigitalVideoDisc dvd4;
@Autowired
@Qualifier("avengersAgeOfUltron")
DigitalVideoDisc dvd5;
@Autowired
@Qualifier("avengersCaptainAmerica")
DigitalVideoDisc dvd6;
@Autowired
@Qualifier("avengersDirectorEdition")
DigitalVideoDisc dvd7;
@Autowired
@Qualifier("avengersExpansionEdition1")
DigitalVideoDisc dvd8;
@Autowired
@Qualifier("avengersExpansionEdition2")
DigitalVideoDisc dvd9;
@Autowired
@Qualifier("avengersExpansionEdition3")
DigitalVideoDisc dvd10;
@Autowired
DVDPack dvdPack;
@Autowired
@Qualifier("dvdPlayer1")
DVDPlayer dvdPlayer1;
@Autowired
@Qualifier("dvdPlayer2")
DVDPlayer dvdPlayer2;
@Autowired
@Qualifier("dvdPlayer3")
DVDPlayer dvdPlayer3;
@Autowired
@Qualifier("dvdPlayer4")
DVDPlayer dvdPlayer4;
@Autowired
@Qualifier("dvdPlayer5")
DVDPlayer dvdPlayer5;
@Test
public void testPlay1() {
assertEquals("Playing Movie MARVEL's Iron Man", dvdPlayer1.play());
}
@Test
public void testPlay2() {
assertEquals("Playing Movie MARVEL's Iron Man", dvdPlayer2.play());
}
@Test
public void testPlay3() {
assertEquals("Playing Movie MARVEL's Iron Man", dvdPlayer3.play());
}
@Test
public void testPlay4() {
assertEquals("Playing Movie MARVEL's Iron Man", dvdPlayer4.play());
}
@Test
public void testPlay5() {
assertEquals("Playing Movie MARVEL's Iron Man", dvdPlayer5.play());
}
///////////////////////////////////////////////
@Disabled
@Test
public void testDVD1() {
assertNotNull(dvd1);
}
@Test
public void testDVD2() {
assertNotNull(dvd2);
}
@Test
public void testDVD3() {
assertNotNull(dvd3);
}
@Test
public void testDVD4() {
assertNotNull(dvd4);
}
@Test
public void testDVD5() {
assertNotNull(dvd5);
}
@Test
public void testDVD6() {
assertNotNull(dvd6);
}
@Test
public void testDVD7() {
assertNotNull(dvd7);
}
@Test
public void testDVD8() {
assertNotNull(dvd8);
}
@Test
public void testDVD9() {
assertNotNull(dvd9);
}
@Test
public void testDVD10() {
assertNotNull(dvd10);
}
@Test
public void testDVDPack() {
assertNotNull(dvdPack);
}
}
mysite04
https://github.com/talkingOrange/mysite/commits/master/mysite04