Spring Framwork_01

news2024/9/20 8:07:07

Core Container(核心容器):管理对象的技术
1.Beans
2.Core
3.Context
4.SpEL

Core:核心工具包,包括字节码操作cglib、asm,资源的抽象Resource,对象实例化化工具等等。
Beans:Bean 的定义、Bean 的创建以及对 Bean 的解析。
Context:Context模块建立在Core和Beans模块之上,是Bean运行环境(即保存维护Bean的状态、数据,Bean之间的关系),又称之为Ioc容器。
SpEL:提供了一个强大的表达式语言,可以在运行时查询和操作对象。

AOP(面向切面编程):在不影响源程序的情况下加强功能,依赖于Core Container
Aspects(AOP思想实现)

Data Access(数据访问)/Integration(数据集成)
1.JDBC
2.ORM
3.OXM
4.JMB
5.Transactions

Web(Web开发)
1.WebSocket
2.Servlet
3.Web
4.Portlet

Test(单元测试和集成测试)请添加图片描述
Spring核心概念
1.IoC/DI
2.IoC容器
3.Bean

问题:代码耦合度高
解决方案:使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象,即为控制反转(IoC)(Inversion of Control)控制反转
请添加图片描述
对象的创建控制权由程序转移到外部,这种思想称为控制反转

Spring技术对IoC思想进行了实现
1.Spring提供了一个容器,称为Ioc容器,用来充当Ioc思想的外部
2.IoC容器负责对象的创建初始化等一系列工作,被创建或被管理的对象在Ioc容器中统称为Bean
DI(Dependency Injection)依赖注入
在容器中建立bean和bean之间的依赖关系的整个过程,称为依赖注入
请添加图片描述

目的:充分解耦
1.使用IoC容器管理bean(IoC)
最终效果
使用对象时不仅可以直接从IoC容器中获取,并且获取到的bean已经绑定了所有的依赖关系

IoC思路分析
1.管理什么?(Service和Dao)
2.如何将被管理的对象告知IoC容器?(配置)
3.被管理的对象交给IoC容器,如何获取到IoC容器?(接口)
4.IoC容器得到后,如何从容器中获取到bean?(接口方法)
5.使用Spring导入哪些坐标?(pom.xml)

ApplicationContext
依赖包
在这里插入图片描述

public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("appliactionContext.xml");//通过
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        bookDao.save();
    }

ApplicationContext(interface)
extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver

ApplicationContext主要实现类:

ClassPathXmlApplicationContext : 从类路径下加载配置文件。

FileSystemXmlApplicationContext : 从文件系统中加载配置文件。

ApplicationContext在初始化上下文时就实例化所有的单例Bean.请添加图片描述
ClassPathXmlApplicationContext
AbstractXmlApplicationContext
AbstractRefreshableConfigApplicationContext
AbstractRefreshableApplicationContext
AbstractApplicationContext
extends DefaultResourceLoader implements ConfigurableApplicationContext(extends ApplicationContext, Lifecycle, Closeable )

与BeanFactory不同的是,ApplicationContext容器实例化后会自动对所有的单实例Bean进行实例化与依赖关系的装配,使之处于待用状态。而BeanFactory容器实例化后并不会自动实例化Bean,只有当Bean被使用时BeanFactory容器才会对该Bean进行实例化与依赖关系的装配。请添加图片描述

 <bean id="bookDao" class="com.example.demo.dao.impl.BookDaoImpl"/>

    <bean id="bookService" class="com.example.demo.service.impl.BookServiceImpl">
        <property name="bookDao" ref="bookDao"/>
    </bean>

property :配置当前Bean的属性
name属性:表示配置哪一个具体的属性
ref属性:表示参照哪一个Bean请添加图片描述
bean配置
bean基础配置
bean别名配置
bean作用范围配置

请添加图片描述
name属性:起别名
请添加图片描述
spring默认情况创建的Bean是单例的(是指创建的实例只有一个)
scope属性:Bean的作用范围
singletion:单例对象
prototype:非单例对象

在这里插入图片描述
请添加图片描述
singleton 表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例
prototype表示每次获得bean都会生成一个新的对象,每次请求(每次使用)创建新的实例,destroy方式不生效.
request表示在一次http请求内有效(只适用于web应用)
session表示在一个用户会话内有效(只适用于web应用)

Bean实例化
IoC使用无参构造方法来实例化对象
无参构造方法如果不存在,将抛出BeanCreationException异常

<bean id="orderDao" class="com.example.demo.factory.OrderDaoFactory" factory-method="getOrderDao"/>

静态工厂实例化Bean

    <bean id="userFactory" class="com.example.demo.factory.UserDaoFactory"/>

    <bean id="userDao" factory-bean="userFactory" factory-method="getUserDao"/>

实例工厂实例化Bean

    <bean id="userDao" class="com.example.demo.factory.UserDaoFactoryBean"/>
public class UserDaoFactoryBean implements FactoryBean<UserDao> {
    @Override
    public UserDao getObject() throws Exception {
        return new UserDaoImpl();
    }

    @Override
    public Class<?> getObjectType() {
        return UserDao.class;
    }
}

