2017-02-23 21 views
0

我对Java比较陌生,来自Web背景,我发现自己试图在Spring中实现Web应用程序。将Spring上下文注入非弹簧类

的主要问题是,我有以下文件夹结构: enter image description here

,我试图注入Spring上下文到Controllers文件夹,这基本上,据我了解的手段,我的班级中找到的任何类不依赖于Spring。

应用程序使用MongoDB的作为后端,和我想instantinate这样的背景下:

WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext(); 

IODataInterface mongo = context.getBean(BookModel.class); 

我得到的context.getBean(...)行此异常:COM。 web.spring.Controllers.DemoController.DemoController(DemoController.java:19)

任何帮助表示赞赏,我会很高兴,如果有人能正确地解释我的实际术语的,你可能已经猜到了,我有为有0个Java工作经验的人跳入了一些相当先进的东西。

完整异常堆栈:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

而且据我看到的,上下文似乎生成,但getBean()方法不起作用。我现在很困惑。

+1

发布完全例外,你的控制器应该已经是bean了,所以只需要正常的自动装配。 – Strelok

+0

我已经添加了异常,不确定自动装配,因为目前为止我似乎有上下文,但getBean仍然不起作用。 BookModel在applicationContext中也被定义为一个Bean。这真是令人困惑。 –

回答

1

你似乎试图获得一个模型类的实例(注释@Document我想象,因为你使用的是MongoDb)。 @Document和JPA @Entity注释类实际上不是Spring Beans。

因此,要实例化一个新的,你可以使用new BookModel()

PS。另外,请采用小写包/文件夹命名约定。只有类名应该以大写字母开头。

+0

我的模型类也使用MongoTemplate,我不再确定如何在没有Bean的情况下进行初始化。这将是什么适当的方法? –

+0

这不是一个好的设计,因为您将模型与数据层的实现耦合在一起(想象如果您现在必须将对象保存在其他内容中而不是MongoDb中)。如果您使用的是MongoTemplate,请引入一个“服务”层,在其中注入MongoTemplate并使用它。将您的业务逻辑保存在服务中,并将服务注入到控制器中。你也无法获得spring来将你的依赖注入到模型类中。 – Strelok