아.. 진작에 이렇게 할것을...ㅜㅜ

 

downloadmanager-context.xml

  1.  
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <beans xmlns="http://www.springframework.org/schema/beans"
  4.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5.        xsi:schemaLocation="
  6.                 http://www.springframework.org/schema/beans
  7.                 http://www.springframework.org/schema/beans/spring-beans.xsd">

  8.     <bean id="ftpDownloader" class="com.apress.prospring2.ch03.dm.FtpDownloader"/>
  9.     <bean id="httpDownloader" class="com.apress.prospring2.ch03.dm.HttpDownloader"/>
  10.     <bean id="sftpDownaloader" class="com.apress.prospring2.ch03.dm.SftpDownloader"/>
  11.     <bean id="downloadManager" class="com.apress.prospring2.ch03.dm.DownloadManager">
  12.         <property name="downloaders">
  13.             <map>
  14.                 <entry key="ftp" value-ref="ftpDownloader"/>
  15.                 <entry key="http" value-ref="httpDownloader"/>
  16.                 <entry key="sftp" value-ref="sftpDownaloader"/>
  17.             </map>
  18.         </property>
  19.     </bean>


  20. </beans>

 

Test Class : DownloadManager.java

  1.  
  2. package com.apress.prospring2.ch03.dm;

  3. import org.springframework.beans.factory.xml.XmlBeanFactory;
  4. import org.springframework.core.io.ClassPathResource;

  5. import java.io.BufferedReader;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import java.util.Map;
  9. import java.util.regex.Matcher;
  10. import java.util.regex.Pattern;

  11. /**
  12.  * @author janm
  13.  */
  14. public class DownloadManager {
  15. private static final Pattern URI_PATTERN = Pattern.compile("^([^:]*):/(.*)$");
  16. private Map<String, Downloader> downloaders;

  17. public static void main(String[] args) throws IOException {
  18. XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource(
  19. "/META-INF/spring/downloadmanager-context.xml"));
  20. DownloadManager dm = (DownloadManager) xbf.getBean("downloadManager");
  21. BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  22. while (true) {
  23. String uri = reader.readLine();
  24. if (uri.length() == 0)
  25. break;
  26. dm.download(uri);
  27. }
  28. }

  29. private void download(String uri) {
  30. Matcher matcher = URI_PATTERN.matcher(uri);
  31. if (matcher.matches()) {
  32. String scheme = matcher.group(1); //reg Exp 를 이용하여 1번그룹 추출(http, ftp, sftp)
  33. System.out.println(scheme);
  34. String path = matcher.group(2);
  35. Downloader downloader = this.downloaders.get(scheme); // downloaderManager bean의 Map에서 스키마를 꺼낸다
  36. if (downloader != null) {
  37. downloader.download(path);
  38. }
  39. }
  40. }
  41. public void setDownloaders(Map<String, Downloader> downloaders) {
  42. this.downloaders = downloaders;
  43. }
  44. }

 

Interface Downloader.java

  1.  
  2. package com.apress.prospring2.ch03.dm;
  3. public interface Downloader {
        byte[] download(final String uri);
  4. }

 

구현체 FtpDownloader.java , HttpDownloader.java , sFtpDownLoader.java

  1. package com.apress.prospring2.ch03.dm;
  2. import org.springframework.stereotype.Component;
  3. @Component
  4. public class FtpDownloader implements Downloader {
  5.     public byte[] download(String uri) {
  6.         System.out.println("FTP Downloading " + uri);
  7.         return new byte[0];
  8.     }
  9. }

이 글은 스프링노트에서 작성되었습니다.

Posted by 이버리
,