使用FactoryBean实例化bean

Bean生命周期
1.使用配置

    public void init(){
        System.out.println("init...");
    }

    public void destory(){
        System.out.println("destory...");
    }
    <bean id="bookDao" name="service service2 bookEbi" class="com.example.demo.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"/>
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("appliactionContext.xml");
        BookDao bookDao = (BookDao) ctx.getBean("service");
        bookDao.save();
        ctx.close();
ctx.registerShutdownHook();//注册关闭钩子,在虚拟机关闭之前将IoC关闭

2.使用接口

implements BookService, InitializingBean, DisposableBean

直接在工厂·类中引入InitializingBean, DisposableBean接口,在xml配置中可以不写init-method="init" destroy-method="destory"
在这里插入图片描述

init->set->serviceinit
请添加图片描述
请添加图片描述
依赖注入的两种方式
1.普通方法(set方法)
2.构造方法请添加图片描述

<bean id="bookDao" name="service service2 bookEbi" class="com.example.demo.dao.impl.BookDaoImpl" >
        <property name="databaseName" value="mysql"/>
        <property name="connectionNum" value="10"/>
    </bean>

property的value属性,用来给普通变量赋值

    <bean id="bookService" class="com.example.demo.service.impl.BookServiceImpl">
        <constructor-arg name="bookDao" ref="bookDao"/>
        <constructor-arg name="userDao" ref="userDao"/>
    </bean>
