当前位置: 首页 > news >正文

Spring5总结

一、概述

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

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

3、Spring 有两个核心部分:IOC 和 Aop

(1)IOC:控制反转,把创建对象过程交给 Spring 进行管理

(2)Aop:面向切面,不修改源代码进行功能增强

4、Spring 特点

(1)方便解耦,简化开发

(3)方便程序测试

(4)方便和其他框架进行整合

(5)方便进行事务操作

(2)支持 Aop 编程

(6)降低 API 开发难度

二、IOC容器底层原理

1、什么是 IOC

(1)控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理

(2)使用 IOC 目的:为了耦合度降低

2、IOC 底层原理

​ xml 解析、工厂模式、反射

(1)xml配置文件,配置创建的对象

<bean id="userDao" class="com.yhd.dao.UserDao"></bean>

(2)工厂模式

​ 有相应的service类和dao类,创建工厂类

class UserFactory{
	public static UserDao getDao{
        String classValue = class属性值  //1、xml解析
        Class cls = Class.forName(classValue);	//2、通过反射创建对象
        return (UserDao)cls.newInstance;
    }

}

三、IOC(BeanFactory接口)

1、IOC 思想

​ 基于 IOC 容器完成,IOC 容器底层就是对象工厂

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

(1)BeanFactory

​ IOC 容器基本实现,是 Spring 内部的使用接口,加载配置文件时候不会创建对象,在获取对象(使用)才去 创建对象

(2)ApplicationContext

​ BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人员进行使用,加载配置文件时候就会把 在配置文件对象进行创建

3、ApplicationContext 接口有实现类

在这里插入图片描述

四、IOC操作Bean管理

1、Bean 管理

​ Bean 管理指两个操作

​ (1)Spring 创建对象

​ (2)Spirng 注入属性

2、Bean 管理两种方式

基于 xml 配置文件方式实现

​ 基于 xml 方式创建对象:在 spring 配置文件中,使用 bean 标签,里面添加对应属性,就可以实现对象创建。bean 标签常用属性

​ id 属性:唯一标识

​ class 属性:类的全路径

基于注解方式实现

3、Bean 作用域

Spring 里面,默认情况下,bean 是单实例对象

(1)在 spring 配置文件 bean 标签里面有属性(scope)用于设置单实例还是多实例

(2)scope 属性值

第一个值 默认值,singleton,表示是单实例对象

第二个值 prototype,表示是多实例对象

singleton 和 prototype 区别

第一 singleton 单实例,prototype 多实例

第二 设置 scope 值是 singleton 时候,加载 spring 配置文件时候就会创建单实例对象

设置 scope 值是 prototype 时候,不是在加载 spring 配置文件时候创建 对象,在调用

getBean 方法时候创建多实例对象

4、bean 生命周期

从对象创建到对象销毁的过程称为bean 生命周期。

过程:

(1)执行无参数构造创建 bean实例

(2)调用 set 方法设置属性值,为bean 的属性设置值

(3)调用 bean 的初始化的方法(需要进行配置初始化的方法)

(4)获取创建 bean 实例对象

(5)调用 bean 销毁的方法(需要进行配置销毁的方法)

代码演示过程:

public class Orders { 
//无参数构造
 public Orders() {
 System.out.println("第一步 执行无参数构造创建 bean实例");
 }
    
 private String oname;
 public void setOname(String oname) {
 this.oname = oname;
 System.out.println("第二步 调用 set 方法设置属性值");
 }
    
 //创建执行的初始化的方法
 public void initMethod() {
 System.out.println("第三步 执行初始化的方法");
 }
    
 //创建执行的销毁的方法
 public void destroyMethod() {
 System.out.println("第五步 执行销毁的方法");
 } }

<bean id="orders" class="com.yhd.spring5.bean.Orders" init-method="initMethod" destroy-method="destroyMethod">
 <property name="oname" value="电脑"></property>
</bean>
    
 @Test
 public void testBean() {
 ClassPathXmlApplicationContext context =
 new ClassPathXmlApplicationContext("bean.xml");
 Orders orders = context.getBean("orders", Orders.class);
    
 System.out.println("第四步 获取创建 bean 实例对象");
 System.out.println(orders);
 //手动让 bean 实例销毁
 context.close();
 }

5、bean 后置处理器, 生命周期有七步

