Java 将Spring上下文注入非Spring类

Java 将Spring上下文注入非Spring类,java,spring,spring-mvc,Java,Spring,Spring Mvc,我对Java比较陌生,来自web背景,我发现自己试图在Spring中实现一个web应用程序 主要问题是我有以下文件夹结构: 我试图将Spring上下文注入到Controllers文件夹中的任何类中,就我所知,这基本上意味着我的类不依赖于Spring 应用程序使用MongoDB作为后端,我正尝试像这样实例化上下文: WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext(); IODataInt

我对Java比较陌生,来自web背景,我发现自己试图在Spring中实现一个web应用程序

主要问题是我有以下文件夹结构:

我试图将Spring上下文注入到Controllers文件夹中的任何类中,就我所知,这基本上意味着我的类不依赖于Spring

应用程序使用MongoDB作为后端,我正尝试像这样实例化上下文:

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()不起作用。我现在真的很困惑。

您似乎在尝试获取模型类的实例(我想是由
@Document注释的,因为您使用的是MongoDb)
@Document
和JPA
@Entity
注释类实际上不是springbean

因此,要实例化一个新的,只需使用
newbookmodel()


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

发布完整的异常,并且您的控制器应该已经是bean,所以只有正常的自动连接应该可以工作。我已经添加了异常,不确定自动连接,因为到目前为止,我实际上似乎有上下文,但getBean仍然不工作。BookModel在applicationContext中也定义为Bean。这真是让人困惑。我的模型类还使用了MongoTemplate,我不再确定在没有Bean的情况下如何初始化它。正确的方法是什么?这不是一个好的设计,因为您将模型与数据层的实现相耦合(想象一下,如果您现在必须将对象保存在其他东西中,而不是MongoDb中)。如果您正在使用MongoTemplate,请引入一个“服务”层,在其中注入MongoTemplate并使用它。将业务逻辑保留在服务中,并将服务注入控制器中。此外,您无法让spring将依赖项注入到模型类中。