Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SpringMVC的未定义bean_Java_Spring Mvc_Nullpointerexception - Fatal编程技术网

Java 使用SpringMVC的未定义bean

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"

我很难理解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"
    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" />