2013-04-14 1 views
0

에 회원을 생성하지 않습니다@Autowired 내가 autowire가 회원이 생성 된 후 컨텍스트에서 생성 된 빈을,이 생성자

@Service 
public class FileDownloadService extends WFWFileDownloadService { 
    @Autowired 
    ConfigurationManager configurationManager; 

내가 코드를 수동 생성자 호출에 사용

FileDownloadService fileDownloadService = new FileDownloadService(); 

나는 ConfigurationManager가가 null 참조, 그래서 수동 배선을 확인해야합니다 :

public FileDownloadService() { 
     configurationManager = new ConfigurationManagerImpl(); 
    } 

내가 잘못하고있는 중이 야 무엇을 수동 작성으로 자동 와이어 링을 작동 시키십니까?

+0

ConfigurationManager는 @Component입니까? 구성 요소 스캔을 사용합니까? 응용 프로그램 컨텍스트, web.xml 주셔서 감사합니다. –

+0

BEAN과 OBJECT의 차이점에 대한 Donal의 아이디어를 아래에서 볼 수 있습니다. 이쪽으로가 봅시다. 고마워. – mad

답변

2

생성자를 직접 호출하면 객체를 만들고 단지 이 아니며 빈을 생성합니다. @Autowired 주석의 지원은 bean의 기능입니다.

빈에 대한 컨텍스트를 문의하십시오.

+0

또는 호출 객체에 스프링에 의해 서비스가 삽입되었습니다 –

+0

컨텍스트를 얻는 방법을 보여 주시겠습니까? – mad

+0

내 견해로 볼 때 나쁜 습관입니다 ... 봄은 주석으로 간단하게 유지합니다 ... 격일마다 변경해야합니다. –

1

new 연산자를 사용하여 빈을 얻으려고하면 해당 클래스의 모든 autowired 빈을 null으로 가져옵니다.

서비스 클래스에는 @Service으로 주석이 달려 있으므로 사용하려면이 서비스 클래스도 자동으로 연결해야합니다. 다른 클래스에 서비스 빈에 액세스 할 수

샘플 코드는 다음과 같습니다 위해

@Controller or @Component 
public class OtherClass { 

    @Autowired FileDownloadService fileService; 

    public void download() { 
     fileService.downloadFile(); 
    } 

} 

이 클래스가 다른 콩 autowire하기 할 수 있도록,이 클래스 자체가 @Controller 또는 @Component 주석이되어야한다.

+0

감사하지만 내 질문은 다른 것에 관한 것입니다. 도날의 대답을 참조하십시오. 그는 중요하다. 당신이 나를 위해 모범을 보이면 나는 감사 할 것입니다. – mad

0

대답은 간단합니다. 수동으로 개체를 만들면 관련된 배선이 없습니다. Spring은 배선에 대한 필요성을 어떻게 인식해야합니까? new를 사용하는 대신 응용 프로그램 컨텍스트 (Bean Factory)의 getBean() 메소드를 사용할 수 있습니다. http://static.springsource.org/spring/docs/current/javadoc-api/index.html?org/springframework/beans/factory/BeanFactory.html http://static.springsource.org/spring/docs/current/javadoc-api/index.html?org/springframework/beans/factory/BeanFactory.html

관련 문제