``![请添加图片描述](https://img-blog.csdnimg.cn/33314bbd3e84414095cef48263d32faf.jpeg)
`
![请添加图片描述](https://img-blog.csdnimg.cn/b8ecf01bfcb543618a944111c9580ef0.jpeg)
![请添加图片描述](https://img-blog.csdnimg.cn/e576d5ef810d44d38455cc58702d0794.jpeg)
**依赖自动装配**
1.IoC容器根据Bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
2.自动转配方式
1>按类型(常用)
2>按名称
3>按构造方法
4>不启用自动装配

按类型匹配要让自动装配的bean唯一

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/139189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【自学Java】Java循环结构

Java循环结构 Java while教程 在 Java 语言 中&#xff0c;关键字 whie 用于判断一个判断条件&#xff0c;如果返回值都是 true&#xff0c;那么它会一直执行。与 if 不同之处在于&#xff0c;if 只会执行一次&#xff0c;而 while 中&#xff0c;只要条件满足&#xff0c;会…

【迅为iMX6Q】开发板 u-boot 2015.04 SD卡 启动

前言 最近为了深入研究 嵌入式Linux 的开发&#xff0c;把【迅为iMX6Q】开发板 找了出来&#xff0c;重新搭建了开发编译环境 【迅为iMX6Q】开发板 的 u-boot&#xff0c;放在了 android 源码中&#xff0c;可以从 【迅为iMX6Q】开发板 网盘资料里&#xff0c;下载 iTOP-iMX6_…

Windows下redis环境搭建(可查看源码及Debug调试进入源码)及简易使用

Windows下redis环境搭建&#xff08;可查看源码及Debug调试进入源码&#xff09;及简易使用 在我们使用redis进行学习的过程中&#xff0c;在Windows平台上进行学习是一个非常高效的选择&#xff0c;因此下面介绍如何在Windows环境下搭建一个redis环境&#xff08;即可Debug调试…

数据结构之入门二叉树

文章目录前言1.二叉树的知识铺垫2.二叉树的具体实现1.递归实现前中后序遍历2.其它相关接口的实现1.求二叉树的节点个数2.求叶子节点个数3.二叉树查找值为x的节点3.求树高度4.求k层节点的个数5.层序遍历6.判断二叉树是否是完全二插树3.总结前言 之前用数组实现了一种特殊的完全…

解决word写论文改成两栏时mathtype的公式无法居中的问题

想要的格式 投论文的时候&#xff0c;有很多期刊的要求是两栏排版&#xff0c;比如中国电机工程学报 理论上&#xff0c;用mathtype输入的公式&#xff0c;会根据word的格式自动地调整自己的缩进量&#xff08;更确切地说&#xff0c;是会自动调整制表位&#xff09;。比如下…

新手入门指南之玩转蓝桥云课(线上运行虚拟机,c++,Java,Javaweb,python环境,以及如何成功利用命令行运行这些环境)

目录 你好&#xff0c;蓝桥云课 &#x1f44b; &#x1f332;欢迎来到蓝桥云课&#x1f332; 为什么要用 Linux 实验精神 蓝桥云课课程 加入课程 开始实验 实验环境 讨论发帖 实验报告 有效学习时间 我们的目标是星辰大海 &#x1f350;Linux 桌面环境使用指南&…

【C++ Primer】阅读笔记(4):string

目录 简介初始化string对象初始化方法直接初始化与拷贝初始化string对象上的操作操作方式读取string对象(cin>>s、cout<<s)getline(is,s)empty()size()string对象的比较(>、<、<=、>=)两个string对象相加(s1+s2)字面值与string对象相加遍历string对象参…

Jenkins复制和导出导入job

一、同一个Jenkins中复制job如果是同一个Jenkins复制job&#xff0c;只需要在创建Job时&#xff0c;选择Copy from一个已有的job即可。也就是在下方上面的红框中输入你新建job的名称&#xff0c;在下面的红框中输入你想要复制的job(已经建好的job)&#xff0c;然后点击确定。这…

【C初阶】实用调试技巧

实用调试技巧前言一、什么是bug&#xff1f;二、调试是什么&#xff1f;&#xff08;一&#xff09;调试&#xff08;二&#xff09;调试的基本步骤&#xff08;三&#xff09;Debug和Release的介绍。1.简单介绍三、Windows环境调试介绍&#xff08;一&#xff09;调试环境的准…

【SAP Abap】SAP ALV开发(REUSE_ALV_GRID_DISPLAY_LVC)全网最详细 DEMO

SAP ALV开发&#xff08;REUSE_ALV_GRID_DISPLAY_LVC&#xff09;全网最详细 DEMO1、ALV 简介2、演示程序1、ALV 简介 ALV 报表程序&#xff0c;是我们在 SAP 项目中最常开发的程序类型。 SAP 系统提供了三种 ALV 实现方式&#xff0c;分别是&#xff1a; FM ALV&#xff0c;…

win10下安装多个JDK配置方法

环境变量配置 此电脑 --- 属性 -- 高级系统设置 -- 环境变量 -- 系统变量 -- 新建 1、配置JAVA_HOME JAVA6_HOME jdk1.6的安装路径 JAVA8_HOME jdk1.8的安装路径 JAVA_HOME %JAVA8_HOME% 两个%表示引用变量的值&#xff0c;直接用JAVA_HOME&#xff0c;就能表示一连串长…

SAR影像变化检测方法之(SAR_CD_DDNet(无监督变化检测))论文阅读

一、论文信息 1、论文标题&#xff1a;Change Detection in Synthetic Aperture Radar Images Using a Dual-Domain Network 2、代码链接&#xff1a;https://github.com/summitgao/SAR_CD_DDNet 二、摘要 合成孔径雷达(SAR)图像的变化检测是一项关键而具有挑战性的任务。现…

Android---BottomAppBar

目录 BottomAppBar FloatingActionButton UI 完整代码 BottomAppBar Material Design 的一个重要特征是设计 BottomAppBar 。可适应用户不断变化的需求和行为。因此&#xff0c;BottomAppBar 是一个从标准物质指导的演变。它更注重功能&#xff0c;增加参与…

ansible 第三天

1.挂载本地光盘到/mnt 2.配置yum源仓库文件通过多种方式实现 仓库1 &#xff1a; Name: RH294_Base Description&#xff1a; RH294 base software Base urt: file:///mnt/BaseOS 不需要验证钦件包 GPG 签名 启用此软件仓库 仓库 2: Name: RH294_Stream Description &#xff1…

Android Studio 用WIFI无线调试adb (3种方法)

最近数据线一直被boss借走&#xff0c;一旦借走就无法调试了&#xff0c;所以就打算不用数据线调试了&#xff0c;使用WIFI进行调试。 一、命令 1、首先配置adb环境变量 首先找到andoridSDK的路径中的platform-tools文件夹 &#xff0c;将他的路径复制我的是 C:\Users\YiShi…

365天深度学习训练营-第P7周:YOLOv5-Backbone/YOLOv5-C3模块实现

目录 一、前言 二、我的环境 三、代码实现 1、C3模块 2、Backbone模块 一、前言 >- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/xLjALoOD8HPZcH563En8bQ) 中的学习记录博客** >- **&#x1f366; 参考文章&#xff1a;36…

【算法】day03:动态规划dp

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录1. 青蛙跳台阶2. 矩形覆盖3. 二进制中1的个数4. 链表中倒数第k个结点普通小孩也要热爱生活&#xff01; 1. 青蛙跳台阶 跳台阶 1&#xff09;思路&#xff1a;如果青蛙在第n个台阶上&#xff0c;那么它要么来自n-1…

python命名规范

1.命名有字母、数字和下划线三个组成 2.项目名、包名、模块名、python文件名 都应该用英文开头&#xff0c;不能纯数字&#xff0c;否则无法识别 3.脚本名不能跟系统模块或三方模块重复 4.函数、类、方法、参数名称不能跟系统现有名称重复 5.类名必须以大写字母开头、除了类…

Kafka在windows下下载、启动、测试详细教程

目录 下载地址 启动 启动zookeeper 启动kafka 队列操作 创建消息队列名 删除消息队列名 查看所有的队列 测试 生产测试 消费测试 下载地址 Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/downloadswindows下kafka3.0版本的…

G120系列变频器进行参数备份(上传或下载)的2种基本方法介绍(Startdrive+SD卡)

G120系列变频器进行参数备份(上传或下载)的2种基本方法介绍(Startdrive+SD卡) 1. 通过SINAMICS SD存储卡对G120系列变频器进行参数上传/下载的具体方法 适配范围:CU240B-2(DP)/CU240E-2(DP/PN)/CU250S-2(DP/PN) 可将变频器的参数设置保存至 SINAMICS SD 卡。在进行变频器更…