2017-03-27 71 views
0

我想下面的代碼運行異常線程 「main」 org.springframework.beans.factory.BeanCreationException:錯誤創建豆

import org.springframework.context.ApplicationContext; 
import org.springframework.context.annotation.AnnotationConfigApplicationContext; 
import org.uprs.config.AppConfig; 
import org.uprs.model.POC; 
import org.uprs.repository.POCRepository; 

public class test { 
public static void main(String[] args) { 
    ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); 
    POC person = new POC(); 
    person.setID(2l); 
    person.setName("Rohit"); 
    person.setOwner("Mishra"); 
    person.setEngagement("Pune"); 
    context.getBean(POCRepository.class).save(person); 
} 
} 

我的配置類:

AppConfig.class

package org.uprs.config; 

import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Import; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 

@EnableWebMvc 
@ComponentScan(basePackages = "org.uprs.services") 
@Import({RepositoryConfig.class}) 
public class AppConfig{ 
} 

RepositoryConfig.class

package org.uprs.config; 

import java.util.HashMap; 
import java.util.Map; 

import javax.sql.DataSource; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.PropertySource; 
import org.springframework.data.jpa.repository.config.EnableJpaRepositories; 
import org.springframework.jdbc.datasource.DriverManagerDataSource; 
import org.springframework.orm.jpa.JpaTransactionManager; 
import org.springframework.orm.jpa.JpaVendorAdapter; 
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; 
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; 

@Configuration 
@EnableJpaRepositories(basePackages = {"org.uprs.repository"}) 
public class RepositoryConfig { 

    @Bean 
    public DataSource dataSource() { 
     DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
     dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
     dataSource.setUrl("jdbc:mysql://localhost:3306/sakila"); 
     dataSource.setUsername("root"); 
     dataSource.setPassword("admin"); 
     return dataSource; 
    } 

    @Bean 
    public Map<String, Object> jpaPropertyMap(){ 
     Map<String, Object> jpaProperties = new HashMap<>(); 
     jpaProperties.put("javax.persistence.validation.mode", "none"); 
     jpaProperties.put("hibernate.event.merge.entity_copy_observer", "allow"); 
     return jpaProperties; 
    } 

    /** 
    * Configuration object required by Hibernate 
    * @return EntityManagerFactoryBean 
    */ 
    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 
     LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean(); 
     emf.setDataSource(dataSource()); 
     emf.setPackagesToScan("org.uprs.model"); 
     emf.setJpaVendorAdapter(jpaVendorAdapter()); 
     emf.setJpaPropertyMap(jpaPropertyMap()); 
     return emf; 
    } 

    /** 
    * Configuration object required by Hibernate 
    * @return JpaVendorAdapter 
    */ 
    @Bean 
    public JpaVendorAdapter jpaVendorAdapter() { 
     HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter(); 
     hibernateJpaVendorAdapter.setShowSql(true); 
     hibernateJpaVendorAdapter.setDatabasePlatform("org.hibernate.dialect.MySQLDialect"); 
     return hibernateJpaVendorAdapter; 
    } 

    /** 
    * Configuration object required by Hibernate 
    * @return JpaTransationManager 
    */ 
    @Bean 
    public JpaTransactionManager transactionManager() { 
     JpaTransactionManager txnMgr = new JpaTransactionManager(); 
     txnMgr.setEntityManagerFactory(entityManagerFactory().getObject()); 
     return txnMgr; 
    } 
} 

我的模型類: POC.class

package org.uprs.model; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name="contacts") 
public class POC { 

    @Id 
    @Column(name="ID") 
    Long ID; 

    @Column(name="Name") 
    String Name; 


    @Column(name="Owner") 
    String Owner; 

    @Column(name="Engagement") 
    String engagement; 

    public Long getID() { 
     return ID; 
    } 

    public void setID(Long ID) { 
     this.ID = ID; 
    } 

    public String getName() { 
     return Name; 
    } 

    public void setName(String Name) { 
     this.Name = Name; 
    } 

    public String getOwner() { 
     return Owner; 
    } 

    public void setOwner(String Owner) { 
     this.Owner = Owner; 
    } 

    public String getEngagement() { 
     return engagement; 
    } 

    public void setEngagement(String engagement) { 
     this.engagement = engagement; 
    } 
} 

我的倉庫類:POCRepository類

package org.uprs.repository; 

import org.springframework.data.repository.CrudRepository; 
import org.uprs.model.POC; 

public interface POCRepository extends CrudRepository<POC, Long> { 

} 

我的服務類:

package org.uprs.services; 

import java.util.List; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RestController; 
import org.uprs.model.POC; 
import org.uprs.repository.POCRepository; 


@RestController 
@RequestMapping("/poc") 
public class POCService { 

    @Autowired 
    POCRepository pocRepository; 

    @RequestMapping(value = "/all", method = RequestMethod.GET) 
    public List<POC> getPOCDetails(){ 
     return (List<POC>) pocRepository.findAll(); 
    } 
} 

我運行的主類並得到以下錯誤。

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultServletHandlerMapping' defined in org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerMapping]: Factory method 'defaultServletHandlerMapping' threw exception; nested exception is java.lang.IllegalArgumentException: A ServletContext is required to configure default servlet handling 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.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:776) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) 
    at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:84) 
    at test.main(test.java:9) 
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerMapping]: Factory method 'defaultServletHandlerMapping' threw exception; nested exception is java.lang.IllegalArgumentException: A ServletContext is required to configure default servlet handling 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) 
    ... 13 more 
Caused by: java.lang.IllegalArgumentException: A ServletContext is required to configure default servlet handling 
    at org.springframework.util.Assert.notNull(Assert.java:115) 
    at org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer.<init>(DefaultServletHandlerConfigurer.java:53) 
    at org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.defaultServletHandlerMapping(WebMvcConfigurationSupport.java:456) 
    at org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration$$EnhancerBySpringCGLIB$$23112fed.CGLIB$defaultServletHandlerMapping$39(<generated>) 
    at org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration$$EnhancerBySpringCGLIB$$23112fed$$FastClassBySpringCGLIB$$d0aceb5c.invoke(<generated>) 
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) 
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356) 
    at org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration$$EnhancerBySpringCGLIB$$23112fed.defaultServletHandlerMapping(<generated>) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) 
    ... 14 more 

我的web.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_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>UPRS</display-name> 
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 

    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextClass</param-name> 
      <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> 
     </init-param> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>org.uprs.config.AppConfig</param-value> 
     </init-param> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/services/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

請幫我

+2

您正試圖在非web環境中配置web相關功能... –

+0

在主類中應該做些什麼,以便我可以模擬測試插入數據的代碼 –

回答

0

請使用@WebAppConfiguration而不是@EnableWebMvc因爲你是在測試環境中。

+0

我的早期問題已通過刪除@EnableWebMVC.now問題是當我打到url http:// localhost:8080/UPRS/services/poc/all下時,它告訴沒有資源。 –

+0

現在不是'@ EnableWebMvc'謂詞註釋嗎?只是爲了澄清。 – Reborn

+0

請檢查您是否有指向其餘控制器包的mvc:註釋驅動標籤和組件掃描。 – OTM

0

使用主類時,請刪除@EnableWebMVC並運行。它會正常工作。

相關問題