아.. 진작에 이렇게 할것을...ㅜㅜ
downloadmanager-context.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"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd">
- <bean id="ftpDownloader" class="com.apress.prospring2.ch03.dm.FtpDownloader"/>
- <bean id="httpDownloader" class="com.apress.prospring2.ch03.dm.HttpDownloader"/>
- <bean id="sftpDownaloader" class="com.apress.prospring2.ch03.dm.SftpDownloader"/>
- <bean id="downloadManager" class="com.apress.prospring2.ch03.dm.DownloadManager">
- <property name="downloaders">
- <map>
- <entry key="ftp" value-ref="ftpDownloader"/>
- <entry key="http" value-ref="httpDownloader"/>
- <entry key="sftp" value-ref="sftpDownaloader"/>
- </map>
- </property>
- </bean>
- </beans>
Test Class : DownloadManager.java
- package com.apress.prospring2.ch03.dm;
- import org.springframework.beans.factory.xml.XmlBeanFactory;
- import org.springframework.core.io.ClassPathResource;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.Map;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- /**
- * @author janm
- */
- public class DownloadManager {
- private static final Pattern URI_PATTERN = Pattern.compile("^([^:]*):/(.*)$");
- private Map<String, Downloader> downloaders;
- public static void main(String[] args) throws IOException {
- XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource(
- "/META-INF/spring/downloadmanager-context.xml"));
- DownloadManager dm = (DownloadManager) xbf.getBean("downloadManager");
- BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
- while (true) {
- String uri = reader.readLine();
- if (uri.length() == 0)
- break;
- dm.download(uri);
- }
- }
- private void download(String uri) {
- Matcher matcher = URI_PATTERN.matcher(uri);
- if (matcher.matches()) {
- String scheme = matcher.group(1); //reg Exp 를 이용하여 1번그룹 추출(http, ftp, sftp)
- System.out.println(scheme);
- String path = matcher.group(2);
- Downloader downloader = this.downloaders.get(scheme); // downloaderManager bean의 Map에서 스키마를 꺼낸다
- if (downloader != null) {
- downloader.download(path);
- }
- }
- }
- public void setDownloaders(Map<String, Downloader> downloaders) {
- this.downloaders = downloaders;
- }
- }
Interface Downloader.java
- package com.apress.prospring2.ch03.dm;
- public interface Downloader {
byte[] download(final String uri); - }
구현체 FtpDownloader.java , HttpDownloader.java , sFtpDownLoader.java
- package com.apress.prospring2.ch03.dm;
- import org.springframework.stereotype.Component;
- @Component
- public class FtpDownloader implements Downloader {
- public byte[] download(String uri) {
- System.out.println("FTP Downloading " + uri);
- return new byte[0];
- }
- }
이 글은 스프링노트에서 작성되었습니다.