1

ビジネス層サービスを公開するために、 Jersey-Spring統合を使用しています。
私の web.xml では、SpringServlet を使用しています。

com.sun.jersey.spi.spring.container.servlet.SpringServlet

私のビジネスレイヤーには@Component注釈が付けられているため、Spring の注釈構成を介して提供される を @Service使用しています。リポジトリは、アノテーションを介してサービスに提供されます。@Repository@Autowired

フロント エンドの MVC クラスを使用するサービスを介してリポジトリを使用する場合は問題ありませんが、Jersey を介して使用すると、リポジトリ オブジェクトが取得されます。NullPointerException

私が(Mavenを介して)使用しているバージョンは次のとおりです。

  • 春 (および拡張機能): 3.1.3.RELEASE
  • ジャージー (および拡張機能): 1.17
4

2 に答える 2

1

質問に記載されているのと同じバージョンを使用してこの問題を解決する方法があります。

2 番目の方法に言及する必要がある場合、最初の方法は、通常のスプリング構成として以下に示すように、web.xml を介して sring をロードすることです。

<servlet>
    <servlet-name>project-spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:project-spring-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>project-spring</servlet-name>
    <url-pattern>*.htm</url-pattern>
  </servlet-mapping>

以下に示すように、アプリケーションを介してジャージ リソースをロードします。

@ApplicationPath("/rest")
public class ResourceLoader extends Application
{

    /* (non-Javadoc)
     * @see javax.ws.rs.core.Application#getClasses()
     */
    @Override
    public Set<Class<?>> getClasses()
    {
        Set<Class<?>> classes = new HashSet<Class<?>>();
        loadResourceClasses(classes);
        return classes;
    }

    private void loadResourceClasses(Set<Class<?>> classes)
    {
        classes.add(StudentResource.class);
    }
}

次に、リソースで:

@Path("student")
class StudentResource
{
    private StudentService studentService;

    StudentResource(@Context ServletContext servletContext)
    {
       ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
        this.transactionService = applicationContext.getBean(StudentService .class);
    }
}

Spring は、Jersey を使用したすべての依存性注入で構成されています!!!

于 2014-01-10T16:00:29.380 に答える
0

@InjectParam を使用してみてください

于 2013-08-12T18:14:13.047 に答える