web-dev-qa-db-fra.com

Erreur de création d'un bean avec le nom 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping'

Utilisez jdk 1.8

  1. SpringMVC-4.3.3
  2. SpringCore-4.3.3
  3. javax.servlet-api-3.0.1
  4. spring-data-jpa: 1.10.4
  5. hibernate-entitymanager: 4.2.5.Final
  6. hibernate-core: 4.2.5.Final
  7. Facade d'enregistrement simple pour Java: 1.6.1

J'ai rencontré avec une telle erreur

org.springframework.beans.factory.BeanCreationException: Erreur création d'un haricot avec name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': L'invocation de la méthode init a échoué. exception imbriquée est Java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotatedElementUtils.hasAnnotation

Ma question :
Pourquoi l’erreur encouragée et comment la réparer?

web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     version="3.1">
<servlet>
    <servlet-name>product</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>product</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

product-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:mvc="http://www.springframework.org/schema/mvc"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>
<context:component-scan base-package="com.kopylov.spring.controller" />
<mvc:annotation-driven/>

Manette

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class ProductController {

@RequestMapping
public String showHome(){
    return "home";
}

}

AppInitializer

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

classe publique AppInitializer (extension de classe) AbstractAnnotationConfigDispatcherServletInitializer {

@Override
protected Class<?>[] getRootConfigClasses(){
    return new Class<?>[]{
            DataConfig.class
    };
}

@Override
protected Class<?>[] getServletConfigClasses(){
    return new Class<?>[0];
}

@Override
protected String[] getServletMappings(){
    return new String[0];
}

}

DataConfig

@Configuration
@EnableTransactionManagement
@ComponentScan("com.kopylov.spring")
@PropertySource("classpath:/com/kopylov/spring/resources/app.properties")
@EnableJpaRepositories("com.kopylov.spring.repository")
public class DataConfig {
private static final String PROP_DATABASE_DRIVER = "db.driver";
private static final String PROP_DATABASE_PASSWORD = "db.password";
private static final String PROP_DATABASE_URL = "db.url";
private static final String PROP_DATABASE_USERNAME = "db.username";
private static final String PROP_HIBERNATE_DIALECT = "db.hibernate.dialect";
private static final String PROP_HIBERNATE_SHOW_SQL = "db.hibernate.dialect";
private static final String PROP_ENTITYMANAGER_PACKAGES_TO_SCAN = "db.entitymanager.packages.to.scan";
private static final String PROP_HIBERNATE_HBM2DDL_AUTO = "db.hibernate.hbm2ddl.auto";

@Resource
private Environment env;

@Bean
public DataSource dataSource(){
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName(env.getRequiredProperty(PROP_DATABASE_DRIVER));
    dataSource.setUrl(env.getRequiredProperty(PROP_DATABASE_URL));
    dataSource.setUsername(env.getRequiredProperty(PROP_DATABASE_USERNAME));
    dataSource.setPassword(env.getRequiredProperty(PROP_DATABASE_PASSWORD));

    return dataSource;
}

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(){
    LocalContainerEntityManagerFactoryBean emfb = new LocalContainerEntityManagerFactoryBean();
    emfb.setDataSource(dataSource());
    emfb.setPersistenceProviderClass(HibernatePersistence.class);
    emfb.setPackagesToScan(env.getRequiredProperty(PROP_ENTITYMANAGER_PACKAGES_TO_SCAN));
    emfb.setJpaProperties(getHibernateProperties());
    return emfb;
}

@Bean
public JpaTransactionManager transactionManager(){
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
    return transactionManager;
}

private Properties getHibernateProperties(){
    Properties properties = new Properties();
    properties.put(PROP_HIBERNATE_DIALECT, env.getRequiredProperty(PROP_HIBERNATE_DIALECT));
    properties.put(PROP_HIBERNATE_SHOW_SQL, env.getRequiredProperty(PROP_HIBERNATE_SHOW_SQL));
    properties.put(PROP_HIBERNATE_HBM2DDL_AUTO, env.getRequiredProperty(PROP_HIBERNATE_HBM2DDL_AUTO));
    return properties;
}
5
kopylov

Vous avez probablement oublié d'importer votre serlet de produit dans la classe de configuration

vous pouvez déplacer votre product-servlet.xml vers 'ressources' afin qu'il soit disponible dans classpath

de sorte que votre mappage servlet ressemble à ceci

<servlet>  
        <servlet-name>product</servlet-name>  
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:/product-servlet.xml</param-value>
         </init-param>  
        <load-on-startup>1</load-on-startup>  
</servlet> 
<servlet-mapping>
    <servlet-name>product</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

dans votre config

 @Configuration
    @EnableTransactionManagement
    @ComponentScan("com.kopylov.spring")
    @PropertySource("classpath:/com/kopylov/spring/resources/app.properties")
    @EnableJpaRepositories("com.kopylov.spring.repository")
    @ImportResource("classpath:/product-servlet.xml")
    public class DataConfig {
    //..
    }

BTW, mieux vaut ne pas mélanger les configurations xml et Java correspondantes. Comme la configuration Java est devenue la norme, vous pouvez utiliser WebMvcConfigurerAdapter 

http://www.mkyong.com/spring-mvc/gradle-spring-4-mvc-hello-world-exemple-annotation/

1
kuhajeyan

Je ne pense pas que votre répartiteur est configuré correctement dans votre web.xml. Vous n'avez pas de balises <init-param>. Voir docs

http://docs.spring.io/spring-flex/docs/1.0.x/reference/html/ch02s02.html

Essayez de modifier pour:

<servlet> <servlet-name>product</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/product-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>

EDIT pour plus d’informations De plus, je pense que vous aurez besoin d’ajouter du mappage à votre annotation @RequestMapping, voir le lien:

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping

0
FanOfSkynyrd
First clean your project and build again. Check whether you are getting this error.


Then Check with this: nested exception is Java.lang.NoSuchMethodError: 
org.springframework.core.annotation.AnnotatedElementUtils.hasAnnotation

Je pense que vous avez oublié des référentiels dans pom.xml ou plusieurs jars de versions différentes dans votre pom.xml. Parfois, vos pots de printemps ne correspondent pas mutuellement.

Ajoute ça:

<dependencyManagement>
    <dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-framework-bom</artifactId>
        <version>4.3.3.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
</dependencies>

Supprimez 4.3.3.RELEASE de toutes les dépendances de printemps.

Voir: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/overview.html (lire: Maven "Dépendance de" nomenclature ")

<dependencies>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
</dependency>
<dependencies>
0
Chandana Kumara