一篇文章学会ssm-配置文件整合-原来ssm也可以像springBoot 一样自动扫包(对ssm的误解)

一篇文章学会ssm-配置文件整合-原来ssm也可以像springBoot 一样自动扫包(对ssm的误解),第1张

前言

我们之前整合的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页面插入一条用户信息,业务随机简单。醉翁之意不在此!
分层

代码示例 Java代码 controller
 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 注解就可以把实现类对象注入到容器中。

效果

首页

添加用户信息

添加成功!

源码分享

项目源码分享

**感谢阅读~ 都已经看到这了,不妨给个一键三连
**

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/794825.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存