2015-05-04 2 views
0

Я новичок в Spring MVC, я пытаюсь создать приложение Contact Manager с помощью MVC с пружинной структурой и аннотацией. во время выполнения я получаю исключение org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'homeController': Injection of autowired dependencies failed.Я искал много на этом, но я путаюсь, что является точной причиной этого исключения.org.springframework.beans.factory.BeanCreationException: вложенное исключение - org.springframework.beans.factory.BeanCreationException

Решения, которые я нашел:

  1. Отсутствующие dependency- Я проверил все зависимости
  2. другое версию- Оно порождается самой Spring Framework, так что я думаю, его правильное
  3. базовый пакет сканирования - Я предоставил базовый пакет для сканирования.

Пожалуйста, помогите мне в этом.

  1. Может ли любое тело объяснить мне, почему мы получаем это исключение?
  2. Что не так с моим кодом, что я получаю это исключение?

Пожалуйста, помогите мне с этим. Я застрял с последних 3 дней.

StackTrace

13:15:41,769 INFO [STDOUT] ERROR: org.springframework.web.servlet.DispatcherServlet - Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'homeController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.varun.contact.dao.ContactDao com.varun.contact.controller.HomeController.contactDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.varun.contact.dao.ContactDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645) 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508) 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449) 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:212) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1048) 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:950) 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4122) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4421) 
    at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeployInternal(TomcatDeployment.java:310) 
    at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeploy(TomcatDeployment.java:142) 
    at org.jboss.web.deployers.AbstractWarDeployment.start(AbstractWarDeployment.java:461) 
    at org.jboss.web.deployers.WebModule.startModule(WebModule.java:118) 
    at org.jboss.web.deployers.WebModule.start(WebModule.java:97) 
    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.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157) 
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96) 
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:88) 
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) 
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668) 
    at org.jboss.system.microcontainer.ServiceProxy.invoke(ServiceProxy.java:206) 
    at com.sun.proxy.$Proxy39.start(Unknown Source) 
    at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:42) 
    at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:37) 
    at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62) 
    at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71) 
    at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51) 
    at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348) 
    at org.jboss.system.microcontainer.ServiceControllerContext.install(ServiceControllerContext.java:286) 
    at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631) 
    at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934) 
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082) 
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984) 
    at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822) 
    at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553) 
    at org.jboss.system.ServiceController.doChange(ServiceController.java:688) 
    at org.jboss.system.ServiceController.start(ServiceController.java:460) 
    at org.jboss.system.deployers.ServiceDeployer.start(ServiceDeployer.java:163) 
    at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:99) 
    at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:46) 
    at org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalDeploy(AbstractSimpleRealDeployer.java:62) 
    at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50) 
    at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171) 
    at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1439) 
    at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1157) 
    at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1178) 
    at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1098) 
    at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348) 
    at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631) 
    at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934) 
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082) 
    at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984) 
    at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822) 
    at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553) 
    at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:781) 
    at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:702) 
    at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117) 
    at org.jboss.system.server.profileservice.hotdeploy.HDScanner.scan(HDScanner.java:362) 
    at org.jboss.system.server.profileservice.hotdeploy.HDScanner.run(HDScanner.java:255) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) 
    at java.util.concurrent.FutureTask.runAndReset(Unknown Source) 
    at java.util.concurrent.ScheduledThreadPoolExecut 
13:15:41,770 INFO [STDOUT] or$ScheduledFutureTask.access$301(Unknown Source) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.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) 

pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.varun</groupId> 
    <artifactId>contact</artifactId> 
    <name>Contact</name> 
    <packaging>war</packaging> 
    <version>1.0.0-BUILD-SNAPSHOT</version> 
    <properties> 
     <java-version>1.6</java-version> 
     <org.springframework-version>3.1.1.RELEASE</org.springframework-version> 
     <org.aspectj-version>1.6.10</org.aspectj-version> 
     <org.slf4j-version>1.6.6</org.slf4j-version> 
    </properties> 
    <dependencies> 
     <!-- Spring --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${org.springframework-version}</version> 
      <exclusions> 
       <!-- Exclude Commons Logging in favor of SLF4j --> 
       <exclusion> 
        <groupId>commons-logging</groupId> 
        <artifactId>commons-logging</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${org.springframework-version}</version> 
     </dependency> 

     <!-- jdbc template --> 
      <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
      <version>${org.springframework-version}</version> 
     </dependency> 


     <!-- AspectJ --> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjrt</artifactId> 
      <version>${org.aspectj-version}</version> 
     </dependency> 
     <!-- Logging --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>${org.slf4j-version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jcl-over-slf4j</artifactId> 
      <version>${org.slf4j-version}</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>${org.slf4j-version}</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.15</version> 
      <exclusions> 
       <exclusion> 
        <groupId>javax.mail</groupId> 
        <artifactId>mail</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>javax.jms</groupId> 
        <artifactId>jms</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>com.sun.jdmk</groupId> 
        <artifactId>jmxtools</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>com.sun.jmx</groupId> 
        <artifactId>jmxri</artifactId> 
       </exclusion> 
      </exclusions> 
      <scope>runtime</scope> 
     </dependency> 

     <!-- @Inject --> 
     <dependency> 
      <groupId>javax.inject</groupId> 
      <artifactId>javax.inject</artifactId> 
      <version>1</version> 
     </dependency> 

     <!-- Servlet --> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>2.5</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>jsp-api</artifactId> 
      <version>2.1</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 

     <!-- Test --> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.7</version> 
      <scope>test</scope> 
     </dependency>   
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-eclipse-plugin</artifactId> 
       <version>2.9</version> 
       <configuration> 
        <additionalProjectnatures> 
         <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> 
        </additionalProjectnatures> 
        <additionalBuildcommands> 
         <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand> 
        </additionalBuildcommands> 
        <downloadSources>true</downloadSources> 
        <downloadJavadocs>true</downloadJavadocs> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.5.1</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
        <compilerArgument>-Xlint:all</compilerArgument> 
        <showWarnings>true</showWarnings> 
        <showDeprecation>true</showDeprecation> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>exec-maven-plugin</artifactId> 
       <version>1.2.1</version> 
       <configuration> 
        <mainClass>org.test.int1.Main</mainClass> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Contact.java

public class Contact { 
    private int id; 
    private String name; 
    private String email; 
    private String address; 
    private String telephone; 

    // Default Constructor........ 
    public Contact() 
    { 
    } 
    // Parameterized Constructor 
    public Contact(String name, String email, String address, 
      String telephone) { 
     this.name = name; 
     this.email = email; 
     this.address = address; 
     this.telephone = telephone; 
    } 
    //Getters and setters I have just removed here to save the space. 

ContactDAOИнтерфейс

package com.varun.contact.dao; 
import java.util.List; 
import com.varun.contact.model.Contact; 

public interface ContactDao { 
    public void saveOrUpdate(Contact contact); 
    public void delete(int contactId); 
    public Contact get(int contactId); 
    public List<Contact> list(); 

} 

ContactDAOImpl

package com.varun.contact.dao; 

import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.List; 

import javax.sql.DataSource; 

import com.varun.contact.model.Contact; 


import org.springframework.dao.DataAccessException; 
//import com.varun.contact.dao.DataAccessException; 
import org.springframework.jdbc.core.JdbcTemplate; 
import org.springframework.jdbc.core.ResultSetExtractor; 
import org.springframework.jdbc.core.RowMapper; 

public class ContactDAOImpl implements ContactDao { 

    private JdbcTemplate jdbcTemplate; 

    public ContactDAOImpl(javax.activation.DataSource dataSource) { 
      jdbcTemplate = new JdbcTemplate((DataSource) dataSource); 
     } 


    //Insert or update a new contact: 
    @Override 
    public void saveOrUpdate(Contact contact) { 
     if(contact.getId()>0){ 
      //Update 
      String sql="UPDATE CONTACT SET name=?,email=?,address=?," 
      +"telephone=? where contact_id=?"; 
      jdbcTemplate.update(sql,contact.getName(),contact.getEmail(),contact.getAddress(), 
        contact.getTelephone(),contact.getId()); 
     } 
     else{ 
      // Insert 
      String sql="INSERT INTO CONTACT(name,email,address,telephone)" 
        +"VALUES(?,?,?,?)"; 
      jdbcTemplate.update(sql,contact.getName(),contact.getEmail(),contact.getAddress(), 
        contact.getTelephone()); 
     } 

    } 
    //Delete a contact: 
    @Override 
    public void delete(int contactId) { 
    String sql="DELETE FROM CONTACT where contact_id=?"; 
    jdbcTemplate.update(sql,contactId);   
    } 

    //Get a particular contact: 
    @Override 
    public Contact get(int contactId) { 

     String sql="SELECT * FROM CONTACT WHERE contact_id="+contactId; 
     return jdbcTemplate.query(sql, new ResultSetExtractor<Contact>() { 

       @Override 
       public Contact extractData(ResultSet rs) throws SQLException, 
         DataAccessException { 
        if (rs.next()) { 
         Contact contact = new Contact(); 
         contact.setId(rs.getInt("contact_id")); 
         contact.setName(rs.getString("name")); 
         contact.setEmail(rs.getString("email")); 
         contact.setAddress(rs.getString("address")); 
         contact.setTelephone(rs.getString("telephone")); 
         return contact; 
        } 
        return null; 
       } 

      }); 
    } 

    //List all contact: 
    @Override 
    public List<Contact> list() { 
     String sql = "SELECT * FROM contact"; 
     List<Contact> listContact = jdbcTemplate.query(sql, new RowMapper<Contact>() { 

      @Override 
      public Contact mapRow(ResultSet rs, int rowNum) throws SQLException { 
       Contact aContact = new Contact(); 

       aContact.setId(rs.getInt("contact_id")); 
       aContact.setName(rs.getString("name")); 
       aContact.setEmail(rs.getString("email")); 
       aContact.setAddress(rs.getString("address")); 
       aContact.setTelephone(rs.getString("telephone")); 
       return aContact; 
      } 

     }); 
     return listContact; 
    } 
} 

MvcConfiguration

package com.varun.contact.config; 

//I have removed all import to save space 

@Configuration 
@ComponentScan(basePackages="com.varun.contact") 
@EnableWebMvc 

public class MvcConfiguration extends WebMvcConfigurerAdapter { 

    @Bean 
    public ViewResolver getViewResolver(){ 
     InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
     resolver.setPrefix("/WEB-INF/views"); 
     resolver.setSuffix(".jsp"); 
     return resolver;   
    } 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
    } 

    @Bean 
     public DataSource getDataSource() { 
      DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
      dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver"); 
      dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:orcl"); 
      dataSource.setUsername("system"); 
      dataSource.setPassword("admin"); 

      return (DataSource) dataSource; 
     } 

    @Bean 
     public ContactDao getContactDao() { 
      return new ContactDAOImpl(getDataSource()); 
     } 
} 

HomeController

package com.varun.contact.controller; 

    // I have removed all import 
@Controller 
public class HomeController { 

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class); 


    @Autowired 
    private ContactDao contactDao; 


    //Handler method for listing all contacts (also served as home page): 
    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public ModelAndView listContact(ModelAndView model) throws IOException{ 
     java.util.List<Contact> listContact = contactDao.list(); 
     model.addObject("listContact", listContact); 
     model.setViewName("home"); 

     return model; 
} 
    //Handler method for displaying new contact form: 
    @RequestMapping(value = "/newContact", method = RequestMethod.GET) 
    public ModelAndView newContact(ModelAndView model) { 
     Contact newContact = new Contact(); 
     model.addObject("contact", newContact); 
     model.setViewName("ContactForm"); 
     return model; 
    } 

    //Handler method for inserting/updating a contact: 
    @RequestMapping(value = "/saveContact", method = RequestMethod.POST) 
    public ModelAndView saveContact(@ModelAttribute Contact contact) 
    { 
    contactDao.saveOrUpdate(contact); 
    return new ModelAndView("redirect:/"); 
    } 

    //Handler method for retrieving details of a particular contact for editing: 
    @RequestMapping(value = "/editContact", method = RequestMethod.GET) 
    public ModelAndView editContact(HttpServletRequest request) { 
     int contactId = Integer.parseInt(request.getParameter("id")); 
     Contact contact = contactDao.get(contactId); 
     ModelAndView model = new ModelAndView("ContactForm"); 
     model.addObject("contact", contact); 

     return model; 
    } 

} 
+2

