【问题标题】:using @Controller, @Service, and @Inject in Spring MVC在 Spring MVC 中使用 @Controller、@Service 和 @Inject
【发布时间】:2015-03-31 19:59:25
【问题描述】:

我有一个工作控制器,它有一个服务,如下所示。

@Controller
public class FileController 
{
   private FileService   fileService;       // service injected by Spring

   /**
    * constructor which initializes the file service.
    * @param fileService     service used to retrieve a list of files
    */
   @Inject
   public FileController(FileService fileService)
   {
      this.fileService = fileService;
   }

   ...
}

同样,我有另一个服务,我也在另一个控制器中工作和使用。

@Controller
public class SearchController 
{
   private SearchService searchService;       // service injected by  Spring

   /**
    * constructor which initializes the search service.
    * @param searchService     service used to search for items
    */
   @Inject
   public SearchController(SearchService searchService)
   {
      this.searchService = searchService;
   }

   ...
}

服务和控制器都工作正常。

后来在开发过程中发现FileController也需要搜索服务,所以我修改了FileController如下图。

@Controller
public class FilesController
{
   // data members
   private FileService   fileService;       // service injected by Spring
   private SearchService searchService;     // service injected by Spring

   /**
    * constructor which initializes the file service.
    * @param fileService     service used to retrieve a list of files
    * @param searchService   service used to retrieve a list of items.
    */
   @Inject
   public FilesController(FileService fileService, SearchService searchService)
   {
      this.fileService   = fileService;
      this.searchService = searchService;
   }
   ...
}

这编译得很好并且部署得很好,但是当我访问使用FileController 的视图时,它会因 Spring 错误而爆炸:

org.springframework.beans.factory.BeanCreationException: 错误 用名字创建bean 'org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping#0': bean初始化失败;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建文件中定义的名称为“filesController”的 bean 时出错 [C:\rw_apps\tomcat\6.0.43-2\webapps\webquery\WEB-INF\classes\com\rockwell_collins\webquery\controller\FilesController.class]: 通过构造函数参数表达的不满足的依赖关系 [com.rockwell_collins.webquery.service.SearchService] 类型的索引 1: : 创建文件中定义的名称为“searchService”的 bean 时出错 [C:\rw_apps\tomcat\6.0.43-2\webapps\webquery\WEB-INF\classes\com\rockwell_collins\webquery\service\SearchService.class]: bean 实例化失败;嵌套异常是 java.lang.ExceptionInInitializerError;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建文件中定义的名称为“searchService”的bean [C:\rw_apps\tomcat\6.0.43-2\webapps\webquery\WEB-INF\classes\com\rockwell_collins\webquery\service\SearchService.class]: bean 实例化失败;嵌套异常是 java.lang.ExceptionInInitializerError

Spring 是否只能将一项服务注入控制器? 我尝试在我的 spring xml 文件中指定“default-autowire”,并尝试了所有可能的值,但没有任何效果。

【问题讨论】:

    标签: java spring spring-mvc tomcat


    【解决方案1】:

    您的 SearchService 是什么样的?你那里有一些 static 块吗?

    ExceptionInInitializerError '表示静态初始化程序中发生了意外异常'

    【讨论】:

    • 你完全正确。这是服务类中的静态块的问题。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2013-12-21
    • 2014-07-03
    • 2013-06-08
    • 2018-01-20
    • 2014-05-17
    相关资源
    最近更新 更多