• ssm环境搭建(这是一个非常干净的smm基础环境),和Spring底层相关回顾


    前言:

    环境基础:tomcat9,maven3.6.1,mysql8.x,idea2020.3,

    一,搭建ssm环境(配置)

    1.依赖包

        <!--依赖:junit,数据库驱动,连接池,servlet,jsp,mybatis,mybatis-spring,spring -->
        <dependencies>
            <!--单元测-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
            </dependency>
            <!--mysql驱动-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.15</version>
            </dependency>
            <!--连接池,c3p0-->
            <dependency>
                <groupId>com.mchange</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.5.2</version>
            </dependency>
            <!--Servlet Jsp -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>2.5</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
                <version>2.2</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
            <!--mybatis-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.2</version>
            </dependency>
            <!--spring整合mybatis-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>2.0.5</version>
            </dependency>
            <!--Spring-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>5.1.9.RELEASE</version>
            </dependency>
            <!--Spring操作数据库,spring的事务,需要此包-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.1.9.RELEASE</version>
            </dependency>
            <!--AOP织入,事务-->
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.9.5</version>
            </dependency>
            <!--lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.10</version>
            </dependency>
    
        </dependencies>

    2.编写数据库连接驱动信息静态文件(db.properties)‘

    作用:连接数据库的基本信息

    jdbc.driver=com.mysql.cj.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
    jdbc.username=root
    jdbc.password=123456

    3.mybatis核心配置文件(mybatis-config)

    作用:配置mapper的基本环境,注册mapper,(连接数据库交给spring容器去做)

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    
        <!--配置数据源交给Spring容器去做-->
    
    
        <settings>
            <setting name="logImpl" value="STDOUT_LOGGING" />
        </settings>
        <!--配置别名-->
        <typeAliases>
            <package name="com.king.pojo"/>
        </typeAliases>
    
        <!--注册mapper-->
        <mappers>
            <mapper class="com.king.dao.BookMapper"/>
        </mappers>
    
    
    </configuration>

    4.spring整合dao层

    作用:

      1.关联数据库配置文件:db.properties

      2.配置连接池:这里用的是C3p0的连接池

      3.创建sqlSessionFactory:

        3.1,连接c3p0数据源

        3.2,绑定mybatis核心配置文件

      4.最后配置dao的接口扫描包

    <?xml version="1.0" encoding="UTF-8"?>
    <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
            https://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd">
    
        <!--1.关联数据库配置文件-->
        <context:property-placeholder location="classpath:db.properties"/>
        <!--2.连接池
            dbcp:半自动化操作,不能自动连接
            c3p0:自动化操作(自动化的加载配置文件,并且自动设置到对象当中!)
            druid:
            hikari:
        -->
    
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <!--配置连接池属性-->
            <property name="driverClass" value="${jdbc.driver}"/>
            <property name="jdbcUrl" value="${jdbc.url}"/>
            <property name="user" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
    
            <!--c3p0连接池的私有属性-->
            <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>
    
        <!--3.sqlSessionFactory-->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!--连接c3p0数据源-->
            <property name="dataSource" ref="dataSource"/>
            <!--绑定mybatis配置文件-->
            <property name="configLocation" value="classpath:mybatis-config.xml"/>
        </bean>
    
        <!--4.配置dao接口扫描包,动态的实现了Dao接口可以注入到Spring容器中-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!--注入sqlSessionFactory-->
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
            <!--要扫描的dao包-->
            <property name="basePackage" value="com.king.dao"/>
        </bean>
    
    </beans>

    5.Spring整合service

    作用:

      1.利用context扫描service层下的包

      2.将所有业务接口实现类全部注入spring容器中

        2.1,解释:利用ioc的思想,DI方法(set方法注入)去实现,动态的创建对象

        2.2,什么叫动态创建对象:当用户想用是,再去创建(ioc思想)

        2.3,因为是DI方法注入,所以要在每个接口实现类(xxx.Impl)上写set方法,否则报错

      3.声明式事务配置

        3.1,什么是声明式事务:声明顾名思义就是在spring容器xml配置文件中去声明代码的行为,好处就是不必去修改代码本身的逻辑结构

      4.配置AOP事务支持

        AOP:面向切面编程(ioc的思想,在spring中利用DI的方法实现的),

        设计模式:代理模式(动态代理模式),JDK动态代理和CGLIb动态代理

        面试高频:spring的AOP是用的那种动态代理模式实现的?JDK or CGlib,两者有什么区别?

        解释:spring默认先去找(目标)类是否实现了接口,如果没有再去用CGlib。先JDK后CGlib(可以强制使用其中某一个,仅需去spring配置相关内容)

        区别:JDK是基于接口实现的动态代理模式,就是说你的动态代理实现是被所对应的代理接口约束的(接口有什么方法,你才能实现什么方法,实现类不能自己新建方法)

           CGlib是基于继承实现的,就是说具有继承的特性(子承父业)同时自己也可以新建方法

           

    <?xml version="1.0" encoding="UTF-8"?>
    <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
            https://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd">
    
        <!--1.扫描service下的包(有了此扫描,注解才能生效)-->
        <context:component-scan base-package="com.king.service"/>
    
        <!--2.将所有业务类,注入到spring,可以通过配置,或者注解实现-->
        <bean id="BookServiceImpl"  class="com.king.service.BookServiceImpl">
            <property name="bookMapper" ref="bookMapper"/>
        </bean>
    
        <!--3.声明式事务配置-->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <!--注入数据源-->
            <property name="dataSource" ref="dataSource"/>
        </bean>
    
        <!--4.AOP事务支持,用到的话可以加-->
    
    </beans>

    6.Spring整合mvc

      1.配置mvc注解驱动<mvc:annotation-driven/>

        解释:可以自动注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,这两个都是来自于dispatcherServlet中(用户请求分发器)的

           DefaultAnnotationHandlerMapping:作用在类上,处理请求映射的,相应的用户请求传递给相应的Controller类中

           AnnotationMethodHandlerAdapter:作用在方法上,功能与上相似、

      2.静态资源过滤

        作用:防止代码页面与静态页面矛盾

      3.配置扫描包范围

      4.视图解析器

        作用:给所用跳转页面加前缀和后缀

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/mvc
            https://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd">
    
        <!--1.mvc注解驱动,让mvc相关注解生效-->
        <!--整合了HandlerMapping和HandlerAdapter。全自动的dispatcherservlet-->
        <mvc:annotation-driven/>
        <!--2.静态资源过滤-->
        <mvc:default-servlet-handler/>
        <!--3.扫描包:controller-->
        <context:component-scan base-package="com.king.controller"/>
        <!--4.视图解析器-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
    </beans>

    7.配置总文件

      将各层的spring容器注入一个总容器中,简化配置文件结构,增强可读性

    <?xml version="1.0" encoding="UTF-8"?>
    <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
            https://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <import resource="classpath:spring-dao.xml"/>
        <import resource="classpath:spring-service.xml"/>
        <import resource="classpath:spring-mvc.xml"/>
    
    </beans>
  • 相关阅读:
    【JVM源码解析】模板解释器解释执行Java字节码指令(下)
    【JVM源码解析】模板解释器解释执行Java字节码指令(上)
    【超硬核】JVM源码解读:Java方法main在虚拟机上解释执行
    Airtest结合tidevice实现IOS自动化测试
    Xcode连接真机提示设备未认证或版本太旧解决方案
    Jmeter——SMTP Sampler发送邮件
    Jmeter——脱离Jenkins后,Ant集成邮件通知
    spring boot快速入门
    MyBatisPlus 快速入门
    VS 查看引用的DLL/Nuget包源码时,无法看到注释
  • 原文地址:https://www.cnblogs.com/CL-King/p/13974697.html
Copyright © 2020-2023  润新知