spring学习小笔记

spring学习小笔记(1)

  • 一、Spring开发
    • 1.1 Spring简介
    • 1.2 Spring Framework系统架构
    • 1.3 Spring Framework学习路线
    • 1.4 Spring Farmework核心概念
    • 1.5 Spring入门
  • 二、Bean的基础配置
    • 2.1 Bean的别名配置
    • 2.2 Bean的作用范围
    • 2.3 Bean的实例化
      • 2.3.1 构造方法实例化bean
      • 2.3.2 静态工厂实现实列化bean
    • 2.3.3 利用实例化工厂实例bean
    • 2.4 Bean的生命周期

一、Spring开发

1.1 Spring简介

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

1.2 Spring Framework系统架构

Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基
spring学习小笔记_第1张图片
详细介绍:

spring学习小笔记_第2张图片

1.3 Spring Framework学习路线

spring学习小笔记_第3张图片

1.4 Spring Farmework核心概念

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

1.5 Spring入门

1. 导入Spring坐标

 <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>

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

public class BookServiceImpl implements BookService {
    private final BookDao bookDao = new BookDaoImpl();
    @Override
    public void save() {
        System.out.println("save Service !!!!!");
        bookDao.save();
    }
}
package com.huanglei.Service;

public interface BookService {
    public void save();
}

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>

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();
    }
}

将上述的全部利用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. 创建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>

二、Bean的基础配置

2.1 Bean的别名配置

可以创建多个命名
spring学习小笔记_第5张图片

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 !!!!");
    }

配置条件:

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

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!!!");
    }
}

配置方法:

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

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!!!");
    }
}

spring学习小笔记_第6张图片

  • 改进方法

调用接口:

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;
    }

配置文件:

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

2.4 Bean的生命周期

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

生命周期控制方法:

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

文件方法:

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("等到属性设置设置完后才执行这个方法");
    }
}

关闭容器的方法:

  • 手动关闭容器
 //通过close进行关闭
        classPathXmlApplicationContext.close();
  • 注册关闭钩子进行关闭,在虚拟机退出前关闭容器
//调用钩子的方法关闭bean
classPathXmlApplicationContext.registerShutdownHook();

你可能感兴趣的:(spring,学习,笔记)