自动装配LinkedBlockingQueue时出现空指针异常

spa*_*kle 2 spring nullpointerexception autowired

尝试在我的solrQueue中添加任何内容时,我得到空指针异常.我检查了调试器,这是因为solrQueue为null.但是我已经在我的应用程序上下文中自动启动了它为什么会出现此错误?

public class Check {
    @Autowired
    public LinkedBlockingQueue<SolrInputDocument> solrQueue;
    public SolrInputDocument solrDoc;   
    public void solradd(){
        solrDoc=new SolrInputDocument();
        solrDoc.addField("title", "abc");
        solrQueue.add(solrDoc);//solrQueue is null 
    }
}
Run Code Online (Sandbox Code Playgroud)

应用Context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-2.5.xsd">

    <context:annotation-config />
    <!--<context:component-scan base-package="com/abc" />   -->

    <bean id="solrQueue" class="java.util.concurrent.LinkedBlockingQueue" />
    <bean id="check" class="com.abc.Check" scope="prototype" />

</beans>
Run Code Online (Sandbox Code Playgroud)

Tom*_*icz 7

您正在Check手动创建类的实例,而不是要求Spring为您创建/返回一个实例:

Check c=new Check();
c.solradd();
Run Code Online (Sandbox Code Playgroud)

这永远不会工作,因为Spring不知道你创建了Check类.根据您如何启动Spring上下文,您必须明确询问应用程序上下文:

Check check = applicationContext.getBean(Check.class)
Run Code Online (Sandbox Code Playgroud)

或者将checkbean注入其他组件如控制器:

@Autowired
private Check check;
Run Code Online (Sandbox Code Playgroud)

也可以看看:

*AspectJ编织将成功,但这就像使用大炮杀死一只苍蝇