Попробуйте добавить '@ Component' в свой класс' ContactDAOImpl' (или '@ Repository'). – sp00m

+0

Не работает. У меня такая же ошибка. – Varun

+0

Ошибка говорит о том, что ни один из контекстов приложения (ни корневой, ни MVC) не содержит компонента для 'ContactDAOImpl'. Вы должны использовать более высокий уровень журнала, чтобы точно знать, какие бобы создаются в том, что ApplicationContest –

ответ

0

Try:

@Repository("ContactDao") 
    public class ContactDAOImpl implements ContactDao 
    .... 

Я не думаю, что декларация боб необходима в данном случае.

+0

По-прежнему я получаю ту же ошибку после использования @Repository («ContactDao») – Varun

+0

Да, я думаю, в этом случае («ContactDao») не помогает , но я видел, что делать только @Respository делает трюк. –

0

Либо сделать, как показано ниже:

@Repository 
public class ContactDAOImpl implements ContactDao { 

или, как показано ниже:

@Component 
public class ContactDAOImpl implements ContactDao { 
+0

Этот репозиторий public class ContactDAOImpl реализует ContactDao {-работал ошибка исчезла, но приложение не работает, вы можете мне помочь мне это – Varun

+0

Что такое ошибка? – Nimesh

+0

Извините, повторите ту же ошибку – Varun

0

Вы уверены, что ваш ContactDaoImpl становится созданный весной? Поскольку я считаю, что если в конструкторе есть ошибка/исключение (например, при создании источника данных), компонент не будет создан правильно. Вы пробовали положить /catch в конструктор, чтобы проверить, действительно ли он вызван?