设为首页 加入收藏

TOP

Java后端07(Spring)(一)
2023-08-26 21:11:25 】 浏览:72
Tags:Java 后端 Spring

Spring

? 涉及的设计模式:单例模式,简单工厂模式,代理模式,观察者模式,反射,注解。。。。。

Spring配置文件文件头

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd 
       http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop.xsd">
</beans>

IOC 控制反转 ---- 将创建对象的权力由开发者交 给 Spring(缓解对象和对象之间的耦合度)

? 在传统模式下,对象的创建和赋值,都是由开发者自己手动完成,事实情况下,开发者只关心如何获取赋值好的对象,但是并不希望自己手动进行创建对象和赋值的事情(spring中所有的对象都是从实例工厂中自动创建,涉及到简单工厂模式)

IOC底层原理

  1. xml解析(负责读取配置文件中 Bean 的相关信息)
  2. 简单工厂模式(借助 BeanFactory 完成对象的实例化和返回)
  3. 反射(不使用 new 创建对象的根本原因)

简单工厂模式

优点:

  1. 设计与实现分离(开发者不需要关心对象是如何创建出来的)
  2. 如果要拓展业务,并不会影响之前的业务,只需要拓展子类即可

IOC容器的两种实现方式

  1. BeanFactory:是Spring内部使用的接口,不建议给开发人员使用,该容器加载配置文件时,并不会创建响应对象,当开发者尝试获取对象的时候,才会创建对象(类似懒汉模式,具有延迟加载的特性)
  2. ApplicationContext:BeanFactory的子接口,一般由开发人员使用,该容器在加载配置文件的时候,就会创建对象(类似饿汉模式,不会出现并发安全问题,线程安全)

DI 依赖注入 ---- 在你配置好 bean 的情况下,由 Spring 帮你完成对象的赋值

优点:

  1. 实现了接口和实现的分离
  2. 组件化的思想,分离关注点,使用接口时,不再关注实现

Spring 的 bean 管理

?Bean的生命周期

  1. 常规五步生命周期

    ? 通过构造器创建 bean 实例 => 通过反射调用 setter 方法完成属性赋值 => 调用 bean 的初始化方法 => 获取 bean 实例 => 当容器关闭的时候, 调用 bean 的销毁方法

  2. 完整七步生命周期

    ? 通过构造器创建 bean 实例 => 通过反射调用 setter 方法完成属性赋值 => 在 bean 初始化之前调用后置处理器 => 调用 bean 的初始化方法 => 在 bean初始化之后调用后置处理器 => 获取 bean 实例 => 当容器关闭的时候, 调用 bean 的销毁方法

    // 后置处理器 Demo
    public class MyPostProcessor implements BeanPostProcessor {
        @Override
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("初始化之前调用的处理器");
            return bean;
        }
    
        @Override
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("初始化之后调用的处理器");
            return bean;
        }
    }
    
bean的自动装配

? 自动装配:根据 bean 的 name 或者 type 实现自动装配

  1. byName 根据属性名称自动注入(注入的 bean 名称要跟属性名称保持一致)
  2. byType 根据属性的类型自动注入
<!-- byName 方式 自动装配 bean-->
<!-- person 对象再实例化的时候,需要注入 dog 属性,而 dog 属性对应的应该是一个 Dog 类对象的内存地址-->
<!-- byName 会根据你的成员变量名称,找到匹配的 id 的 bean-->
<bean id="person" class="com.iweb.entity.Person" autowire="byName" />
<bean id="dog" class="com.iweb.entity.Dog" />

<!--    byType 方式 根据成员变量的类型,自动装配 id 不需要和成员变量匹配-->
<bean id="person" class="com.iweb.entity.Person" autowire="byType" />
<bean id="dog" class="com.iweb.entity.Dog" />

<!--    导入外部配置文件-->
<context:property-placeholder location="db.properties" />
<!--    在 spring 中加载外部配置文件 使用${}传参 以 druid 连接池为例-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="${jdbc.driver}" />
    <property na
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇从源码层面深度剖析Spring循环依赖 下一篇SpringBoot3进阶用法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目