2016-10-08 4 views
1

저는 전체 스프링 의존성 주입에 대해 새로운 것 같습니다.생성자가있는 클래스에 대한 스프링 종속성 삽입

@Service 
public class Service {...} 

그리고 다른 클래스 :

public class A{ 
    @Autowired 
    private Service service; 
    ... 
} 

이해가 안 잘하면 누군가가 나를 위해 그것을 정리 수있는 한 가지 ...

가 나는 서비스가가 이 경우 서비스는 예상대로 클래스 A에 주입됩니다. 아는 한 클래스 A에서 생성자를 사용할 수 없습니다. 그렇지 않으면 삽입이 작동하지 않습니다. 클래스 A에서 생성자를 사용하고 동시에 서비스를 삽입 할 수있는 방법이 있습니까? 즉 :

public class A{ 
     @Autowired 
     private Service service; 

     private String a; 
     private int b; 
     public A(String a,int b){ 
     this.a = a; 
     this.b = b; 
     } 
    } 

내가 그 서비스를 받고있어이 경우는 그것을 해결하기 위해 어쨌든, 널? 서비스를 삽입 한 상태에서 "new"를 사용하여 유형 A의 객체를 만들 수있게하려면 가능합니까?

감사합니다.

답변

1

있습니다. Spring 구성 클래스 (@Configuration으로 주석 처리 됨)에 서비스 클래스의 인스턴스를 수동으로 만들고 클래스 대신 @Service으로 인스턴스를 만드는 메소드에 주석을 달아야한다.

@Configuration 
public class MyApplicationConfig { 
    @Bean 
    public Service myService() { 
     return new Service("hello", "world", 42); // ctor args as an example 
    } 
} 

그리고 당신의 서비스 클래스 :

그래서, 예를 들어, 응용 프로그램은 다음과 같습니다 Spring 설정이있을 수 있습니다

// need fully qualified class because your class has the same name 
@org.springframework.stereotype.Service 
public class Service { 
    public Service(String prefix, String suffix, int number) { 
     // Whatever 
    } 
} 
+0

빠른 답장을 보내 주셔서 감사합니다. 어떤 예가 있습니까? 네가하는 말을 완전히 이해했는지 모르겠다. –

0

중요한 비트는 수업의 모두이다 스프링 빈이어야합니다.

이것은 차례로 모든 인스턴스화가 Spring 컨테이너에 의해 수행됨을 의미합니다. whysoever, 당신이 권장되는 방법보다, 클래스 A Spring 빈을 할 수없는 경우 제대로 생성자 기반의 의존성 주입을 처리 ref doc

의이 비트를 확인하는 방법에 대한 자세한 내용은 종속성을 autowire하기됩니다 @Configurable로 주석하는 것입니다 생성시.

이렇게하려면 애스펙트를 사용해야합니다. 빠른 검색을 수행하여이 내용을 설명하는 좋은 일을하는 것처럼 보이는 blog을 발견했습니다.

관련 문제