java 使用名称创建bean时出错

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/41651440/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 06:01:00  来源:igfitidea点击:

Getting Error creating bean with name

javaspringmavenspring-mvc

提问by Brns

I'm creating a Spring MVC Maven module based project so I have divided every layer into a maven module. When I try to run a basic site, code compiles fine but I get the error:

我正在创建一个基于 Spring MVC Maven 模块的项目,所以我将每一层划分为一个 Maven 模块。当我尝试运行基本站点时,代码编译正常,但出现错误:

SEVERE: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'addressController' defined in file [C:\Program Files\Apache Software Foundation\Tomcat 8.0\wtpwebapps\croz-web\WEB-INF\classes\hr\croz\bspoljaric\controller\AddressController.class]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect bean class [hr.croz.bspoljaric.controller.AddressController] for resource metadata: could not find class that it depends on
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4851)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: Failed to introspect bean class    [hr.croz.bspoljaric.controller.AddressController] for resource metadata: could not find class that it depends on
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.findResourceMetadata(CommonAnnotationBeanPostProcessor.java:344)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:297)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:953)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522)
... 20 more
Caused by: java.lang.NoClassDefFoundError: Lhr/croz/bspoljaric/service/AddressService;
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Unknown Source)
at java.lang.Class.getDeclaredFields(Unknown Source)
at org.springframework.util.ReflectionUtils.getDeclaredFields(ReflectionUtils.java:715)
at org.springframework.util.ReflectionUtils.doWithLocalFields(ReflectionUtils.java:656)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.buildResourceMetadata(CommonAnnotationBeanPostProcessor.java:361)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.findResourceMetadata(CommonAnnotationBeanPostProcessor.java:340)
... 23 more
Caused by: java.lang.ClassNotFoundException:      hr.croz.bspoljaric.service.AddressService
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167)
... 30 more

AddressDao.java

AddressDao.java

package hr.croz.bspoljaric.dao;

import java.util.List;

import hr.croz.bspoljaric.entity.Address;

public interface AddressDAO {

public void save(Address address);

public void delete(int addressID);

public Address get(int contactId);

public List<Address> getAll();
}

AddressDaoImpl.java

AddressDaoImpl.java

import java.util.List;

import org.springframework.stereotype.Repository;

import hr.croz.bspoljaric.dao.AddressDAO;
import hr.croz.bspoljaric.entity.Address;

@Repository
public class AddressDAOImpl implements AddressDAO{

@Override
public void save(Address address) {
    // TODO Auto-generated method stub

}

@Override
public void delete(int addressID) {
    // TODO Auto-generated method stub

}

@Override
public Address get(int contactId) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public List<Address> getAll() {
        List<Address> as = new ArrayList<>();
        Address a = new Address();
        a.setId(1l);
        a.setStreet("MAKSIMIRSKA");
        a.setStreetNo("2");
        a.setCity(null);
        as.add(a);
        System.out.println("TEST: " + as.get(1));
        return as;

}

}

AddressService.java

地址服务.java

package hr.croz.bspoljaric.service;

import java.util.List;

import hr.croz.bspoljaric.entity.Address;

public interface AddressService {

public List<Address> getAll();

}    

AddressServiceImpl.java

AddressServiceImpl.java

package hr.croz.bspoljaric.serviceimpl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import hr.croz.bspoljaric.dao.AddressDAO;
import hr.croz.bspoljaric.entity.Address;
import hr.croz.bspoljaric.service.AddressService;

@Service
public class AddressServiceImpl implements AddressService {
@Autowired
AddressDAO dao;

public List<Address> getAll() {
    return dao.getAll();

}
}

AddressController.java

地址控制器.java

package hr.croz.bspoljaric.controller;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;



import hr.croz.bspoljaric.service.AddressService;


@Controller
@RequestMapping("/test")
public class AddressController {

@Autowired
AddressService ads;

@RequestMapping(value = "/getAll", method = RequestMethod.GET)
public String getAllAddresses(Model model)
{
  model.addAttribute("addresses", ads.getAll());
  System.out.println("TEST!");
  return "addressesListDisplay";

 }


 }

web.xml

网页.xml

 <?xml version="1.0" encoding="UTF-8"?>
 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Croz Web Application</display-name>

<servlet>
    <servlet-name>spring</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

spring-servlet.xml

spring-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context/
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<context:component-scan base-package="hr.croz.bspoljaric" />


<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/" />
    <property name="suffix" value=".jsp" />
</bean>

Project view(all except web module):

项目视图(除web模块外的所有):

https://imgur.com/a/mgBpd

https://imgur.com/a/mgBpd

Project view(web module):

项目视图(网络模块):

https://imgur.com/a/4gtp8)

https://imgur.com/a/4gtp8)

回答by chaoluo

You need to mvn clean installin parent module to install the other module to local repo before you run your web module alone.

mvn clean install在单独运行 Web 模块之前,您需要在父模块中将另一个模块安装到本地存储库。

Or you can mvn clean install -amin web module, so that it will build the depended modules.

或者你可以mvn clean install -am在 web 模块中,这样它就会构建依赖的模块。

Please change the packaging to jar in service module, or just remove it, the default packaging is jar.

请在服务模块中将打包更改为jar,或者直接删除,默认打包为jar。

<packaging>jar</packaging>
<name>croz-service</name>