Java阶段二Day13

news2024/11/18 9:46:15

Java阶段二Day13

文章目录

  • Java阶段二Day13
    • 网站
    • Spring
    • SpringFramework
      • 核心模块
      • 特点
      • 使用Spring创建项目
      • 对象存储
      • 创建对象的方式
    • IoC容器
      • 控制反转
      • 依赖注入
      • IoC容器的实现
    • 基于XML管理bean
      • 获取bean方式
      • xml配置文件中的标签
      • 特殊值处理注入

今天开始是学习后端框架SSM(Spring、SpringMVC、MyBatis)

网站

  • 前端:页面的展示(美丽的外表)
  • 后端:功能的展示(实际的业务)

Spring

  • 本质来讲是一种生态,一个家族,其下有许多子框架(SpringFramework、SpringBoot、SpringCloud…)基于项目的复杂度、不同功能的要求拆分不同的子框架,每个框架都有独特的作用。

  • 如:

    • SpringFramework:整个Spring家族里面的,最核心的、偏底层的工程(本质上SSM中第一个S说的是 SpringFramework)
    • SpringBoot:可以快速搭建项目的集成环境、解决依赖关系
  • 注意:SpringMVC是 SpringFramework的子工程

  • 具体详情可参考官方文档:Spring官方文档

SpringFramework

Spring指的是Spring Framework,通常我们称之为Spring框架。Spring框架是一个分层的面向切面的Java应用程序的一站式解决框架,它是Spring技术栈的核心和基础,是为了解决企业级引用开发的复杂性而创建的。

核心模块

  • IoC:Inverse of Control的简写,为 控制反转,指把创建对象交给Spring进行管理。
  • AOP:Aspect Oriented Programming 的简写,为 面向切面编程。AOP用来封装多个类的公共行为,将那些与业务无关,却为业务模块共同调用的逻辑封装起来,减少系统的重复代码,降低模块间的耦合度。另外,AOP还解决一些系统层面上的问题,比如日志、事务、权限等。

特点

  • 控制反转:IoC,反转资源获取方向;把自己创建的资源、向环境索取资源变为环境将资源准备好,我们享受资源注入。
  • 面向切面编程:AOP,在不修改源代码的基础上增强代码功能。
  • 容器:Spring IoC是一个容器,因为它包含并管理组件对象的生命周期;组件享受到了容器化的管理,替程序员屏蔽了组件创建过程中的大量细节,极大降低了使用门槛,大幅度提高了开发效率。
  • 一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方库,而且在Spring旗下的项目已经覆盖了广泛领域,很多方面的功能性需求可以在Spring Framework 的基础上全部使用Spring来实现。

使用Spring创建项目

  • 在pom.xml中,引入spring相关依赖

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.24</version>
    </dependency>
    
  • 创建类,创建属性和方法

    package com.liner.spring.begin;
    
    public class User {
        private String username;
    
        // 无参构造
        public User(){
            System.out.println("0:无参构造执行了~~~");
        }
    
        public void add(){
            System.out.println("HelloWorld");
        }
    }
    
  • resources中,通过xml配置文件,告知spring需要创建一个什么样的对象

    <?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">
    
        <bean id="user" class="com.liner.spring.begin.User"></bean>
    
    </beans>
    
  • 进行测试

    package com.liner.spring.begin;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class UserTest {
    
        public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
            /**
             方式1:通过spring创建 java bean 对象
             1.加载spring配置文件(bean.xml)
             2.获取spring创建好的对象
             3.打印测试(调add方法)
             */
            ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
            User user = (User) context.getBean("user");
            System.out.println("user = " + user);
            user.add();
    
            /** 方式2:new方式创建java对象 */
            User user2 = new User();
            System.out.println("user2 = " + user2);
            user2.add();
    
            //spring的底层是通过反射的方式
            /** 方式3:反射方式创建java对象   
             1.获取class对象
             2.调用方法进行创建
             */
            Class zz = Class.forName("com.liner.spring.begin.User");
            User user3 = (User) zz.newInstance();
            System.out.println("user3 = " + user3);
            user3.add();
        }
    }
    

