Spring5学习笔记(一)

关于近日

之前听说博客园整改,于是便许久未更新博客园,最近偶然回来看了一下,发现整改接近完成,于是我决定将最近的学习笔记上传。

本次学习笔记全程参考B站尚硅谷idea版Spring5教程

一、Spring5概述

1、Spring是轻量级 的开源 的JavaEE框架

2、Spring可以解决企业应用开发的复杂性

3、Spring有两个核心部分:IOC和 Aop
(1)IOC:控制反转,把创建对象过程交给Spring管理(Bean管理、属性注入、各种管理)
(2)Aop:面向切面,不修改源代码进行功能增强

Spring的特点

(1)方便解耦,简化开发
(2)Aop编程支持
(3)方便程序测试
(4)方便和其他框架进行整合
(5)方便进行事务操作
(6)降低API开发难度

基本思路及实现

第一步:创建一个User类

public class User {
    public void add(){
        System.out.println("add");
    }
}

第二步:创建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="user" class="day1.spring5.User"></bean>
    
</beans>

其中,id为自己为该类取的名字,class为类所在的路径
第三步:测试代码

@Test
public void testAdd(){

    // 1 加载 Spring 配置文件
    ClassPathXmlApplicationContext context =
            new ClassPathXmlApplicationContext("day1/spring5/bean1.xml");
    // 2 获取配置创建的对象
    User user = context.getBean("user", User.class);
    //此处的参数应该和xml文件中的id相同
    // 3 调用获取配置创建的对象的方法
    user.add();
    // 4 输出创建的对象
    System.out.println(user);
}

IOC容器

(1)IOC底层原理
(2)IOC接口(BeanFactory)
(3)IOC操作Bean管理(基于xml)
(4)IOC操作Bean管理(基于注解)
1、什么是IOC
(1)控制反转,把对象创建和对象之间的调用过程,交给Spring管理
(2)使用IOC目的:为了耦合度降低
(3)做入门案例就是IOC实现
2、IOC底层原理
(1)xml解析,工厂模式,反射
3、来个例子
为了避免耦合度高的问题,避免一个类因为相关类的路径变化而无法使用。从而提出工厂模式:

class UserService{
    execute(){
		UserDao dao = Factory.getDao();
        dao.add();
    }
}

---
class UserDao{
  add(){
    ......
  }
}
---
//工厂类
class Factory{
  public static UserDao getDao(){
    return new UserDao();
  } 
}

通过引入工厂类,解耦,当UserDao变化时,UserService不会受到影响。

IOC解耦过程解析

  • 第一步:xml配置文件,配置创建对象的类
<bean id="dao" class="day1.spring5.UserDao"></bean>
  • 第二步 基于Service类和Dao类, 创建工厂类
class UserFactory{
  public static UserDao getDao(){
    String classValue = class属性值; //1  xml解析
    Class clazz = Class.forName(classValue); //2  通过反射创建对象
    return (UserDao)clazz.newInstance();
  }
}

IOC接口

1、IOC思想基于IOC容器完成,IOC容器底层就是对象工厂

2、Spring提供IOC容器两种实现方式:(两个接口)

(1)BeanFactory:IOC容器的基本实现,是Spring内部的使用接口,不提供开发人员进行使用。
*加载配置文件时,不会创建对象,只有在获取(使用)对象才去创建对象
(2)ApplicationContext:BeanFactory接口的子接口,提供更多强大的功能,一般由开发人员使用
*加载配置文件时候就会把配置文件中所有对象进行创建(下列代码第一步,就是加载配置文件)

 @Test
    public void testAdd(){
        // 1 加载 Spring 配置文件  
        // ********ApplicationContext可以替换为BeanFactory********
        ApplicationContext context =
                new ClassPathXmlApplicationContext("com/qy/spring5/bean1.xml");
        // 2 获取配置创建的对象
        User user = context.getBean("user", User.class);
        // 3 调用获取配置创建的对象的方法
        user.add();
        // 4 输出创建的对象
        System.out.println(user);
    }

IOC操作管理(xml方式)

(1)使用bean标签,向里面添加对应属性

<bean id="user" class="day1.spring5.User"></bean>
  • id:唯一标识
  • class:类的路径
    (2)创建对象时默认执行无参数的构造方法。

注入属性依赖

  • 第一种注入:set方法注入
    Book类
public class Book {

    private String bname;

    private String bauthor;

    public void setBname(String bname) {
        this.bname = bname;
    }
    public void setBauthor(String bauthor) {
        this.bauthor = bauthor;
    }
    public String getBname() {
        return bname;
    }
    public String getBauthor() {
        return bauthor;
    }
}

xml配置文件

<bean id="book" class="com.day1.spring5.Book">
      <property name="bname" value="易经"></property>
      <property name="bauthor" value="达摩老祖"></property>
</bean>

测试类

@Test
public void testBook(){
    // 1 加载Spring配置文件
    ApplicationContext context =
            new ClassPathXmlApplicationContext("com/day1/spring5/bean1.xml");
    // 2 获取配置创建的对象
    Book book = context.getBean("book",Book.class);
    // 3 输出配置创建的对象的属性
    System.out.println("书名:"+book.getBname()+"作者:"+book.getBauthor());
}

/***************/
输出:书名:易经作者:达摩老祖
posted @ 2021-08-02 10:05  Emuaer  阅读(54)  评论(0编辑  收藏  举报