(1)执行无参数构造创建 bean实例

(2)调用 set 方法设置属性值,为bean 的属性设置值

(3)把 bean 实例传递 bean 后置处理器的方法 postProcessBeforeInitialization

(4)调用 bean 的初始化的方法(需要进行配置初始化的方法)

(5)把 bean 实例传递 bean 后置处理器的方法 postProcessAfterInitialization

(6)获取创建 bean 实例对象

(7)调用 bean 销毁的方法(需要进行配置销毁的方法)

代码演示过程:

创建类,实现接口 BeanPostProcessor,创建后置处理器

public class MyBeanPost 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 id="myBeanPost" class="com.yhd.spring5.bean.MyBeanPost"></bean>

6、Bean管理(xml自动装配)

根据指定装配规则(属性名称或者属性类型),Spring 自动将匹配的属性值进行注入

根据属性名称自动注入

<!--实现自动装配
 bean 标签属性 autowire,配置自动装配
 autowire 属性常用两个值:
 byName 根据属性名称注入 ,注入值 bean 的 id 值和类属性名称一样
 byType 根据属性类型注入
-->
<bean id="emp" class="com.yhd.spring5.autowire.Emp" autowire="byName">
 <!--<property name="dept" ref="dept"></property>-->
    </bean> <bean id="dept" class="com.yhd.spring5.autowire.Dept"></bean>

根据属性类型自动注入

<!--实现自动装配
 bean 标签属性 autowire,配置自动装配
 autowire 属性常用两个值:
 byName 根据属性名称注入 ,注入值 bean 的id 值和类属性名称一样
 byType 根据属性类型注入
-->

<bean id="emp" class="com.yhd.spring5.autowire.Emp" autowire="byType">
 <!--<property name="dept" ref="dept"></property>-->
</bean> 
<bean id="dept" class="com.yhd.spring5.autowire.Dept"></bean>

五、

六、

相关文章:

  • 虚拟内存地址和物理内存地址?为什么我们程序里地址连续?为什么需要TLB Translation lookaside buffer
  • js高级属性
  • ISP和IAP介绍
  • 基于R语言、MATLAB、Python机器学习方法与案例分析
  • 基于php+MYSQL的旅游景点攻略的设计与实现毕业设计源码301216
  • 猿创征文|【Typescript入门】常用数据类型(2)
  • 上新啦!腾讯云云原生数据湖产品DLC 2.2.5版本发布,来看特性详解!
  • 【观察】赋能中小企业驶入成长“快车道”,华为云云商店背后的三重新价值...
  • TVM 学习指南(个人版)
  • pringboot+高考志愿填报信息管理系统 毕业设计-附源码251922S
  • python基于django的花卉种植技术交流系统
  • FastFlow(3)---有序FARM
  • Springboot餐饮点餐系统毕业设计源码301749
  • 借身份证给别人办理流量卡有风险吗?这些情况你必须要知道!
  • 概述LCR测试仪IM3536日本HIOKI日置IM3535 阻抗分析仪
  • [case10]使用RSQL实现端到端的动态查询
  • Linux快速复制或删除大量小文件
  • socket.io+express实现聊天室的思考(三)
  • Swift 中的尾递归和蹦床
  • 编写符合Python风格的对象
  • 前端面试之闭包
  • 详解NodeJs流之一
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 怎样选择前端框架
  • 自定义函数
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • #微信小程序:微信小程序常见的配置传值
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (12)Hive调优——count distinct去重优化
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (附源码)计算机毕业设计高校学生选课系统
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (算法)Travel Information Center
  • (转)Sql Server 保留几位小数的两种做法
  • *2 echo、printf、mkdir命令的应用
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .net 微服务 服务保护 自动重试 Polly
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .NET微信公众号开发-2.0创建自定义菜单
  • @NestedConfigurationProperty 注解用法
  • @SuppressWarnings(unchecked)代码的作用
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [100天算法】-二叉树剪枝(day 48)
  • [20171106]配置客户端连接注意.txt
  • [2544]最短路 (两种算法)(HDU)
  • [BZOJ 4034][HAOI2015]T2 [树链剖分]
  • [c++] 单例模式 + cyberrt TimingWheel 单例分析
  • [CSS] 点击事件触发的动画
  • [CSS]CSS 字体属性
  • [dts]Device Tree机制
  • [echarts] y轴不显示0