前言
我们之前整合的ssm框架都是通过xml 配置bean,在接触并且使用了spingboot的自动配置,自动注入之后。感觉开阔了新天地,从这点也可以对比出,为什么说springboot 并不是为了替代 spring 而是在已有的基础上,优化了ssm的繁琐配置。可以做到零配置就可以启动一个项目,本篇文章常识让xml配置bean 改成 想springboot 一样自动扫包。
- 业务
- 代码示例
- Java代码
- controller
- service
- pojo
- dao
- JSP
- pom 依赖
- xml文件整合
- applictionContext 总配置文件
- dao
- controller
- service
- 整合注意事项
- pom xml过滤设置
- 容器注入失败
- 效果
- 源码分享
通过jsp页面插入一条用户信息,业务随机简单。醉翁之意不在此!
分层
package com.kuang.controller;
import com.kuang.pojo.UserInfoPojo;
import com.kuang.service.UserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
/**
* @Description 用户信息
* @ClassName UserInfoController
* @Author 康世行
* @Date 15:42 2022/4/20
* @Version 1.0
**/
@Controller
@RequestMapping("/userInfo")
public class UserInfoController {
@Autowired
private UserInfoService userInfoService;
@PostMapping("/addUserInfo")
public Object addUserInfo( UserInfoPojo userInfoPojo){
int i = userInfoService.addUserInfo(userInfoPojo);
return "addUserInfo";
}
// 跳转到增加书籍页面
@RequestMapping("/toAddUserInfo")
public String pageJumps(){
return "addUserInfo";
}
}
service
接口
package com.kuang.service;
import com.kuang.pojo.UserInfoPojo;
/**
* @Description 用户信息接口
* @ClassName UserInfoService
* @Author 康世行
* @Date 15:40 2022/4/20
* @Version 1.0
**/
public interface UserInfoService {
/*
* @author 康世行
* @description: 添加用户信息
* @date 2022/4/20 15:41
* @param userInfoPojo
* @return int
* @Version1.0
**/
int addUserInfo(UserInfoPojo userInfoPojo);
}
实现类
package com.kuang.service;
import com.kuang.dao.UserInfoMapper;
import com.kuang.pojo.UserInfoPojo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @Description 用户信息
* @ClassName UserInfoImpl
* @Author 康世行
* @Date 15:41 2022/4/20
* @Version 1.0
**/
@Service
public class UserInfoImpl implements UserInfoService{
@Autowired
private UserInfoMapper userInfoMapper;
//使用xml配bean 需要解开此注释
// public void setUserInfoMapper(UserInfoMapper userInfoMapper) {
// this.userInfoMapper = userInfoMapper;
// }
@Override
public int addUserInfo(UserInfoPojo userInfoPojo) {
return userInfoMapper.addUserInfo(userInfoPojo);
}
}
pojo
package com.kuang.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Description 用户信息
* @ClassName UserInfoPojo
* @Author 康世行
* @Date 15:34 2022/4/20
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserInfoPojo {
private String userName;
private String userPwd;
private int age;
private String sex;
}
dao
package com.kuang.dao;
import com.kuang.pojo.UserInfoPojo;
/**
* @Description 用户信息dao
* @ClassName UserInfoMapper
* @Author 康世行
* @Date 15:36 2022/4/20
* @Version 1.0
**/
public interface UserInfoMapper {
int addUserInfo(UserInfoPojo userInfoPojo);
}
xml dao实现
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kuang.dao.UserInfoMapper">
<insert id="addUserInfo">
insert into user_info values (#{userName},#{userPwd},#{age},#{sex})
insert>
mapper>
JSP
<%--
Created by IntelliJ IDEA.
User: 康世行
Date: 2022/4/20
Time: 16:01
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>添加用户信息title>
<%-- 引入bootstarp--%>
<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
head>
<body>
<div class="container">
<div class="row clearfix">
<div class="col-md-12 column">
<div class="page-header">
<h1>
<small>新增用户信息small>
h1>
div>
div>
div>
<form action="${pageContext.request.contextPath}/userInfo/addUserInfo" method="post">
<div class="form-group">
<label for="userName">用户名label>
<input type="text" class="form-control" id="userName" name="userName" required>
div>
<div class="form-group">
<label for="userPwd">用户密码label>
<input type="text" class="form-control" id="userPwd" name="userPwd" required>
div>
<div class="form-group">
<label for="age">年龄label>
<input type="text" class="form-control" id="age" name="age" required>
div>
<div class="form-group">
<label for="sex">性别label>
<input type="text" class="form-control" id="sex" name="sex" required>
div>
<div class="form-group">
<input type="submit" class="form-control" value="添加">
div>
form>
div>
body>
html>
pom 依赖
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.17version>
dependency>
<dependency>
<groupId>com.mchangegroupId>
<artifactId>c3p0artifactId>
<version>0.9.5.2version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>servlet-apiartifactId>
<version>2.5version>
dependency>
<dependency>
<groupId>javax.servlet.jspgroupId>
<artifactId>jsp-apiartifactId>
<version>2.2version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>jstlartifactId>
<version>1.2version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.2version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatis-springartifactId>
<version>1.3.2version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.3.6version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>5.3.6version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.12version>
dependency>
xml文件整合
applictionContext 总配置文件
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="spring-dao.xml"/>
<import resource="spring-service.xml"/>
<import resource="spring-mvc.xml"/>
beans>
dao
database.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
jdbc.username=root
jdbc.password=123456
mybatis-config
DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package name="com.kuang.pojo"/>
typeAliases>
<mappers>
mappers>
configuration>
spring-dao
<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">
<context:property-placeholder location="classpath:database.properties"/>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="password" value="${jdbc.password}"/>
<property name="user" value="${jdbc.username}"/>
<property name="maxPoolSize" value="30"/>
<property name="minPoolSize" value="10"/>
<property name="autoCommitOnClose" value="false"/>
<property name="checkoutTimeout" value="10000"/>
<property name="acquireRetryAttempts" value="2"/>
bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<property name="basePackage" value="com.kuang.dao"/>
bean>
beans>
controller
spring-mvc
<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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="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
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<mvc:annotation-driven />
<mvc:default-servlet-handler/>
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
bean>
<context:component-scan base-package="com.kuang.controller" />
beans>
service
spring-service
<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">
<context:component-scan base-package="com.kuang.service"/>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
bean>
beans>
整合注意事项
pom xml过滤设置
<build>
<resources>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/*.propertiesinclude>
<include>**/*.xmlinclude>
includes>
<filtering>falsefiltering>
resource>
<resource>
<directory>src/main/resourcesdirectory>
<includes>
<include>**/*.propertiesinclude>
<include>**/*.xmlinclude>
includes>
<filtering>falsefiltering>
resource>
resources>
build>
容器注入失败
当出现上面这个错误的时候,说明你要依赖的对象,没有被注入到容器中。可以理解为没有在IOC容器中找到要依赖的对象。
这个时候不要慌,请看蓝色字部分,安住Ctrl(仅限windows 用户,苹果用户自行搜索快捷键) 点击进去就可以找到错误的原因了如下:
可以看到使用autowired 自动注入bean 的userInfoService 字段上 报红线,在idea 里报红线一般是err和warning。在结合上面的报错提示可以看到,我们要依赖的 userInfoService 对象创建失败,没有注入到IOC容器就导致了controller 对象依赖它的时候报错。
解决方案
由于service 层使用的是自动扫包所以,在接口的实现类上需要加上 @Service 这个注解才可以把对应的实现类注入到IOC容器
不加注解
加注解
从图中可以看出来~ 只是类上多了个Service 注解,通过service 注解就可以把实现类对象注入到容器中。
首页
添加用户信息
添加成功!
项目源码分享
**感谢阅读~ 都已经看到这了,不妨给个一键三连
**
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)