Day1. Spring

news/2024/11/8 17:05:54/

1 课程描述

  • IoC基础容器,主要涉及Bean对象的管理。

  • AOP面向切面编程,主要涉及切面配置,声明式事务控制

  • Spring整合Web环境。

  • Web层解决方案-SpringMVC.

1.1 IoC、DI和AOP思想的提出

由于传统的JavaWeb出现的问题:

问题1:层与层之间紧密耦合在一起,接口与具体实现紧密耦合在一起。

问题2:通用的事务功能和日志功能耦合在代码中。

基于上述问题提出IoC、DI和AOP思想

IoC:Inversion of Control,程序创建Bean的权利反转给第三方。

DI:Dependency Injection 依赖注入,强调Bean之间的关系,Bean2是Bean1的属性

AoP:面向切面编程,主要实现方式是代理

2 Spring 框架的诞生

spring是一个开源的轻量级Java开发应用框架,可以简化企业级应用开发。Spring解决了开发者在JavaEE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。是当前企业中Java开发几乎不能缺少的框架之一。Spring的生态及其完善,不管是Spring哪个领域的解决方案都是依附于在SpringFramework基础框架的。

2.1 Spring 快速入门

  1. 导入坐标

  1. 编写UserService接口与其实现,只建立java文件,不用写代码。

  1. 配置到XML文件

  1. 写测试代码。

Bean文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--id表示唯一标识,class表示bean的名字--><bean id="userSerice" class="cn.msf.service.UserSerice"></bean>
</beans>

测试代码1:基于BeanFactory的bean管理

package cn.msf.test;import cn.msf.service.UserSerice;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;/*** @author : msf* @date : 2023/1/6*/
public class BeanFactoryTest {public static void main(String[] args) {// 1. 创建工厂对象DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();// 2. 创建读取器,读取xml文件XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);// 3. 读取器配置文件给工厂.reader.loadBeanDefinitions("beans.xml");// 4. 测试UserSerice userSerice = (UserSerice) beanFactory.getBean("userSerice");System.out.println("userSerice = " + userSerice);}
}

总结:这个也是很鸡肋啊,每次创建service文件都要使用getBean有没有简单的方式呢?可以使用注解形式进行简化。


我们都知道三层架构,dao层要注入到service中,service要注入到controller层中。spring如何进行依赖注入呢?


测试代码2:基于ApplicationContext的bean管理;

ApplicationContext 称为Spring容器,内部封装了BeanFactory,比BeanFactory功能更丰富更强大,使用ApplicationContext 进行开发时,xml配置文件的名称习惯写成applicationContext.xml。

package cn.msf.test;import cn.msf.service.UserSerice;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @author : msf* @date : 2023/1/6*/
public class AppContextTest {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");UserSerice userSerice = (UserSerice) context.getBean("userSerice");}
}
因为内部集成了beanFactory,因此可以不用再创建beanFactory,而可以直接加载xml文件。然后对bean进行管理。
这里还有一个小点,ApplicationContext是接口,要通过子类创建,因此可以使用ctrl + H查看。

3 总结:

如何简单的理解IoC呢?我们可以把他简单抽象成Map+反射。map主键存入userService,值存入它的全限定名。然后知道全限定名以后利用反射思想进行创建。当然这一切都想要读取xml,然后通过反射生成对象存入到spring容器中。


http://www.ppmy.cn/news/9922.html

相关文章

【C语言进阶】 带你玩转指针

指针进阶一、字符指针二、指针数组三、数组指针3.1&#xff1a;数组指针的使用四、数组参数、指针参数4.1&#xff1a;一维数组传参4.2&#xff1a;二维数组传参4.3&#xff1a;一级指针传参&#xff1a;4.4&#xff1a;二级指针传参&#xff1a;五&#xff1a;函数指针一、字符…

【 uniapp - 黑马优购 | 商品详情 】详情页UI结构设计、商品导航区域实现

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大二在校生&#xff0c;讨厌编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;小新爱学习. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc…

纪念2022年11月软考高项(信息系统项目管理师)一次通过的经验随笔

一、备考背景2022年5月的浙江软考因为疫情防控原因临时取消&#xff0c;我离杭州买房又远了几分。众所周知&#xff0c;杭州是炒房投资客的香饽饽&#xff0c;即使主城区购房摇号制度不停打补丁&#xff0c;也难济于事。自住客为了与投资客抗衡&#xff0c;一靠社保&#xff0c…

工控安全-使用Metasploit攻击Modbus设备

文章目录实验内容环境介绍实验开始开启Modbus从站主机和从站服务利用Metasploit工具扫描Modbus从站中的ID访问从站2的寄存器数据修改从站4线圈值可选择的action实验内容 利用Metasploit工具针对Modbus协议进行攻击&#xff0c;读取Modbus从站寄存器数值以及修改Modbus从站寄存…

猿代码超算实习生,五步助力拿到高薪offer

虽说行行出状元&#xff0c;但是一旦入错行&#xff0c;那就是一辈子的事。互联网的潮水已经退去&#xff0c;普通人再进入也只是勉强温饱。与其朝不保夕的被裁员&#xff0c;倒不如提前锁定未来30年的幸福。 20大以来&#xff0c;芯片国产化、超算&#xff08;先进计算&#…

git远程仓库使用流程

git远程仓库使用流程远程仓库使用流程远程仓库介绍远程仓库使用流程如何将本地文件夹关联远程仓库多人开发配置流程远程仓库SSH配置远程仓库使用流程总结git分支使用流程分支介绍1.2-分支使用流程远程仓库使用流程 Git命名作用详细描述git clone克隆远程仓库代码把服务器的项目…

Linux_Study

文章目录1.操作系统概述1.1 操作系统的作用1.2 常见的操作系统2.Linux介绍2.1 诞生2.2 Linux内核3. Linux基础操作3.1 虚拟机快照3.2 Linux 目录结构3.3 命令、命令行3.4 ls命令&#xff08;列表命令&#xff09;3.5 cd/pwd命令&#xff08;目录命令&#xff09;3.6 相对路径、…

第05章 数组、排序和查找

数组 基本介绍 数组可以存放多个同一类型的数据&#xff0c;数组也是一种数据类型&#xff0c;是引用类型。 即&#xff1a;数组就是一组数据。 数组的使用 1、数组的定义 方法一&#xff1a; 数据类型[] 数组名 new 数据类型[大小] 说明&#xff1a;int[] a new int[5…