Java autowire-in返回bean的空指针

Java autowire-in返回bean的空指针,java,spring,autowired,Java,Spring,Autowired,当我尝试使用spring和struts2在tomcat中运行应用程序时,出现以下异常。当struts调用execute方法时,它似乎无法访问Autowired OwnerService。有人知道哪里有错吗 java.lang.NullPointerException se.b5.com.database.action.SearchAction.execute(SearchAction.java:42) sun.reflect.NativeMethodAccessorImpl.in

当我尝试使用spring和struts2在tomcat中运行应用程序时,出现以下异常。当struts调用execute方法时,它似乎无法访问Autowired OwnerService。有人知道哪里有错吗

java.lang.NullPointerException
    se.b5.com.database.action.SearchAction.execute(SearchAction.java:42)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)
    org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:161)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:563)
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
我的spring.xml如下所示

<context:annotation-config/>

<context:component-scan base-package="se.b5.com.database"/>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="se.b5.com.database.model"/>
<!--    <property name="configLocation" value="classpath:spring.xml"></property> -->
    <!-- <property name="configLocation" >
    <value>/spring.xml</value>
    </property>  -->

    <property name="hibernateProperties">
        <props>
        <prop key="hibernate.show_sql">true</prop>
        <prop key="dialect">org.hibernate.dialect.MySQL5Dialect</prop>
        </props>
    </property>
</bean>

    <bean id="ownerService" class="se.b5.com.database.service.OwnerService">
     <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    <bean id="searchAction" class="se.b5.com.database.action.SearchAction">  
    </bean>

真的
org.hibernate.dialogue.mysql5dialogue
最后是我的课堂

public class SearchAction {

    @Autowired
    private OwnerService ownerService;

    public void setOwnerService(OwnerService ownerService) {
        this.ownerService = ownerService;
    }


    public OwnerService getOwnerService() {
        return ownerService;
    }


    public String name;

    public String getName() {
        return name;
    }

    public  void setName(String name) {
        this.name = name;
    }


    List<User> users;

    public List<User> getUsers() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }


    public String execute() {
        users = ownerService.getAllUsers();
        System.out.println(users.size());
        for(User u : users){
            if(u.getUserName().equals(name)){
                setName(name);
                return "yes";
                }
            }
            for(User u : users){
            if (u.getUserName() != name) { 
                return "no";
                }
            }

        return "no";
    }

}
公共类搜索操作{
@自动连线
私人所有者服务所有者服务;
public void setOwnerService(OwnerService OwnerService){
this.ownerService=ownerService;
}
public OwnerService getOwnerService(){
返回所有者服务;
}
公共字符串名称;
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
列出用户名单;
公共列表getUsers(){
返回用户;
}
公共用户(列表用户){
this.users=用户;
}
公共字符串execute(){
users=ownerService.getAllUsers();
System.out.println(users.size());
for(用户u:用户){
if(u.getUserName().equals(name)){
集合名(名称);
返回“是”;
}
}
for(用户u:用户){
如果(u.getUserName()!=name){
返回“否”;
}
}
返回“否”;
}
}

您可能需要修改SearchAction bean以明确声明自动连接

<bean id="searchAction" class="se.b5.com.database.action.SearchAction" 
        autowire="byName"/>

您是否在包
se.b5.com.database
中使用了
SearchAction
类?是的,它在se.b5.com.database.action中。在这种情况下,byName应该是自动连线bean的类名吗?我刚刚添加了autowire=“byName”,没有区别,仍然获得一个空指针
byName
引用bean ID。因此,SearchAction类中的变量名
ownerService
应该对应于应用程序上下文中的bean ID
ownerService
,确实如此。但我认为它应该在默认情况下自动关联变量的类型(因此它会将您的实例变量
ownerService
与类型为
ownerService
的bean相匹配)。
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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.5.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-2.5.xsd">

    <context:annotation-config/>

    ...

</beans>