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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,