对象存储

存放到容器中,查看源码,DefaultListableBeanFactory.java,第164行,可以查看 BeanDefinition 的源码,有类的描述信息,是否初始化的状态等等
在这里插入图片描述

  • key:唯一标识
  • value:类的定义(描述信息)

创建对象的方式

  • new方式创建
  • 反射方式创建
  • 交给spring来创建

IoC容器

  • IoC 是 Inversion of Control 的简写,译为 控制反转
  • Spring通过IoC容器来管理所有的Java对象的实例化和初始化,控制着对象与对象之间的依赖关系。我们将由IoC容器管理的Java对象成为 Spring Bean,它与使用关键字 new 创建的Java对象没有任何区别。
  • IoC容器是Spring框架中最重要的核心组件之一,它贯穿了Spring从诞生到成长的整个过程

控制反转

  • 控制反转是一种思想
    • 对象的创建权利交出去,交给第三方容器负责
    • 对象和对象之间的关系维护权交出去,交给第三方容器负责
  • 通过依赖注入 DI 的方式实现

依赖注入

  • DI (Dependency Injection):依赖注入,依赖注入实现了控制反转的思想,是指Spring创建对象的过程中,将对象依赖属性通过配置进行注入
  • 依赖注入常见的实现方式有两种:set注入构造器注入
  • 所以 IoC 是一种控制反转的思想,而 DI 是对IoC的一种具体实现

IoC容器的实现

在这里插入图片描述

  • BeanFactory:这是IoC容器的基本实现,是Spring内部使用的接口。面向Spring本身,不提供给开发人员使用。

  • ApplicationContextBeanFactory的子接口,提供了更多高级特性,面向Spring的使用者,几乎所有场合都使用ApplicationContext,而不是底层的BeanFactory

  • ApplicationContext的主要实现类:

    类型说明
    ClassPathXmlApplicationContext通过读取类路径下的xml格式配置文件创建IoC容器对象
    FileSystemApplicationContext通过文件系统路径读取xml格式配置文件创建IoC容器对象

基于XML管理bean

获取bean方式

  • 通过id获取:context.getBean(“id属性值”)
  • 通过类型获取:context.getBean(类名.class)
  • 通过id类型获取:context.getBean(“id属性值”, 类名.class) 【为了精准常用此方法获取bean】

注意:当根据类型获取bean时,要求IoC容器中指定类型的bean只能有一个,当配置两个时会抛出异常:NoUniqueBeanDefinitionException: expected single matching bean but found 2: studentImp1,studentImp2
在这里插入图片描述

xml配置文件中的标签

  • bean标签,主要是创建java bean对象

    <bean id = "xxx" class = "xxx.xxx.xxx"></bean>
    
  • property标签,通过set方法注入属性值

    <property name = "" value = ""></property>
    
  • constructor-arg标签,通过构造器注入属性值

    <constructor-arg name = "" value = ""></constructor-arg>
    

特殊值处理注入

  • 字面量赋值:

    <!-- 使用value属性给bean的属性赋值时,spring会把value的属性值看作是字面量 -->
    <property name="number" value="1016"></property>
    
  • null值:

    <null></null>
    
  • xml实体:

    < > 在XML文档中具有特殊含义,在注入属性值时不能够随便使用,用XML实体 &lt&gt 来代替

    <constructor-arg name="description" value="&lt;真好看啊电影&gt;"></constructor-arg>
    
  • CDATA区:

    CDATA区,是xml中一种特有的写法,在CDATA区中可以包含特殊符号表示方式:<![CDATA[内容]]> ,在内容区域可以存放普通字符和特殊符号

    <constructor-arg name="description">
        <!-- CDATA区存放数据,可通过 CD + Tab键自动补全格式 -->
        <value><![CDATA[<真好看啊>]]></value>
    </constructor-arg>
    

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

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

相关文章

元气森林讲出新的“可乐味”故事?

