肇庆建设局网站,cpanel 安装wordpress,软件开发培训机构,学传媒以后能干什么文章目录1、Spring2、SpringFramework系统架构3、BeanBean的配置Bean的实例化Bean的生命周期4、依赖注入DIsetter注入和构造器注入依赖自动装配5、集合注入1、Spring
Spring地址#xff1a;https://spring.io Spring技术的优点#xff1a; Spring家族#xff08;Spring全家… 文章目录1、Spring2、SpringFramework系统架构3、BeanBean的配置Bean的实例化Bean的生命周期4、依赖注入DIsetter注入和构造器注入依赖自动装配5、集合注入1、Spring
Spring地址https://spring.io Spring技术的优点 Spring家族Spring全家桶 2、SpringFramework系统架构
Spring Framework是Spring生态圈中最基础的项目是其他项目的根基。
Spring Framework系统架构图如下 核心概念 代码书写现状–耦合度偏高 基于上面的问题我们考虑使用对象时在程序中不要主动使用new产生对象转换为由外部提供对象 IocInversion of Control即控制反转这种思想核心在于把对象的创建控制权由程序转移到外部以达到解耦的目的。
Spring技术对Ioc思想进行了实现—提供一个Ioc容器来充当Ioc思想中的外部Ioc容器负责对象的创建、初始化等一系列工作被创建或被管理的对象在Ioc容器中统称Bean在容器中建立bean与bean之间的依赖关系的整个过程称为依赖注入DIDependency Injection 小结 Ioc入门案例 源码结构如下 使用之前耦合度较高的方式则 使用Ioc思想之后先准备一个配置文件applicationContext.xml 新建没有Spring Config选项的先导入Spring坐标看下图 接下来新建App2.java文件使用Ioc思想
获取Ioc容器获取bean DI入门案例 做完上面的Ioc还遗留两个问题
删除业务层中使用new对象创建的dao对象提供set方法给容器调用用来传对象 在配置文件中配置两个bean之间的关系Service中注入dao
3、Bean
Bean的配置 Bean的基础配置 属性中除了id也可用name属性来标识name是在起别名。多个别名之间用逗号封号空格都行。getBean方法中除了传入id传入别名name也可ref属性中也可以用name代替id 注意当getBean传入的id或者name不存在出现异常 两次获取bookService对象 根据输出结果可以看到这是同一个对象 由此使用scope属性来控制创建出来的实例是一个还是多个 关于bean默认是单例的一些思考如果这个对象是每次会记录一些成员变量的属性值即不能复用那这种对象就不适合交给容器进行管理。 Bean的实例化
Bean的本质就是对象创建bean是使用构造方法完成的 Bean的实例化--构造方法 Spring创建对象的时候默认使用对应类的无参构造而且构造方法是private也可以成功底层走的是反射 当手写了有参无参被覆盖后再执行程序 在这种创建bean的方法中如果无参构造不存在则有BeanCreationException异常 Bean的实例化--静态工厂 相比于之前的使用构造方法静态工厂即某个工厂类中写一个get方法来return一个需要的对象。一般为了兼容早期的遗留系统使用。 Bean的实例化--实例工厂与FactoryBean 和之前的静态方法不同的是实例工厂即通过工厂类的实例方法来造对象。 如此有两个缺陷一是工厂对象的创建而是创建所需对象 由此有了另一种思路 此时的配置文件就只需
Bean的生命周期 初始化容器创建对象new分一块内存执行构造方法执行属性注入set方法执行bean的初始化方法 使用bean执行业务操作 关闭或销毁容器执行bean的销毁方法 使用自己定义的方法对bean的生命周期进行控制 也可以直接实现这两个接口然后重写方法来完成这样就不用在xml文件中加配置了 注意到初始化bean的时机是在set完属性之后而销毁bean的时机是容器关闭前触发bean的销毁而容器关闭的方式有两种
使用ConfigurableApplicationContext接口的close方法注册关闭钩子这样程序运行完退出JVM前会先关闭容器再退出虚拟机 4、依赖注入DI
setter注入和构造器注入
依赖注入描述了在容器中建立bean与bean之间依赖关系的过程可以使用set方法或者构造方法来完成 使用setter注入引用类型 在bean中定义引用类型的属性并提供相应的set方法 在xml配置中使用property标签的ref属性来注入引用类型的对象name后是属性名ref后是参照对象的id 需要注入多个引用类型属性的时候再加property标签就行 使用setter注入简单数据类型 提供对应属性的set方法还是使用property标签不同的是不再用引用类型专属的ref而是value 构造器注入 定义引用类型属性并提供构造方法 xml配置中使用constructor-arg标签name属性是构造方法中的形参名不再是属性名。ref属性和之前一样。name是形参名这样耦合度很高可以用type属性即按形参类型区分注入或者index属性按照形参位置注入 对于普通类型也是提供构造方法使用constructor-arg标签
依赖自动装配
Ioc容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程有以下几种方式
按类型按名称按构造方法不启用自动装配
配置中使用bean标签autowrite属性设置自动装配的类型 举例 自动装配的注意点 5、集合注入