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实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有