• spring学习小笔记


    一、Spring开发

    1.1 Spring简介

    1. Spring官网
    2. Spring:他就是一个技术的全家桶,含有许多的技术

    1.2 Spring Framework系统架构

    Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基
    在这里插入图片描述
    详细介绍:

    在这里插入图片描述

    1.3 Spring Framework学习路线

    在这里插入图片描述

    1.4 Spring Farmework核心概念

    • IOC:控制反转
      • 适用对象的的时候,由主动new产生对象产生由外部提供对象,在这个创建的过程当中对象的创建控制权由程序转变为外部,这样就被称为控制反转
    • Spring技术对IOC思想进行了实现
      • Spring创建了一个IOC容器–>充当IOC思想的外部
      • IOC负责对象的创建、初始化等工作,被管理或者被创建的对象在IOC当中就叫做Bean
    • DI :依赖注入
      • 如果一个Bean与另外一个Bean存在依赖的关系,那么容器就会自动的将其绑定依赖关系,这一个过程就叫做依赖注入
        在这里插入图片描述

    1.5 Spring入门

    1. 导入Spring坐标

     <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.2.10.RELEASE</version>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2. 定义Spring管理类(接口)

    public class BookServiceImpl implements BookService {
        private final BookDao bookDao = new BookDaoImpl();
        @Override
        public void save() {
            System.out.println("save Service !!!!!");
            bookDao.save();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    package com.huanglei.Service;
    
    public interface BookService {
        public void save();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3. 创建Spring配置文件 ,applicationContext.xml

    <?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 http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    
        <bean id="BookDao" class="com.huanglei.dao.impl.BookDaoImpl"/>
        <bean id="BookService" class="com.huanglei.Service.impl.BookServiceImpl" />
    </beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4. 初始化IOC容器(获取容器),通过容器获取到Bean

    public class App1 {
        public static void main(String[] args) {
            //首先获取到IOC容器
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    
            //获取到Bean
             BookDao  bookDao = (BookDao) applicationContext.getBean("BookDao");
             bookDao.save();
    
            BookService bookService = (BookService) applicationContext.getBean("BookService");
            bookService.save();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    将上述的全部利用new的方式进行替换

    1. 定义Spring管理类(接口)
    public class BookServiceImpl implements BookService {
        private  BookDao bookDao ;
    
        @Override
        public void save() {
            System.out.println("save Service !!!!!");
            bookDao.save();
        }
    
        public void setBookDao(BookDao bookDao) {
            this.bookDao = bookDao;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    1. 创建Spring配置文件 ,applicationContext.xml
    <?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 http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    
        <bean id="BookDao" class="com.huanglei.dao.impl.BookDaoImpl"/>
        <!--
            property标签表示配置当前Bean的属性
            name:表示配置的哪一个具体的属性
            ref:表示参照的哪一个Bean,表示的为哪一个Bean的id
        -->
        <bean id="BookService" class="com.huanglei.Service.impl.BookServiceImpl">
            <property name="bookDao" ref="BookDao"/>
        </bean>
    </beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    二、Bean的基础配置

    2.1 Bean的别名配置

    可以创建多个命名
    在这里插入图片描述

    2.2 Bean的作用范围

    创建的是单一Bean,还是多个Bean

    类别描述
    名称scope
    类型属性
    所属bean标签
    功能定义bean的作用范围,可选范围如下: singleton:单例(默认)prototype :非单例
    范例

    2.3 Bean的实例化

    bean本质上就是对象,创建bean使用构造方法完成

    2.3.1 构造方法实例化bean

    提供可访问的构造方法:

    public BookDaoImpl(){
            System.out.println("BookDao servicing !!!!");
        }
    
    • 1
    • 2
    • 3

    配置条件:

     <bean id="BookDao" class="com.huanglei.dao.impl.BookDaoImpl"/>
    
    • 1

    Bean创建的方法是通过其调用该类的误餐构造方法来达到创建效果的,若没有无参构造就会报错BeanCreationException

    2.3.2 静态工厂实现实列化bean

    静态工厂:

    public class OrderDaoFactory {
        public static OrderFactory getOrderFactory(){
            return new OrderFactoryImpl();
        }
    }
    
    public interface OrderFactory {
        public  void save();
    }
    
    public class OrderFactoryImpl implements OrderFactory {
        @Override
        public void save() {
            System.out.println("orderFactory save!!!");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    配置方法:

    <bean id="OrderFactory" class="com.huanglei.Factory.OrderDaoFactory" factory-method="getOrderFactory"/>
    
    • 1

    2.3.3 利用实例化工厂实例bean

    静态工厂:

    public class OrderDaoFactory {
        public  OrderFactory getOrderFactory(){
            return new OrderFactoryImpl();
        }
    }
    
    public interface OrderFactory {
        public  void save();
    }
    
    public class OrderFactoryImpl implements OrderFactory {
        @Override
        public void save() {
            System.out.println("orderFactory save!!!");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    • 改进方法

    调用接口:

    public class OrderDaoFactoryBean implements FactoryBean<OrderFactory> {
        /*
        * 代替实例化对象的创建对象
        * */
        @Override
        public OrderFactory getObject() throws Exception {
            return new OrderFactoryImpl();
        }
        /*
        * 创建的类型
        * */
        @Override
        public Class<?> getObjectType() {
            return OrderFactory.class;
        }
    
        /*
        * 这里来设置是否为单例对象
        * true:单
        * false:非单
        * */
        @Override
        public boolean isSingleton() {
            return false;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    配置文件:

     <bean id="OrderFactory" class="com.huanglei.Factory.OrderDaoFactoryBean"/>
    
    • 1

    2.4 Bean的生命周期

    • 初始化容器
      • 创建对象(内存分配)
      • 执行构造方法
      • 执行属性注入 ( set操作)
      • 执行bean初始化方法
    • 使用bean
      • 执行业务操作
    • 关闭/销毁容器
      • 执行bean销毁方法

    生命周期控制方法:

    1. 利用配置文件进行操作
     <bean id="OrderFactory" class="com.huanglei.Factory.OrderDaoFactoryBean" init-method="init" destroy-method="destroy"/>
    
    • 1

    文件方法:

    public class OrderDaoFactoryBean implements FactoryBean<OrderFactory>, InitializingBean, DisposableBean {
        /*
        * 代替实例化对象的创建对象
        * */
        @Override
        public OrderFactory getObject() throws Exception {
            return new OrderFactoryImpl();
        }
        /*
        * 创建的类型
        * */
        @Override
        public Class<?> getObjectType() {
            return OrderFactory.class;
        }
    
        /*
        * 这里来设置是否为单例对象
        * true:单
        * false:非单
        * */
        @Override
        public boolean isSingleton() {
            return false;
        }
    
        public void init(){
            System.out.println("init…………");
        }
    
        public void destroy(){
            System.out.println("destroy…………");
        }
    
        @Override
        public void afterPropertiesSet() throws Exception {
            System.out.println("等到属性设置设置完后才执行这个方法");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    关闭容器的方法:

    • 手动关闭容器
     //通过close进行关闭
            classPathXmlApplicationContext.close();
    
    • 1
    • 2
    • 注册关闭钩子进行关闭,在虚拟机退出前关闭容器
    //调用钩子的方法关闭bean
    classPathXmlApplicationContext.registerShutdownHook();
    
    • 1
    • 2
  • 相关阅读:
    1723_PolySpace Bug Finder命令行执行探索
    【LeetCode】Day109-最长回文串
    通过Gunicorn、Supervisor和Nginx更好地运行Django
    5-4 jmu-报数游戏 (15分)
    【自动化基础】手把手教零基础小白搭建APP的UI自动化环境
    Spring系统学习 - Spring入门
    如何使用界面控件Telerik UI for WinForms开发步骤进度条?
    Linux-文件管理命令
    1、LeetCode之两数之和
    傅里叶分析概述
  • 原文地址:https://blog.csdn.net/gua_Piter/article/details/133652042