2

CrudRepository を使用して java.lang.NullPointerException を取得しました

私のプロジェクトは次のようになります。

strut2 アクション

サービス

リポジトリ

ドメイン

class Action {
  @Autowired MyService service;
  public String execute(){
    service.getList();
    return "ok";
  }
}

interface Service {
   List getList();
}

@org.springframework.stereotype.Service
class ServiceImpl implements Service {
  @Autowired MyRepository repo;
  List getList(){
    return (List)repo.findAll();
  }
}
package com.mycompany.repositories;
interface MyRepository extends CrudRepository<MyPojo, String>{}

ここに設定があります:

  <?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:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jpa="http://www.springframework.org/schema/data/jpa"
       xsi:schemaLocation=" http://www.springframework.org/schema/beans 
                            http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                            http://www.springframework.org/schema/context
                            http://www.springframework.org/schema/context/spring-context-3.1.xsd
                            http://www.springframework.org/schema/tx
                            http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
                            http://www.springframework.org/schema/data/jpa 
                            http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">

    <jpa:repositories base-package="com.mycompany.repositories" />

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" >
        <property name="entityManagerFactory" ref="entityManagerFactory" />
        <property name="jpaDialect">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
        </property>
    </bean>
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="persistenceUnitName" value="unit-name" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="true" />
                <property name="generateDdl" value="true" />
                <property name="database" value="POSTGRESQL"/>
            </bean>
        </property>
    </bean>
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="username" value="root" />
        <property name="password" value="root" />
        <property name="driverClassName" value="org.postgresql.Driver" />
        <property name="url" value="jdbc:postgresql://127.0.0.1:5432/mydb" />
    </bean>

    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"></bean>  

    <tx:annotation-driven transaction-manager="transactionManager" />
</beans>

私はここが初めてで、Action クラスを呼び出すたびにサービスが注入されますが、MyRepository は常に null です。

誰か助けてください。さらに情報が必要な場合は、教えてください、thx!

編集1

スタックトレース:

2012-06-26 15:33:32,041 INFO  - com.myproject.action.project.preparation.ApplicationAction - listing application...
java.lang.NullPointerException
    at com.myproject.service.impl.ApmProjectPreparationServiceImpl.getAllApplications(ProjectPreparationServiceImpl.java:41)
    at com.myproject.action.project.preparation.ApplicationAction.listAction(ApplicationAction.java:67)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:453)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:292)

私も自分でデバッグしようとしました。クラス ServiceImpl で@Autowired MyRepository リポジトリが null であることがわかりました。

4

1 に答える 1

0

答えが見つかったようです。SpringForumの@MartenDeinumに感謝します

ここにトリックがあります:

  1. GUIにstruts2を使用しているので、struts2オブジェクトファクトリを書き直すためにstruts2 springプラグインが必要です。これにより、springがstrutsアクションを検出できるようになります。

  2. @Serviceにこの設定を追加しました

    <context:component-scan base-package="com.myproject" />
    

    基本的に私も必要です

    <jpa:repositories base-package="com.myproject.repository" />
    

    CrudRepositoryを検索します。

これが他の人を助けることができることを願っています。

于 2012-06-27T14:15:03.200 に答える