복붙노트

[SPRING] Spring에서 주석이있는 제 3 자 클래스를 어떻게 자동으로 작성합니까?

SPRING

Spring에서 주석이있는 제 3 자 클래스를 어떻게 자동으로 작성합니까?

Spring Boot에 대한 대부분의 예제는 간단한 웹 애플리케이션을 작성하는 데 중점을 둡니다. 즉, 모든 것을 완벽하게 제어 할 수있는 웹 응용 프로그램입니다.

다른 측면에서 볼 때 애플리케이션의 대부분이 제 3 자 코드에 의존하는 비 웹 애플리케이션을 구축하는 방법에 대한 예제를 찾는 데 많은 어려움이 없었습니다.

아래 내 com.mypackage.Application 클래스를 고려하십시오.

package com.mypackage;

import com.3rdparty.factory.ServiceFactory;

public class Application {

  private final ServiceFactory sf;

  public Application(ServiceFactory sf) {
    this.sf = sf;
  }

  public void doSomeWork() {
    ServiceA sa = sf.getServiceA();
    [...]
}

Application 클래스는 단순히 DefaultManager를 인스턴스화하고 run ()을 호출합니다.

이제 타사 ServiceFactory 클래스에는 다음과 같은 추가 종속성이 있습니다.

package com.3rdparty.factory;

import com.3rdparty.service.ServiceA;
import com.3rdparty.service.ServiceA;

public class ServiceFactory {

  private final ServiceA sa;
  private final ServiceB sb;

  public ServiceFactory(ServiceA sa, ServiceB sb) {
    this.sa = sa;
    this.sb = sb;
  }

  public ServiceA getServiceA() {
    return sa;
  }

  public ServiceB getServiceB() {
    return sb;
  }

}

Main 클래스에서 응용 프로그램을 시작할 수 있습니다.

import com.mypackage.Application;

public class Main {

  public static void main(String[] args) { 
    ApplicationContext context = new ClassPathXmlApplicationContext("path/to/applicationContext.xml");
    Application app = (Application) context.getBean("app");
    app.doSomeWork();
  }

질문 : ServiceFactory에 ServiceS 및 ServiceS를 어떻게 삽입합니까? 이것은 제 3 자 클래스이며, 나는 그것을 제어 할 수 없으며 수정할 수 없습니다. 따라서 주석을 추가 할 수 없습니다.

이 작업을 XML 구성으로 쉽게 수행 할 수는 있지만 요즘은 어노테이션이 "베스트 프랙티스"방식 인 것처럼 보이므로 어노테이션을 어떻게 작동시킬 수 있는지 알고 싶습니다.

이 작업을 수행하는 주석 방법에 많은 양의 코드가 포함된다면 이해할 수 있다고 생각되는 XML 구성과 비교하여 어떤 이점이 있는지 알고 싶습니다. 서로 다른 프로젝트에서 쉽게 진행될 수있는 패턴을 제공합니다.

해결법

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

    1.SomeFactory를 Bean으로 빌드하는 @Configuration 클래스를 정의해야합니다.

    SomeFactory를 Bean으로 빌드하는 @Configuration 클래스를 정의해야합니다.

    @Configuration
    class SomeFactoryConfiguration {
        @Bean
        public ServiceFactory serviceFactory() {
            return new ServiceFactory(/* create/get ServiceA and ServiceB somehow */):
        }
    }
    

    이렇게하면이 ServiceFactory 인스턴스가 스프링 애플리케이션의 Bean으로 노출되어 간단히 autowire 할 수 있습니다.

    원하는 경우 ServiceS 및 Service as Beans를 작성한 다음 ServiceFactory 작성시이를 참조 할 수 있습니다.

    @Configuration
    class SomeFactoryConfiguration {
        @Bean
        public ServiceFactory serviceFactory() {
            return new ServiceFactory(serviceA(), serviceB()):
        }
        @Bean
        public ServiceA serviceA() {
            return new ServiceA();
        }
        @Bean
        public ServiceB serviceB() {
            return new ServiceB();
        }
    }
    
  2. from https://stackoverflow.com/questions/36010544/how-do-i-autowire-3rd-party-classes-with-annotations-in-spring by cc-by-sa and MIT license