这个五一&#xff0c;一场接一场的音乐节不断拔高假日的声浪。仅成都一市&#xff0c;就开展了298场演出&#xff0c;累计吸引10万余游客市民观看。人潮涌动之间&#xff0c;节日的氛围被拉满。 值得一提的是&#xff0c;音乐节不仅是游客的狂欢&#xff0c;也是消费品牌的盛宴…

【Java|golang】1419. 数青蛙

给你一个字符串 croakOfFrogs&#xff0c;它表示不同青蛙发出的蛙鸣声&#xff08;字符串 “croak” &#xff09;的组合。由于同一时间可以有多只青蛙呱呱作响&#xff0c;所以 croakOfFrogs 中会混合多个 “croak” 。 请你返回模拟字符串中所有蛙鸣所需不同青蛙的最少数目。…

Spring Boot集成ShardingSphere实现读写分离(四) | Spring Cloud 43

一、读写分离 1.1 背景 面对日益增加的系统访问量&#xff0c;数据库的吞吐量面临着巨大瓶颈。 对于同一时刻有大量并发读操作和较少写操作类型的应用系统来说&#xff0c;将数据库拆分为主库和从库&#xff0c;主库负责处理事务性的增删改操作&#xff0c;从库负责处理查询操…

Qt的Model/View结构

Model/View结构 将界面组件与所编辑的数据分离开来&#xff0c;又通过数据源的方式连接起来&#xff0c;是处理界面与数据的一种较好的方式。Qt使用Model/View结构来处理这种关系&#xff0c;Model/View的基本结构如图5-1所示。其中各部分的功能如下。 图1 Model/View基本结构…

ps磨皮插件专用智能磨皮插件 AI算法美颜 提高P图效率

ps的功能这么强大&#xff0c;其美白磨皮方法当然不止一种。本文就给大家细数一下ps美白磨皮常用的几种方法。在各种方法中&#xff0c;插件法的操作更为简单&#xff0c;效果也更好&#xff0c;因此我们还会介绍ps磨皮美白插件哪个好。事不宜迟&#xff0c;一起来看看吧。 一…

Throwable、Error、Exception 运行时异常、非运行时异常

一、Throwable Throwable类&#xff08;可抛出&#xff09;是一个超类&#xff0c;是所有错误和异常根。只有继承于Throwable的类或者其子类才能够被抛出。 有两个子类为Error和Exception&#xff0c;其他的异常类都继承于这两个子类。 三、Error和Exception Error类及其子类…

C++知识点 -- 智能指针

C知识点 – 智能指针 文章目录 C知识点 -- 智能指针一、智能指针的使用及原理1.使用场景2.RAII3.智能指针的设计思想4.智能指针的拷贝问题 二、auto_ptr三、unique_ptr四、shared_ptr1.模拟实现2.shared_ptr的循环引用 五、weak_ptr六、定制删除器七、内存泄漏1.什么是内存泄漏…

PDF转Word免费的软件有哪些?(完整教程版!)

这五种免费PDF转Word的方式&#xff0c;不仅免费&#xff0c;还能准确恢复PDF文件内容&#xff0c;前方高能&#xff0c;快速学习&#xff01; 1.Office直接打开 大厂软件&#xff0c;既能读文档又能转换格式&#xff0c;总让人放心。 转换流程1&#xff1a;在Word的最新版本…

Zero系列三部曲:Zero、Zero-Offload、Zero-Infinity

Zero系列三部曲&#xff1a;Zero、Zero-Offload、Zero-Infinity ZeroIntroductionZero DP流程图详解 Zero-R Zero-OffloadZero- Infinityreference Zero Introduction 以数据并行为例&#xff0c;在训练的时候&#xff0c;首先把模型参数在每个GPU上复制一份&#xff0c;然后…

IP报文解析(TCP、UDP、 ICMP)及代码分享(C++)

一、OSI模型与TCP/IP协议栈 1.1 OSI 7层模型&#xff1a; 应用层&#xff1a; 功能&#xff1a;用户接口&#xff0c;文件传输、电子邮件、虚拟终端、文件服务 设备&#xff1a;网关 协议&#xff1a;HTTP、TFTP、SMTP、FTP、SNMP、DNS、Telnet 表示层&#xff1a; 功能&…

