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简介
- Spring官网
- Spring:他就是一个技术的全家桶,含有许多的技术
1.2 Spring Framework系统架构
Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基
 
 详细介绍:

1.3 Spring Framework学习路线

1.4 Spring Farmework核心概念
- IOC:控制反转- 适用对象的的时候,由主动new产生对象产生由外部提供对象,在这个创建的过程当中对象的创建控制权由程序转变为外部,这样就被称为控制反转
 
- 适用对象的的时候,由主动new产生对象产生由外部提供对象,在这个创建的过程当中
- Spring技术对IOC思想进行了实现 
  - Spring创建了一个IOC容器–>充当IOC思想的外部
- IOC负责对象的创建、初始化等工作,被管理或者被创建的对象在IOC当中就叫做Bean
 
- Spring创建了一个IOC容器–>充当IOC思想的
- DI :依赖注入 
  - 如果一个Bean与另外一个Bean存在依赖的关系,那么容器就会自动的将其绑定依赖关系,这一个过程就叫做依赖注入
  
 
- 如果一个Bean与另外一个Bean存在依赖的关系,那么容器就会自动的将其绑定依赖关系,这一个过程就叫做依赖注入
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的方式进行替换
- 定义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;
    }
}
- 创建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的别名配置
可以创建多个命名
 
2.2 Bean的作用范围
创建的是单一Bean,还是多个Bean
| 类别 | 描述 | 
|---|---|
| 名称 | scope | 
| 类型 | 属性 | 
| 所属 | bean标签 | 
| 功能 | 定义bean的作用范围,可选范围如下: singleton:单例(默认);prototype :非单例 | 
| 范例 | <bean id="bookDao"class="com.itheima.dao.impl.BookDaoImpl" scope="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!!!");
    }
}

- 改进方法
调用接口:
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销毁方法
 
生命周期控制方法:
- 利用配置文件进行操作
 <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();








![[ValueError: not enough values to unpack (expected 3, got 2)]](https://img-blog.csdnimg.cn/edd0002b40e2424b920816c0fbce5dd0.png)







![练[GYCTF2020]EasyThinking](https://img-blog.csdnimg.cn/img_convert/4f92eff3de45a3a5f254d1f13fe99f7b.png)


