복붙노트

[SPRING] 어노테이션 기반 ServiceLocatorFactoryBean?

SPRING

어노테이션 기반 ServiceLocatorFactoryBean?

내 프로젝트에서 Factory 패턴을 구현하고 싶습니다 .i 온라인 리소스를 통해 사라졌으며 ServiceLocatorFactoryBean을 일반적인 java 팩토리 패턴 대신 구현해야한다는 것을 알게되었습니다.

나는이 링크를 따라 갔지만 그것은 xml 기반으로 설명된다. ... 어느 하나가 어노테이션 기반 팩토리 패턴을 사용하여 어떻게하는지 말해 줄 수 있는가 ??

해결법

  1. ==============================

    1.Spring Java 구성 참조 가이드 @Configuration

    Spring Java 구성 참조 가이드 @Configuration

    인터페이스 Parser.class

    public interface Parser {
      void parse(String str);
    }
    

    위의 인터페이스 구현.

    JsonParser.java

    public class JsonParser implements Parser {
      @Override
      public void parse(String str) {
         System.out.println("JsonParser.parse::" + str);
      }
    }
    

    XMLParser.java

    public class XMLParser implements Parser{
    
      @Override
      public void parse(String str) {
         System.out.println("XMLParser.parse :: " + str);
      }
    }
    

    ParserFactory.java 실제 팩토리 인터페이스.

    public interface ParserFactory {
      public Parser getParser(ParserType parserType);
    }
    

    구문 분석 유형을 지정하는 ParseType.java enum (오타 및 안전을 피하십시오)

    public enum ParserType {
    
    JSON("jsonParser"), XML("xmlParser");
    
    private final String value;
    
      ParserType(String input) {
         this.value = input;
      }
    
      public String getValue() {
         return this.value;
      }
    
      @Override
      public String toString() {
        return this.value;
      }
    }
    

    ParseService.java - 비즈니스 로직이 구현되었습니다.

    @Service
    public class ParserService {
    
     @Autowired
     private ParserFactory parserFactory;
    
     public void doParse(String parseString, ParserType parseType) {
        Parser parser = parserFactory.getParser(parseType);
        System.out.println("ParserService.doParse.." + parser);
        parser.parse(parseString);
     }
    }
    

    마지막으로 AppConfig.java 봄 자바 구성 클래스, 컨테이너 빈으로 등록 된 모든 콩.

    @Configuration
    @ComponentScan(basePackages = {"<Your Package Name>"})
    public class AppConfig {
     @Bean
     public FactoryBean serviceLocatorFactoryBean() {
        ServiceLocatorFactoryBean factoryBean = new ServiceLocatorFactoryBean();
        factoryBean.setServiceLocatorInterface(ParserFactory.class);
        return factoryBean;
     }
    
     @Bean(name = "jsonParser")
     @Scope(scopeName = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
     public JsonParser jsonParser() {
        return new JsonParser();
     }
    
     @Bean(name = "xmlParser")
     @Scope(scopeName = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
     public XMLParser xmlParser() {
        return new XMLParser();
     }
    }
    

    이제 컨트롤러 또는 테스트 클래스에서 Parser Service Bean을 자동으로 호출하고 테스트 할 parse (String, ParseType) 메서드를 호출합니다.

    여기에 내 시험이있다.

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = AppConfig.class)
    public class ServiceLocatorFactoryExample {
    
    
     @Autowired
     private ParserService parserService;
    
     @Test
     public void testParserFactory() {
        parserService.doParse("Srilekha", ParserType.JSON);
        parserService.doParse("Srilekha", ParserType.XML);
     }
    }
    
  2. from https://stackoverflow.com/questions/33993063/annotation-based-servicelocatorfactorybean by cc-by-sa and MIT license