Spring 面试题总结(2023最新版)

文章目录 1、谈谈你对Spring的理解&#xff1f;1.1 发展历程1.2 Spirng的组成1.3 Spring的好处 2、Autowired和Resource的区别2.1 共同点&#xff1a;2.2 Autowired2.3 Resource2.3.1 Resource的装配顺序 3、Spring常用注解3.1、给容器中注入组件3.1.1 包扫描组件标注注解3.1.2…

复数的基本知识

复数的基本知识 文章目录 复数的基本知识前言表示方法百度百科简单来说&#xff1a; 复数的运算 前言 这里只有一点点关于复数的知识&#xff0c;主要是最近的FFT要用到。 表示方法 百度百科 我们把形如 abi &#xff08;a,b均为实数&#xff09;的数称为复数&#xff0c;其…

c++ “拷贝构造,运算符重载”

1.拷贝构造 拷贝构造的意思为&#xff1a;创造一个对象并拷贝另一个对象. 拷贝构造的名字与类的名字一致&#xff0c;参数一般为引用&#xff0c;若类中为无拷贝构造&#xff0c;编译器会自动生成默认拷贝构造函数&#xff0c;这种默认的拷贝构造函数只能拷贝内容&#xff0c;不…

安装并使用JupyterLab

背景 JupyterLab 是用于笔记本、代码和数据的最新的基于 Web 的交互式开发环境。其灵活的界面允许用户配置和安排数据科学、科学计算、机器学习方面的工作流程。模块化设计邀请扩展来扩展和丰富功能。 部署 要在本机搭建 Jupyter Notebook 平台进行机器学习项目&#xff0c;…

【Python入门篇】——Python基础语法(字符串扩展和格式化的精度控制)

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; Python入门&#xff0c;本专栏主要内容为Python的基础语法&#xff0c;Python中的选择循环语句…

网络安全之IPSEC路由基本配置

目录 网络安全之IPSEC路由基本配置 IPSEC配置的前提分析 协议分析 传输模式分析​编辑 IPSEC路由中的配置 图谱图 配置公网可达 R1配置IKE SA的安全提议 R1配置 IKE SA 的身份认证信息 R3配置IKE SA的安全提议 R3配置 IKE SA 的身份认证信息 R1配置IPSEC的安全提议…

112-Linux_mysql数据库的安装

文章目录 一.数据库介绍1.数据库2.数据库的分类 二.mysql安装及设置1.安装mysql2.初始化配置(1)设置数据库不进行密码强校验(2)设置root管理员密码(3)设置是否要删除匿名用户&#xff0c;这里不删除(4)设置是否允许root用户远程登录&#xff0c;这里设置允许(5)是否删除test库&…

硬件设计 之 PCIe常用知识

以下是本人在自己在设计PCIe中常遇到的一些知识&#xff0c;对他们进行了简单整理一下&#xff0c;包括基本定义、传输速率、layout要求等。比如作为硬件工程师要了解芯片架构&#xff0c;哪些PCIe接口可以使用&#xff0c;使用这些PCIe要做什么&#xff0c;需要使用PCIe x1还是…

msvc编译opencascade和vtk

文章目录 msvc编译opencascade和vtk下载源码和第三方库开始编译VTK开始编译OCC msvc编译opencascade和vtk 下载源码和第三方库 opencascade源码 我下载的时候最新版本是7.7.0 第三方库文件 这里面标出来的是必须的文件&#xff0c;如果你需要别的&#xff0c;也可以下载其他的…

JNI开发

文件结构&#xff08;选中的为生成的&#xff09; CMake构建不需要执行命令&#xff0c;会自动生成so文件打包进apk Android mk构建需要执行命令生成so文件&#xff0c;再打包进apk。命令如下。 # 在jni目录下执行 # 生成com_demo_cppproject_OtherNdkTest.h头文件 javac -h .…