#spring #maven #mybatis #autowired
Вопрос:
Я новичок в Spring и пытаюсь создать приложение для обучения, но у меня возникают проблемы с автопроводкой, я добавляю свой код и сообщение об ошибке HTTP 500. Я работаю над maven Spring с IntelliJ.
Пожалуйста, помогите мне….
root-context.xml
lt;?xml version="1.0" encoding="UTF-8"?gt; lt;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.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"gt; lt;context:property-placeholder location="classpath:application.properties" /gt; lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"gt; lt;property name="driverClassName" value="${spring.database.class}" /gt; lt;property name="url" value="${spring.database.host}" /gt; lt;property name="username" value="${spring.database.username}" /gt; lt;property name="password" value="${spring.database.password}" /gt; lt;/beangt; lt;bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"gt; lt;property name="dataSource" ref="dataSource" /gt; lt;/beangt; lt;bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"gt; lt;constructor-arg index="0" ref="sqlSessionFactory" /gt; lt;/beangt; lt;/beansgt;
InsuranceController.java
package com.insurance.controller; import com.insurance.mybatis.dao.InsuranceDAO; import com.insurance.mybatis.dto.InsuranceDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import javax.inject.Inject; import java.util.List; @Controller public class InsuranceController { @Autowired InsuranceDAO insuranceDAO; @RequestMapping(value="/insurance") public String test( ModelMap modelMap ){ modelMap.addAttribute( "text", "안녕하세요" ); return "mybatis/insurance"; } @RequestMapping(value="/insuranceList") public String insuranceList( Model model ){ Listlt;InsuranceDTOgt; list = insuranceDAO.list(); model.addAttribute("list", list); model.addAttribute( "text", "안녕하세요" ); return "mybatis/insuranceList"; } }
Страховая компания
package com.insurance.mybatis.dao; import com.insurance.mybatis.dto.InsuranceDTO; import org.springframework.stereotype.Service; import java.util.List; @Service public interface InsuranceDAO { public Listlt;InsuranceDTOgt; list(); }
InsuranceDAOImpl
package com.insurance.mybatis.dao; import com.insurance.mybatis.dto.InsuranceDTO; import org.apache.ibatis.session.SqlSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import org.springframework.stereotype.Service; import javax.inject.Inject; import java.util.List; //@Repository @Service public class InsuranceDAOImpl implements InsuranceDAO{ @Autowired SqlSession sqlSession; @Override public Listlt;InsuranceDTOgt; list() { return sqlSession.selectList( "insurance.list" ); } }
InsuranceDTO
package com.insurance.mybatis.dto; public class InsuranceDTO { private int insuranceID, insuranceCost; private String insuranceName, content, type; public int getInsuranceID() { return insuranceID; } public void setInsuranceID(int insuranceID) { this.insuranceID = insuranceID; } public int getInsuranceCost() { return insuranceCost; } public void setInsuranceCost(int insuranceCost) { this.insuranceCost = insuranceCost; } public String getInsuranceName() { return insuranceName; } public void setInsuranceName(String insuranceName) { this.insuranceName = insuranceName; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getType() { return type; } public void setType(String type) { this.type = type; } }
сообщение об ошибке введите описание изображения здесь
Ниже приведена основная причина ошибки
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'insuranceController': Unsatisfied dependency expressed through field 'insuranceDAO'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.insurance.mybatis.dao.InsuranceDAO' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130) org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226) org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:895) org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:702) org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:668) org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:716) org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:591) org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:530) org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:170) javax.servlet.GenericServlet.init(GenericServlet.java:158) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:698) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:364) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:624) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:831) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1650) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.base/java.lang.Thread.run(Thread.java:832)
Комментарии:
1. Не могли бы вы, пожалуйста, добавить свой основной класс к вашему вопросу? Спасибо!
2. Скорее всего, посылка
com.insurance.mybatis.dao
не сканируется.3. Я добавляю Структуру папок проекта.
4. Я не знаю, что такое основной класс….
5. Вы используете Пружинный ботинок? Если это так, у вас должен быть класс с аннотациями
@SpringBootApplication
. А ты?