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>
posted @ 2022-04-17 15:35  计算机181胡佛  阅读(29)  评论(0编辑  收藏  举报