Java autowire-in返回bean的空指针
当我尝试使用spring和struts2在tomcat中运行应用程序时,出现以下异常。当struts调用execute方法时,它似乎无法访问Autowired OwnerService。有人知道哪里有错吗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
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 IDownerService
,确实如此。但我认为它应该在默认情况下自动关联变量的类型(因此它会将您的实例变量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>