• SSM框架学习day01_简介、入门、配置文件


    一、Spring简介

    1.1 Spring是什么

    Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IoC(Inverse Of Control:控制反转)和AOP(Aspect Oriented Programming:面向切面编程)为内核。

    1.2 Spring发展历程

    可以认为EJB是Spring的前身,Rod Johnson(Spring之父)

    1.3 Spring的优势

    1. 方便解耦,简化开发
      通过Spring提供的IoC容器,可以将对象间的依赖关系交由Spring控制,避免硬编码导致过度耦合。用户不用为单例模式类、属性文件解析等很低层的需求编写代码,可以更专注与上层的应用。
    2. AOP编程的支持
      通过AOP功能,方便进行面向切面编程。
    3. 声明式事务的支持
      可以通过声明式方式灵活进行事务管理,提高开发效率和质量。
    4. 方便程序测试
      junit
    5. 方便集成优秀框架
      Spring对各种优秀框架的支持
    6. 降低JavaEE API的使用难度
      对JavaEE API(JDBC、远程调用等)进行了薄薄的封装层,使这些API的使用难度降低
    7. Java源码是经典学习范例
      精妙的源码

    1.4 Spring的体系结构

    Test代表所有部分都可以放进Test里测试
    从下往上,层层递进

    二、Spring快速入门

    2.1 Spring程序开发步骤

    本来需要用户创建新的实例对象, 现在对象由Spring框架构建。

    步骤:

    1. 首先导入Spring开发的基本包坐标,就是jar包
    2. 编写DAO接口和实现类
    3. 创建xml文件(Spring核心配置文件)
    4. 在Spring配置文件中配置UserDaolmpl
    5. 通过Spring的API获得Bean实例
    • 导入坐标
      pom.xml文件中配置spring
    <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.2.3.RELEASE</version>
            </dependency>
        </dependencies>
    
    • 创建Bean
      • 新建UserDAO接口,有一个save()方法
      • 新建impl文件夹,新建类UserDaoimpl实现接口,save方法:
        System.out.println("save running...");
    • 在resources中创建applicationContext.xml
    • 在配置文件中进行配置
      <bean id="userDao" class="com.hf.dao.impl.UserDaoimpl"></bean>
    • 创建ApplicationContext对象getBean,新建UserDaoDemo文件
        public class UserDaoDemo {
            public static void main(String[] args) {
            ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
            UserDAO userDao = (UserDAO) app.getBean("userDao");
            userDao.save();
        }
    }    
    

    运行结果:
    save running...

    注:若在resources中创建applicationContext.xml时没有Spring config选项,则需要右键项目,Add Frameworl support,选中SpringMVC并点击OK。

    三、Spring配置文件

    3.1 Bean标签的基本配置

    用于配置对象交由Spring来构建。
    默认情况下调用的是类中的无参构造,如果没有无参构造则不能创建成功。

    基本属性:
    + id:Bean实例在Spring容器中的唯一标识
    + class:Bean的全限定名称

    3.2 Bean标签范围配置

    scope:指对象的作用范围,取值:

    取值范围 说明
    singleton 默认值,单例的
    prototype 多例的
    request WEB项目中,Spring创建一个Bean的对象,将对象存入request域中
    session WEB项目中,Spring创建一个Bean的对象,将对象存入session域中
    global session WB项目中,应用在Portlet环境,如果没有,则global session相当于session

    其中singleton就是单一的,prototype是原型的意思,也就是如果配置成prototype,在容器中拿对象的话,每次拿都是一个新的对象。
    引入junit,在test文件夹下创建SpringTest.java

    public class SpringTest {
        @Test
        //测试scope属性
        public void test1(){
            ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
            UserDAO userDao1 = (UserDAO) app.getBean("userDao");
            UserDAO userDao2 = (UserDAO) app.getBean("userDao");
            System.out.println(userDao1);
            System.out.println(userDao2);
        }
    
    }
    

    单例模式运行结果:
    com.hf.dao.impl.UserDaoimpl@23fe1d71
    com.hf.dao.impl.UserDaoimpl@23fe1d71

    多例模式运行结果:
    com.hf.dao.impl.UserDaoimpl@43bd930a
    com.hf.dao.impl.UserDaoimpl@33723e30

    不同模式,创建对象实例的时机不同
    scope=singleton:加载配置文件,创建Spring容器时,就创建Bean
    scope=prototype:getBean时创建对象实例

    1. 当scope的取值为singleton时
      Bean的实例化个数:1个
      Bean的实例化时机:当Spring核心文件被加载时,实例化配置Bean实例
      Bean的生命周期:
    • 对象创建:当应用加载,创建容器时,对象就被创建了
    • 对象运行:只要容器在,对象一直活着
    • 对象销毁:当应用卸载,销毁容器时,对象就被销毁了
    1. 当scope的取值为prototype时
      Bean的实例化个数:多个
      Bean的实例化时机:当用getBean()方法实时例化Bean
      Bean的生命周期:
    • 对象创建:当使用对象时,创建新的对象实例
    • 对象运行:只要对象在使用中,就一直活着
    • 对象销毁:当对象长时间不用时,就被Java的垃圾回收器回收了

    3.3 Bean生命周期配置

    • init-method:指定类中初始化方法名称
    • destory-method:指定类中销毁方法名称

    applicationContext.xml

    <bean id="userDao" class="com.hf.dao.impl.UserDaoimpl" init-method="init" destroy-method="destroy"></bean>
    

    UserDaoimple.java

        public void init(){
            System.out.println("初始化方法");
        }
    
        public void destroy(){
            System.out.println("销毁方法");
        }
    

    运行结果
    UserDaoImpl创建
    初始化方法
    com.hf.dao.impl.UserDaoimpl@4e718207

    注:此处虽然规定了destroy-method但是并没有打印销毁方法。需要手动关闭时,程序才能意识到要destroy了,才会调用此方法。但app没有close方法,所以:

    1. 可以将app强转成ClassPathXmlApplicationContext类型,然后调用close方法
    2. 直接用ClassPathXmlApplicationContext接受app,即:ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");

    运行结果
    UserDaoImpl创建
    初始化方法
    com.hf.dao.impl.UserDaoimpl@4e718207
    销毁方法

    3.4 Bean实例化三种方式

    • 无参构造方法实例化
      重点掌握
    • 工厂静态方法实例化
      StaticFactory.java
        public static UserDAO getUserDao(){
            return new UserDaoimpl();
        }
    

    applicationContext.xml

    <bean id="userDao" class="com.hf.factory.StaticFactory" factory-method="getUserDao" ></bean>
    
    • 工厂实例方法实例化
      DynamicFactory.java
        public UserDAO getUserDao(){
            return new UserDaoimpl();
        }
    

    applicationContext.xml

            <bean id="factory" class="com.hf.factory.DynamicFactory"></bean>
            <bean id="userDao" factory-bean="factory" factory-method="getUserDao"></bean>
    
  • 相关阅读:
    第一周编程总结
    7-3 抓老鼠亏了还是赚了
    7-1 打印沙漏
    2019春第十二周作业
    2019春第十一周作业
    2019年春第十周作业
    第九周作业总结
    第八周作业总结
    第七周作业总结
    第六周作业
  • 原文地址:https://www.cnblogs.com/ebym/p/16152752.html
Copyright © 2020-2023  润新知