spring mvc+spring+mybatis自动注入

To_Young 2016-12-29 09:12:52
这是我的UsertblContorolle

package com.cn.ykp.controller;


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

import com.cn.ykp.bean.Usertbl;
import com.cn.ykp.service.UserService;
@Controller
public class UsertblContoroller {
@Autowired
private UserService userService;
@RequestMapping(value="/login.do", method = RequestMethod.POST)
public String Login(String username,String password){
Usertbl user = userService.Select(username);
if(password.equals(user.getPassword())){
return "index";
}
return "";
}
}

这是我的dao

package com.cn.ykp.dao;

import org.springframework.stereotype.Repository;

import com.cn.ykp.bean.Usertbl;

@Repository
public interface UsertblMapper {
int deleteByPrimaryKey(Integer id);

int insert(Usertbl record);

int insertSelective(Usertbl record);

Usertbl selectByPrimaryKey(String name);

int updateByPrimaryKeySelective(Usertbl record);

int updateByPrimaryKey(Usertbl record);
}

这是我的service

package com.cn.ykp.service;

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

import com.cn.ykp.bean.Usertbl;
import com.cn.ykp.dao.UsertblMapper;

@Service
public class UserService {
@Autowired
private UsertblMapper usertblMapper;

public Usertbl Select(String name){
return usertblMapper.selectByPrimaryKey(name);
}
}



这是我的spring-mybatis.xml



<!-- 引入属性文件 -->
<context:property-placeholder location="classpath:jdbc.properties" />
<!-- 自动扫描(自动注入) -->
<context:component-scan base-package="com.cn.ykp.*" />
<!-- 配置数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="${db.driver}" />
<property name="jdbcUrl" value="${db.url}" />
<property name="user" value="${db.username}" />
<property name="password" value="${db.password}" />
<property name="minPoolSize" value="1" />
<property name="maxPoolSize" value="20" />
<property name="maxIdleTime" value="1800" />
<property name="acquireIncrement" value="2" />
<property name="maxStatements" value="0" />
<property name="initialPoolSize" value="2" />
<property name="idleConnectionTestPeriod" value="1800" />
<property name="acquireRetryAttempts" value="30" />
<property name="breakAfterAcquireFailure" value="true" />
<property name="testConnectionOnCheckout" value="false" />
</bean>
<!-- 创建工厂 并自动寻找 Mapperxml-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- <property name="configLocation" value="classpath:mybatis-config.xml"></property> -->
<property name="mapperLocations" value="classpath:com/cn/ykp/dao/xml/*.xml" />
</bean>
<!-- 自动查找类路径下的映射器并自动将它们创建成MapperFactoryBean。不用一个一个创建了 -->
<bean id="MapperFactoryBean" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.cn.ykp.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>

<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

<!-- 配置事物的注解方式注入 -->
<tx:annotation-driven transaction-manager="transactionManager" />

</beans>


这是我的spring-mvc.xml




<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
<bean class="org.springframework.http.converter.FormHttpMessageConverter" />
<bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" />
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
</mvc:message-converters>
</mvc:annotation-driven>
<context:component-scan base-package="com.cn.ykp.controller" />
<context:component-scan base-package="com.cn.ykp">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan>
<aop:aspectj-autoproxy proxy-target-class="true">
<aop:include name="controllerAspect"/>
</aop:aspectj-autoproxy>


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

<!-- 设置返回数据类型是json格式 -->
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter" />
</list>
</property>
</bean>
<!-- 带参数必须添加这个 -->
<mvc:annotation-driven/>


这是报的错误

2016-12-29 21:01:22,308 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] ERROR [org.springframework.web.servlet.DispatcherServlet] - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'usertblContoroller': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.cn.ykp.service.UserService com.cn.ykp.controller.UsertblContoroller.userService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.cn.ykp.service.UserService] 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.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
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.createWebApplicationContext(FrameworkServlet.java:442)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:458)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127)
at javax.servlet.GenericServlet.init(GenericServlet.java:158)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1282)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1195)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1085)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5349)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5641)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:4119)
at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:425)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1341)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1542)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1552)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1552)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1520)
at java.lang.Thread.run(Unknown Source)

...全文
187 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
To_Young 2016-12-31
  • 打赏
  • 举报
回复
已经解决了,web.xml,要设置监听器
  • 打赏
  • 举报
回复
GrayHJX 2016-12-30
  • 打赏
  • 举报
回复
看报错信息是service没被扫描到 你试试加上这句 <context:component-scan base-package="com.cn.ykp.*.service" />
双子叶 2016-12-30
  • 打赏
  • 举报
回复
引用 1 楼 shzy1988 的回复:
报错原因是你写的service和dao注解没有被扫描解析。 1.你将spring-mvc.xml里面的 <context:component-scan base-package="com.cn.ykp.controller" /> <context:component-scan base-package="com.cn.ykp"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" /> </context:component-scan> 修改为 <context:component-scan base-package="com.cn.ykp"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> 2.没有看到你的web.xml的配置,应该还有一个applicationContext.xml(或者其他名)的spring配置文件 你在这个文件里面配置 <context:component-scan base-package="com.tgb"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> 你修改一下试试,应该ok的
上文有个错误,base-package="com.tgb"应该修改为你的包路径,这个我copy我的。你注意一下。
双子叶 2016-12-30
  • 打赏
  • 举报
回复
报错原因是你写的service和dao注解没有被扫描解析。 1.你将spring-mvc.xml里面的 <context:component-scan base-package="com.cn.ykp.controller" /> <context:component-scan base-package="com.cn.ykp"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" /> </context:component-scan> 修改为 <context:component-scan base-package="com.cn.ykp"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> 2.没有看到你的web.xml的配置,应该还有一个applicationContext.xml(或者其他名)的spring配置文件 你在这个文件里面配置 <context:component-scan base-package="com.tgb"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> 你修改一下试试,应该ok的

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