Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- cleancode
- 백준
- 스프링
- 읽기쉬운코드
- 개발자
- 데이터베이스
- 클린코드
- 그리디
- 코딩
- JPA
- 애자일프로그래밍
- Baekjoon
- 프레임워크
- database
- 코드
- 그리디알고리즘
- 코딩테스트
- 애자일
- framework
- spring boot
- 애자일기법
- ES
- Elasticsearch
- 자바
- API
- Java
- Spring
- 엘라스틱서치
- 개발
- 알고리즘
Archives
- Today
- Total
튼튼발자 개발 성장기🏋️
#2 : DI 활용 본문
반응형
DI는 여러가지로 활용할 수 있다. 이전 글에서는 기본적인 DI의 설명이 있었으나 이번에는 여러가지 주입방법을 소개한다.
- 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:c="http://www.springframework.org/schema/c" <!-- constructor-arg namespace -->
xmlns:p="http://www.springframework.org/schema/p" <!-- property namespace -->
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="loggerUtil" class="ga.dotori.util.LoggerUtil" c:PREFIX="This is" c:POSTFIX="!!!" />
</beans>
String config = "classpath:appContext.xml";
GenericXmlApplicationContext appContext = new GenericXmlApplicationContext(config);
LoggerUtil logger = appContext.getBean("loggerUtil", LoggerUtil.class);
logger.log();
config = "classpath:appContext2.xml";
appContext = new GenericXmlApplicationContext(config);
logger = appContext.getBean("loggerUtil", LoggerUtil.class);
logger.log();
appContext.close();
xml 파일로 주입하는 또 다른 방법은 namespace를 사용하는 것. 대표적으로 c namespace와 p namespace가 있다.
c는 constructor-arg의 약자이고 p는 property의 약자로, 각각 생성자, setter를 사용하겠다는 의미다. 해당 namespace를 사용하려면 다음과 같이 beans태그에 설정을 해주어야한다.
xmlns:c="http://www.springframework.org/schema/c" xmlns:p="http://www.springframework.org/schema/p" |
코드를 보았을 때, 이전 글에서 작성한 xml과 같은 역할을 하는 것을 볼 수 있다. 그러나 namespace를 사용하는 것은 좋아보이지 않아 보인다. 협업에서는 어떤 것을 선호할지 모르겠지만 적어도 나는 상당히 불편했고 한 눈에 이해하기에 귀찮기도 했다. 보기 좋게 사용하지 않는 것이 읽기에도 쉬워보인다.
- java 내부적 주입 방법
@Configuration
public class JavaInjection {
@Bean
public LoggerUtil logger() {
LoggerUtil loggerUtil = new LoggerUtil("[START]", "[END]");
return loggerUtil;
}
}
AnnotationConfigApplicationContext appContext = new AnnotationConfigApplicationContext(JavaInjection.class);
LoggerUtil loggerUtil = appContext.getBean("logger", LoggerUtil.class);
loggerUtil.log();
appContext.close();
DI를 사용하는 가장 큰 목적은 "java 소스 수정 최소화"이지 않을까? 그런데 java로 주입을 하다니 이런 모순인게 어딨어..ㅠㅠ 이 역시 협업에서 사용하는지는 모르겠지만 전혀 내키지 않는다. 가장 첫 번째로 소개했던 방법이 DI의도에 알맞게 적절한 사용 법인듯 하다.
반응형
'Framework > spring' 카테고리의 다른 글
#6 : AOP (Aspect Oriented Programming) (0) | 2020.05.03 |
---|---|
#5 : bean setting (0) | 2020.05.02 |
#4 : Bean Scope (0) | 2020.05.01 |
#3 : Container Life Cycle (0) | 2020.05.01 |
#1 : spring의 핵심 DI(Dependency Injection) (0) | 2020.04.30 |