일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 부스트코스
- ssafy
- CS 기초지식
- 기초프로그래밍
- SSAFY 9기
- CS기초지식
- 알고리즘
- 이진법
- ERD
- w3schools
- java
- exception
- 삼성청년SW아카데미
- til
- 객체지향
- edwith
- 모두를 위한 컴퓨터 과학
- 예외처리
- Computer Science
- SW
- WebProgramming
- 관계형 데이터베이스
- 면접을 위한 CS 전공지식 노트
- 모두를 위한 컴퓨터 과학(CS50)
- CS50
- CS 기초
- Compute Science
- 상속
- 데이터베이스 모델링
- Java Programming
- Today
- Total
Joslynn의 하루
MSA Full-Stack 개발자 양성 과정 - Spring DI(Dependency Injection) Collection 형태 주입, ~.xml 문서, ~.properties 파일 사용, Autowire_221103 본문
MSA Full-Stack 개발자 양성 과정 - Spring DI(Dependency Injection) Collection 형태 주입, ~.xml 문서, ~.properties 파일 사용, Autowire_221103
Joslynn 2022. 11. 3. 18:19Dependency Injection
: Java class 내에서 생성자 또는 setter 필수
: xml 문서에서 <constructor - arg> 또는 <property> 태그 필수
여러 개의 property 태그를 사용할 경우
<!--xmlns:p="http://www.springframework.org/schema/p" 추가-->
<bean class="sample06.Customer" id="cu2">
<constructor-arg value="jang" /> <!-- 생성자 호출 -->
<property name="age" value="30" /> <!-- setter 호출 -->
<property name="addr" value="경기도 오리역"></property>
</bean>
<bean class="sample06.Customer" id="cu3" p:addr="제주도" p:age="25" p:id="kim" />
외부의 properties 파일을 사용한 DI 주입
configulation 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.xsd">
<!-- 외부의 properties 파일의 위치를 설정 -->
<!--PropertySourcesPlaceholderConfigurer 클래스: properties 파일 위치 관리-->
<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="location">
<value>classpath:sample06/customerInfo01.properties</value>
</property>
</bean>
<!-- 외부의 properties 파일에 있는 key로 value 사용 -->
<bean class="sample06.Customer" id="cu4" p:addr="${addr}" p:age="${age}" p:id="${id}" />
</beans>
여러 개의 properties 파일 사용
configulation 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.xsd">
<!-- 외부의 properties 파일의 위치를 설정 -->
<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="locations">
<array> <!--배열 형태-->
<value>classpath:sample06/customerInfo01.properties</value>
<value>classpath:sample06/customerInfo02.properties</value>
</array>
</property>
</bean>
<!-- 외부의 properties 파일에 있는 key로 value 사용 -->
<bean class="sample06.Customer" id="cu4" p:addr="${addr}" p:age="${age}" p:id="${id}" />
<bean class="sample06.Customer" id="cu5" p:id="${cu.id}" p:age="${cu.age}" p:addr="${cu.addr}" />
</beans>
Context Namespace 사용 문서 설정)
<!-- 외부의 properties 파일의 위치를 설정 -->
<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="locations">
<array> <!--배열 형태-->
<value>classpath:sample06/customerInfo01.properties</value>
<value>classpath:sample06/customerInfo02.properties</value>
</array>
</property>
</bean>
<!------------------------------------------------------------>
<!-- 위의 내용과 동일 -->
<context:property-placeholder
location="sample06/customerInfo01.properties, sample06/customerInfo02.properties"/>
Collection 주입 & 외부 bean 설정 파일 사용
<?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"
xmlns:p="http://www.springframework.org/schema/p"
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.3.xsd">
<!-- 외부의 bean설정 문서 연결 -->
<import resource="classpath:sample06/springDIList01.xml"/>
<!-- 컬렉션 객체 주입 -->
<bean class="sample06.ListBean" id="listBean">
<property name="intList">
<list>
<value>10</value>
<value>20</value>
<value>30</value>
<value>40</value>
<value>50</value>
</list>
</property>
<property name="stringList">
<list>
<value>test01</value>
<value>test02</value>
<value>test03</value>
<value>test04</value>
<value>test05</value>
</list>
</property>
<property name="customerList">
<list>
<ref bean="cu1"/>
<ref bean="cu2"/>
<ref bean="cu3"/>
<ref bean="cu4"/>
<ref bean="cu5"/>
<bean class="sample06.Customer">
<property name="id" value="hee"/>
<property name="age" value="20"/>
<property name="addr" value="전라도 여수시"/>
</bean>
</list>
</property>
</bean>
</beans>
main에서 호출)
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("sample06/springDIList02.xml");
ListBean bean = context.getBean("listBean", ListBean.class);
for (int i : bean.getIntList()) {
System.out.println(i);
}
for (String str : bean.getStringList()) {
System.out.println(str);
}
for (Customer c : bean.getCustomerList()) {
System.out.println(c);
}
}
}
Autowire
: autoWire 속성을 이용해서 xml 문서 태그를 간소화, 필요한 의존 객체에 해당하는 빈을 자동 매핑해 주입
적용 방법
1) byType : type이 같은 객체를 찾아서 setXxx() 자동 호출 및 주입
동일 type으로 2개 이상의 객체가 존재할 경우, 예외 발생 (→동일 type 2개 이상일 경우 byName 사용)
2) byName : xml의 id와 java의 property(멤버변수) 이름이 동일한 객체를 찾아서 setXxx() 자동 호출 및 주입
동일한 id를 주지 않을 경우, 동일 객체를 찾지 못해 주입 불가
3) constructor : 생성자를 자동으로 호출
1) 우선, byType으로 찾고, 2) 동일한 type의 객체가 여러 개 있을 경우 byName으로 찾음
byName은 xml의 id와 java의 생성자의 parameter이름과 동일해야 함
사용 예시)
<bean class="sample07.MemberVOController" id="controller" autowire="byType"/>
<bean class="sample07.MemberVOController" id="controller" autowire="byName"/>
<bean class="sample07.MemberVOController" id="controller" autowire="constructor"/>
'MSA Full-Stack 개발자 양성과정 > Spring' 카테고리의 다른 글
MSA Full-Stack 개발자 양성 과정 - Spring MVC_221107 (0) | 2022.11.07 |
---|