Spring Framework系统框架

2024-09-09 05:28

本文主要是介绍Spring Framework系统框架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

序号表示的是学习顺序

IoC(控制反转)/DI(依赖注入):

ioc:思想上是控制反转,spring提供了一个容器,称为IOC容器,用它来充当IOC思想中的外部。


我的理解就是spring把这些对象集中管理,放在容器中,这个容器就叫Ioc这些对象统称为Bean

用对象的时候不用new,直接外部提供(bean)

当外部的对象有关系的时候,IOC给它俩绑好(DI)

DI和IOC组合起来:在容器中建立bean与bean之间的依赖关系的整个过程,因为啥就是比如说

private Dao dao;把它俩对象都装进bean里面(Ioc)然后因为它俩依赖,耦合度太高了,就把它俩关系绑定(DI)。

最终效果:使用对象时不仅可以直接从IoC容器中获取,并且获取到的bean已经绑定了所有的依赖关系。

IOC入门案例:

1.先在pom.xml中导入spring-context坐标

<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.9.RELEASE</version>
</dependency>

2.创建applicationContext文件

3.在applicationContext文件中配置对应类作为spring管理的bean

<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/><bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">

4.初始化IOC容器,通过容器获取bean

ClassPathXmlApplicationContext()是ApplicationContext的实现类,因为ApplicationContext是一个接口,不能创建对象

这里还涉及类型强转,原本是Object现在变成了 BookService

public class App2 {public static void main(String[] args) {//获取IOC容器ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");//获取beanBookService bookService= (BookService) ctx.getBean("bookService");bookService.save();}
}

但是现在还在用new,下面就把new删去

重点就是获取容器,获取bean

DI入门案例:

思路:

1.要删除使用new形式创建的Dao对象

2.然后提供依赖对象对应的setter方法,使需要的Dao对象进入Service中

    public void setBookDao(BookDao bookdao){this.bookDao=bookDao;}

3.配置service与dao之间的关系,也就是绑定dao与service的关系

property标签中的name指的是BookService中的bookDao属性,ref指的是对应bean的id

    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/><bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<!--        配置service与dao的关系--><property name="bookDao" ref="bookDao"/></bean>
<!--    2.配置bean-->
<!--    bean标签表示配置bean-->
<!--    id表示给bean起名字-->
<!--    class属性表示给bean定义类型-->

bean的基础配置:

1.基础属性

name:和id差不多,可以给起bean别名,可以用逗号(,)分号(;)空格( )分隔

class:bean的类型或者是说配置bean的全路径类名

<bean id="bookService" name="bookService BOOK" class="com.itheima.service.impl.BookServiceImpl" scope="singleton"></bean>

注意:如果bean无法通过id或name获取,将无法获取,会抛出异常

NoSuchBeanDefinitionException: No bean named 'bookService1' available

scope:设置bean对象是一个还是多个,默认一个,也就是作用范围

scope="prototype这个是非单例模式,可以创建出多个对象
scope="singleton这个是单例模式,只能创建出一个对象,并且默认就是单例

Bean的实例化(三种):

第一种:构造方法(常用)

java创建对象可以通过直接new和构造方法

public class Person {String name;int age;// 无参构造方法public Person() {this.name = "未知";this.age = 0;}// 带参数的构造方法public Person(String name, int age) {this.name = name;this.age = age;}
}// 使用无参构造方法创建对象
Person person1 = new Person();// 使用带参数的构造方法创建对象
Person person2 = new Person("张三", 25);

Bean创建对象是使用的无参构造方法:需要提供一个无参的构造方法,所以配置没有任何变化

如果没有提供无参构造方法会抛出异常:

使用无参构造方法创建bean对象例子:

第二种:静态工厂:

首先创建出一个工厂文件夹,然后注意是static静态工厂

这里配置会有变化

这里的factory-method是工厂里面真正造对象的那个方法

这里的class用于指定工厂类

<bean id="orderDao" factory-method="getBookDao"
class="com.itheima.factory.BookServiceFactory"></bean>

第三种:实例工厂(了解)

配置上有改变:先创建出工厂的对象,还要告诉用工厂里的哪个方法造对象。

第二个bean就没有class了,factory-bean用于指定工厂bean的名称。

 <bean id="BookServiceFactory" class="com.itheima.factory.BookServiceFactory"/><bean id="BookService" factory-method="getBookDao" factory-bean="BookServiceFactory"/>

Spring改进版(实用):FactoryBean(迷迷糊糊)

配置的时候简单了,不用两步了

<bean id="BookService" class="com.itheima.factory.BookServiceFactoryBean"/>

其它代码:把上面的那个getuserDao变成getObject,就是一直固定了,但是也

Bean生命周期:

配置:

init-method:开始的那个方法
destory-method:结束的那个方法

不能因为你写了一个Public init(){}方法,bean就开始,所以这个init-method是标记的。

<bean id="BookService" class="com.itheima.dao.impl.BookServiceImpl" init-method="init"
destory-method="destory"/>

代码如下:

bean的关闭:

用close方法比较暴力,直接关闭

ctx.registerShutdownHook():这个方法用于向 JVM 注册一个关闭挂钩。当 JVM 关闭时,这个挂钩会被执行。它通常用于执行一些清理操作,比如关闭数据库连接、释放资源等。

public class App {public static void main(String[] args) {//3.获取IOC容器ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");ctx.registerShutdownHook();BookService bookService= (BookService) ctx.getBean("bookService");bookService.save();ctx.close();}}

setter注入(构造器注入):

如果是传入非引用类型,比如String,int等

先在相应的类下设置这个变量并且创建出它的setter方法

public class BookServiceImpl implements BookService {private String chenName;public void setChenName(String chenName) {this.chenName = chenName;}
}

配置上:

主要是第二句

<property name="chenName" value="abcc"></property>

name是属性的名字,value是属性的值

 <bean id="bookService" name="bookService" class="com.itheima.service.impl.BookServiceImpl" scope="singleton"><property name="chenName" value="abcc"></property></bean>

以前prooerty经常和ref放在一起,ref属性是用来引用been的,常用于引用类型

构造器注入:

这次就不是用setter方法传,而是用构造方法传

配置上也有变化:用了一个constructor-arg标签

这篇关于Spring Framework系统框架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1150285

相关文章

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

Spring AI使用tool Calling和MCP的示例详解

《SpringAI使用toolCalling和MCP的示例详解》SpringAI1.0.0.M6引入ToolCalling与MCP协议,提升AI与工具交互的扩展性与标准化,支持信息检索、行动执行等... 目录深入探索 Spring AI聊天接口示例Function CallingMCPSTDIOSSE结束语

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