2013-11-22 2 views
0

SPRING을 배우고 있는데 이것은 웹 응용 프로그램 코드가 아닙니다. 필드 수준에서 @Autowired 주석을 사용하는 동안 NLP가 표시됩니다.NullPointerException : @Autowired가 필드를 설정하지 않습니다.

1) 무엇이 잘못 되었나요?
Q2) 클래스 수준에서 @Scope 주석을 사용하는 경우; XML bean 레벨에서 여전히 필요합니까?

Exception in thread "main" java.lang.NullPointerException 
     at com.pactolus.streamingController.StreamingController.main(

답변

1

사용 ApplicationContext 대신 BeanFactory :

<?xml version="1.0" encoding="UTF-8"?> 
<beans> 
    <context:annotation-config /> 
    <context:component-scan base-package="com.xxx.streamingController"/> 
    <bean id="scMgr" class="com.xxx.streamingController.StreamingControllerManager"> 
    </bean> 
    <bean id="streamingController" class="com.xxx.streamingController.StreamingController"> 
    </bean> 
</beans> 

출력


@Controller 
@Scope(value = BeanDefinition.SCOPE_SINGLETON) 
public class StreamingController implements psConsolePortListener.Implementation{ 

    @Autowired 
    @Qualifier("scMgr") 
    private StreamingControllerManager streamingMgr = null; 

    public static void main(String[] args) { 
     logger.info("StreamingController testing"); 
     XmlBeanFactory factory = new XmlBeanFactory (new ClassPathResource(BEAN_FILE)); 
     StreamingController obj = (StreamingController) factory.getBean("streamingController"); 
     obj.streamingMgr.test(); 
    } 

} 


@Service 
@Scope(value = BeanDefinition.SCOPE_SINGLETON) 
@Qualifier("scMgr") 
public class StreamingControllerManager { 
    /** Logger */ 
    private static final Logger logger = LoggerFactory.getLogger(StreamingControllerManager.class); 

    private StreamingControllerManager(){ 
     logger.info("StreamingControllerManager is called!!"); 
    } 

    public void test(){ 
     logger.info("StreamingControllerManager test!!"); 
    } 
} 

.

public static void main(String[] args) { 
    logger.info("StreamingController testing"); 
    ApplicationContext ctx = new ClassPathXmlApplicationContext(BEAN_FILE); 
    StreamingController obj = (StreamingController) ctx.getBean("streamingController"); 
    obj.streamingMgr.test(); 
} 

또한 이미 <context:component-scan />에 의해 impllied됩니다 <context:annotation-config />를 제거하고 빈 선언을 제거합니다. 구성 요소 검색을 사용하므로 bean을 선언 할 필요가 없습니다.

기본적으로 나와 함께 있습니다.

<?xml version="1.0" encoding="UTF-8"?> 
<beans> 
    <context:component-scan base-package="com.xxx"/> 
</beans> 
+0

감사합니다. 당신은 BeanFactory의 단점이라고 말하는 것을 의미합니까 ?? –

+0

'BeanFactory'와'ApplicationContext'는 다른 것들이 없습니다. ('BeanFactory'는 단지 빈을 생성하고'Bean (Factory) PostProcessors'와는 아무런 관계가 없습니다. 반면'ApplicationContext'는 않습니다). 나는 스프링 레퍼런스 가이드의 3 장을 읽기를 강력하게 제안한다. –

+0

효과가있었습니다. 큰!! 더 많은 정보를 가져 주셔서 감사합니다. –

관련 문제