Java 使用SpringMVC的未定义bean
我很难理解Spring MVC。 我有以下web.xml文件:Java 使用SpringMVC的未定义bean,java,spring-mvc,nullpointerexception,Java,Spring Mvc,Nullpointerexception,我很难理解Spring MVC。 我有以下web.xml文件: <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/root-context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>RESTServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>RESTServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
尝试并更改自动连线属性的类型:
@Autowired
private DynDirectoryServiceInterface
你也错过了机会
<context:annotation-config />
MVC配置中的元素。首先,关于代码的一些想法: 您正在实现一个接口(这是好的),但没有使用它(这是坏的)。当您自动连接DynDirectoryServiceImpl时,您将绕过该接口。接口的目的是不允许其他实体直接查看您如何实现代码 要使用接口进行自动连接,我会将接口命名为通用名称(即:“DynDirectoryService”),然后在Impl类中使用“@Component(“DynDirectoryService”)”。使用类时,您可以执行“@Autowire private DynDirectoryService variableName;” 执行此操作时需要注意的一点是:必须在实现和接口之间同步方法名称。如果您想在不对当前代码进行重大更改的情况下执行此操作,只需将其设置为“@Component”(“DynDirectoryServiceInterface”),然后在使用它时执行“@Autowired DynDirectoryServiceInterface variableName;” 关于你的线路问题
System.out.println(dynDirectoryService.toString());
请注意,在dynDirectoryServiceImpl类中没有.toString()方法。你可能需要写一个。这应该是一个自动包含的方法,但我以前见过它并没有被包含,或者它只会吐出giberish,这是所使用的类的实例。(即:DynDirectoryServiceImpl@635446138792). 尝试将其添加到实现和接口中,看看是否有帮助:
@Override
public String toString() {
return "Hello, this is toString()";
}
此外,正如@SrinivasR所说,您的组件扫描不应该
<context:component-scan base-package="com.dynamease.**" />
除非您在“com.dynamease”中实际有一个名为“**”的包,否则它应该是
<context:component-scan base-package="com.dynamease" />
组件扫描将自动神奇地查看“com.dynamease”中的所有子包。我没有看到在
根上下文.xml
文件中创建dyndirectoryservicepimpl
。它是通过包扫描获取的吗?是的,在root-context.xml文件中。@fxm显示注释名称是否正确?代码本身是正确的,它在没有servlet系统的情况下运行得很好。@fxm。。我想问题就在这里。尝试在xml文件中将此更改为base package=“com.dynamease.*
到base package=“com.dynamease
。它似乎没有改变什么。
System.out.println(dynDirectoryService.toString());
@Override
public String toString() {
return "Hello, this is toString()";
}
<context:component-scan base-package="com.dynamease.**" />
<context:component-scan base-package="com.dynamease" />