Java阶段二Day14

news2025/1/12 3:50:03

Java阶段二Day14

文章目录

  • Java阶段二Day14
    • 复习前日知识点
      • SpringFramework版本
      • SpringFramework核心
      • SpringFramework创建工程
      • SpringFramework相关概念
      • bean对象的创建过程
      • xml配置文件中的标签
    • 基于XML管理bean
      • 对象类型属性的注入
      • 数组类型属性注入
      • 集合类型属性注入
      • p命名空间
      • 引入外部属性文件

复习前日知识点

SpringFramework版本

Spring是一个生态,包含很多子模块,其中SpringFramework是核心的基础模块,平时常说的Spring框架指的就是Spring Framework,其他子模块也是自它的基础上衍生出来的

当前学习使用5.3.24版本,Spring6版本支持jdk17

SpringFramework核心

  • IoC:控制反转思想,把对象的创建及其各个对象间的依赖维护交给第三方容器处理
  • AOP:面向切面编程,AOP用来封装多个类的公共行为,将那些与业务无关的行为封装为一些公共类,减少重复代码,降低耦合度

SpringFramework创建工程

  • 在 pom.xml 引入SpringFramework依赖

    <dependencies>
        <!-- 引入spring framework 的 context基础依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.24</version>
        </dependency>
    </dependencies>
    
  • 定义类,类属性,方法

  • 创建xml的配置文件:resources / xxx.xml ,通过<bean>标签指定创建对象

    <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 class="com.liner.spring.iocxml.User" id="user"></bean>
    </beans>
    
  • ApplicationContext读取xxx.xml文件信息,并创建loC容器,并创建对象和初始化

    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    
  • 通过context.getBean(“xxx”)获取创建好的java bean对象

    Object obj = context.getBean("id属性值", 类名.class);
    

SpringFramework相关概念

  • loC:控制反转的思想
  • loC容器:负责Java bean对象的创建及初始化
  • DI注入:为对象的属性赋值
  • bean管理:利用xml配置文件,进行属性值注入

由Spring的loC容器创建的java对象,叫bean对象,和平时普通的java对象没有区别

bean对象的创建过程

在这里插入图片描述

xml配置文件中的标签

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

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

    <!-- 字面量值注入 -->
    <property name = "" value = ""></property>
    <!-- 空值null注入 -->
    <property name = "">
    	<null></null>
    </property>
    <!-- 属性值包含特定符号,xml实体方式 -->
    <property name = "" value = "&lt;xxx&gt;">
    </property>
    <!-- 属性值包含特定符号,CDATA区方式 -->
    <property name = "">
    	<value><![CDATA[<xxxxxx>]]]></value>
    </property>
    
    
  • constructor-arg标签,通过构造器注入属性值

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

基于XML管理bean

对象类型属性的注入

需要注入的数据类型为对象,而不是一个字面量

  • 引入外部bean

    通过在当前bean标签中通过 ref属性引用外部bean的方式实现

    <!--    外部bean-->
    <bean id="emp1" class="com.liner.spring.diobj.Emp">
        <property name="eName" value="张三"/>
        <property name="salary" value="50000.0"/>
        <property name="dept" ref="dept1"/>
    </bean>
    
    <bean id="dept1" class="com.liner.spring.diobj.Dept">
        <property name="dName" value="Java教研部"/>
    </bean>
    
  • 内部bean

    在需要注入对象的bean标签中内嵌 对象类型属性的 bean标签即可

    <!--   内部bean-->
    <bean id="emp2" class="com.liner.spring.diobj.Emp">
        <property name="eName" value="李四"/>
        <property name="salary" value="1000.0"/>
        <property name="dept">
            <bean class="com.liner.spring.diobj.Dept">
                <property name="dName" value="销售部门"/>
            </bean>
        </property>
    </bean>
    
  • 级联属性赋值(了解)

    可以在标签中给需要注入对象的属性重新赋值

    <!--    级联属性-->
    <bean id="emp3" class="com.liner.spring.diobj.Emp">
        <property name="eName" value="王五"/>
        <property name="salary" value="500.00"/>
        <property name="dept" ref="dept1"/>
        <!--        级联属性赋值-->
        <property name="dept.dName" value="综合办公室"/>
    </bean>
    
    <bean id="dept1" class="com.liner.spring.diobj.Dept">
        <property name="dName" value="Java教研部"/>
    </bean>
    

数组类型属性注入

使用 <array>标签<value>子标签实现

<bean id="person1" class="com.liner.spring.diarray.Person">
    <property name="name" value="于谦"/>
    <property name="age" value="54"/>
    <property name="hobby">
        <!-- 数组类型属性注入 -->
        <array>
            <value>抽烟</value>
            <value>喝酒</value>
            <value>烫头</value>
        </array>
    </property>
</bean>

集合类型属性注入

  • list集合属性注入

    使用 <property> 标签下的 <list>子标签<value> 子标签实现

    <bean id="teacher1" class="com.liner.spring.dilistmap.Teacher">
        <property name="tName" value="张三"/>
        <property name="studentList">
            <list>
                <ref bean="student1"/>
                <ref bean="student2"/>
            </list>
        </property>
    </bean>
    
    <bean id="student1" class="com.liner.spring.dilistmap.Student">
        <property name="sName" value="李四"/>
        <property name="age" value="12"/>
    </bean>
    <bean id="student2" class="com.liner.spring.dilistmap.Student">
        <property name="sName" value="王五"/>
        <property name="age" value="31"/>
    </bean>
    
  • Map集合属性注入

    使用 <util> 标签实现

     <bean id="stuMap" class="com.liner.spring.dilistmap.Student">
            <property name="sName" value="孙悟空"/>
            <property name="age" value="12"/>
            <property name="teacherMap">
                <map>
                    <entry key="1" value="猪八戒"/>
                    <entry>
                        <key>
                            <value>2</value>
                        </key>
                        <value>沙悟净</value>
                    </entry>
                </map>
            </property>
        </bean>
    
  • 引用集合类型bean注入

    使用 <property> 标签下的 <map>子标签<entry> 子标签实现。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           xmlns:util="http://www.springframework.org/schema/util"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
    
        <!--    引用类型的bean-->
        <bean name="stuUtil" class="com.liner.spring.dilistmap.Student">
            <property name="sName" value="小亮"/>
            <property name="age" value="52"/>
            <property name="teacherMap" ref="mapUtil"/>
            <property name="courseList" ref="listUtil"/>
        </bean>
    
        <util:list id ="listUtil">
            <value>表演</value>
            <value>音乐</value>
            <value>形体</value>
        </util:list>
    
        <util:map id = "mapUtil">
            <entry key="1" value="王五"/>
            <entry key="2" value="赵六"/>
        </util:map>
    
    </beans>
    

p命名空间

这也是一种注入方式,可以在xml中定义命名空间或者叫名称空间,可以简化xml代码

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">


    <bean id="studentp" class="com.liner.spring.dilistmap.Student"
          p:age="12" p:sName="吉吉国王" p:courseList-ref="mapUtil" p:teacherMap-ref="listUtil">
    </bean>

</beans>

引入外部属性文件

当前所有的配置和数据都在xml文件中,一个文件中有很多bean,修改和维护起来很不方便,生产环境中会把特定的固定值放到外部文件中,然后引入外部文件进行注入,比如数据库连接信息

  1. pom.xml中引入数据库依赖

    <!-- MySQL驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.15</version>
    </dependency>
    
    <!-- 数据源,连接池依赖 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.21</version>
    </dependency>
    
  2. resources目录下创建外部属性文件,一般为properties格式,定义数据库信息,如:jdbc.properties

    jdbc.user=root
    jdbc.password=root
    jdbc.url=jdbc://mysql://localhost:3306/spring
    jdbc.driver=com.mysql.cj.jdbc.Driver
    
  3. 创建spring配置文件bean-jdbc.xml,引入context的命名空间

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    
           xmlns:context="http://www.springframework.org/schema/context"
           
           xsi:schemaLocation="
           http://www.springframework.org/schema/context 
           http://www.springframework.org/schema/context/spring-context.xsd
           
           http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        
        <!-- 引入外部属性文件 -->
        <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
        <!-- 完成数据库信息注入 -->
        <bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
            <property name="url" value="${jdbc.url}"></property>
            <property name="username" value="${jdbc.user}"></property>
            <property name="password" value="${jdbc.password}"></property>
            <property name="driverClassName" value="${jdbc.driver}"></property>
        </bean>
    </beans>
    
  4. 创建测试类

    public class TestJdbc {
    
        // 外部文件属性引入测试用例
        @Test
        public void demo02(){
            ApplicationContext context = new ClassPathXmlApplicationContext("bean-jdbc.xml");
            DruidDataSource druidDataSource = context.getBean("druidDataSource", DruidDataSource.class);
            System.out.println(druidDataSource.getUrl());
        }
    }
    

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

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

相关文章

ConMask: Open-World Knowledge Graph Completion

目录 Abstract Introduction Model Relationship-Dependent Content Masking Target Fusion Loss Function [1711.03438] Open-World Knowledge Graph Completion (arxiv.org) Abstract 引入一个名为ConMask的开放世界KGC模型&#xff0c;该模型学习实体名称和部分文本…

数据结构与算法基础-学习-23-图之邻接矩阵与邻接表

目录 一、定义和术语 二、存储结构 1、邻接矩阵 1.1、邻接矩阵优点 1.2、邻接矩阵缺点 2、邻接表 3、邻接矩阵和邻接表的区别和用途 3.1、区别 3.2、用途 三、宏定义 四、结构体定义 1、邻接矩阵 2、邻接表 3、网数据类型&#xff08;造测试数据&#xff09; 五…

如何使用TRIZ理论来分析问题和解决问题?

文章目录 TRIZ基础现代TRIZ步骤 TRIZ基础 现代TRIZ 经典的TRIZ方法对专利进行分析,认为专利分为两个部分,一部分是需要解决的问题,一部分是解决问题的解决方案.首先是问题的分析,确定是否是初始问题,比如工具功能分析/特性传递等工具. 步骤 问题识别 主要是识别出初始问题;…

MATLAB实现建筑热平衡模型建立及节能温控方案

全球大约1/3的能源消耗于建筑。在能源紧张的今天&#xff0c;如何减少建筑的能源浪费是一个值得研究的课题。 本文在综合国内外建筑能耗模拟方法的基础上&#xff0c;采用热平衡法&#xff0c;针对一小型建筑建立了热特性仿真模型&#xff0c;选用武汉地区的气象数据&#xff…

JAVA11新特性

JAVA11新特性 概述 2018年9月26日,Oracle官方发布JAVA11.这是JAVA大版本周期变化后的第一个长期支持版本,非常值得关注.最新发布的JAVA11将带来ZGC HttpClient等重要特性,一共17个需要我们关注的JEP,参考文档http://openjdk.java.net/projects/jdk/11/ 181:基于嵌套的访问控制…

云计算适合大专生学吗?

云计算适合大专生学吗&#xff1f; 对于大专毕业生来说&#xff0c;云计算的确是一个不错的选择&#xff0c;因为云计算技术应用专业&#xff0c;主要就是专科院校在办学。不管你是计算机相关专业的&#xff0c;还是零基础想学习都是可以的&#xff1b;原因就在于云计算这门专业…

七款非常好用的 ChatGPT 开源插件

推荐7款很好用的 ChatGPT 开源插件 1. ChatGPT ProBot 这是一个基于chatGPT实现的Github机器人&#xff0c;可以让chatGPT帮你审核代码、重构代码&#xff0c;还可以在Github页面上和它进行聊天&#xff0c;咨询问题。 仓库地址: github.com/oceanlvr/Ch… 2.chatgpt-api 这…

如何在本地部署运行ChatGLMS-6B

在本篇技术博客中&#xff0c;将展示如何在本地获取运行代码和模型&#xff0c;并配置环境以及 Web GUI&#xff0c;最后通过 Gradio 的网页版 Demo 进行聊天。 官方介绍 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型&#xff0c;基于 General Language Model (GLM)…

图应用替换算法

文章目录 LRUSHiPBeladys MIN replacement(T-OPT)图应用基本知识CSR和CSCT-OPT替换算法使用 P-OPTRereference MatrixModified Rereference Matrix LRU 过于简单不做具体介绍 SHiP SHiP全称Signature-base Hit Predctor算法&#xff0c;其主打的是基于Signature(签名)进行Pr…

flutter学习之旅 -有状态的组件(StatefulWidget)

文章目录 StatefulWidget格式实现num增加finalfinal定义数组 我们重建一个项目 flutter create 项目名我们会看到 在Flutter中自定义组件其实就是一个类&#xff0c;这个类需要继承StatelessWidget/StatefulWidget StatelessWidget是无状态组件&#xff0c;状态不可改变的widg…

点成分享丨细胞培养三步骤——复苏、传代、冻存

细胞培养是指在体外模拟生物体内环境&#xff08;无菌、适宜温度、酸碱度和一定营养条件等&#xff09;&#xff0c;使之生存、生长、繁殖并维持主要结构和功能的一种方法。 细胞培养也叫细胞克隆技术&#xff0c;是细胞生物学研究方法中重要和常用技术&#xff0c;通过细胞培…

k近邻法学习

k近邻法&#xff08;k-nearest neighbor, k-NN)是一种基本分类与回归方法&#xff08;下面只写分类的&#xff09; knn的输入为实例的特征向量&#xff0c;对应于特征空间的店&#xff1b; 输出为实例的类别。 knn假设给定的训练数据集&#xff0c;其中的实力类别已定&#xf…

使用vscode进行python的单元测试,提高开发效率

背景知识 单元测试在我们的开发过程中非常有必要&#xff0c;它可以验证实现的一个函数是否达到预期。以前在学校写代码时&#xff0c;都是怼一堆代码&#xff0c;然后直接运行&#xff0c;如果报错再一步步调试&#xff0c;这样大部分时间都浪费在调试工作上。工作后发现大家…

【c/c++】curl编译(CMake方式)

一、curl下载 下载地址&#xff1a;curl - Download 进入下载页面&#xff0c;选择Old Releases。 二、CMake下载 这玩意居然有官网&#xff0c;刷新了我的认知&#xff0c;省事啊。 Download | CMake 三、CMake生成VS项目 1、点击【Browse Source ...】&#xff0c;先选择…

蓝牙耳机哪个品牌最好?数码博主整理2023超高性价比蓝牙耳机推荐

近来收到很多私信不知道蓝牙耳机哪个品牌最好&#xff0c;希望我能进行一期蓝牙耳机推荐&#xff0c;考虑到大家的预算不高&#xff0c;我特意花费时间测评了当下主流品牌的热销平价蓝牙耳机&#xff0c;最终整理成了这份超高性价比蓝牙耳机推荐&#xff0c;感兴趣的朋友们可以…

ASN.1-PKCS10

ASN1采用一个个的数据块来描述整个数据结构&#xff0c;每个数据块都有四个部分组成&#xff1a; 1、数据块数据类型标识&#xff08;一个字节&#xff09; 数据类型包括简单类型和结构类型。 简单类型是不能再分解类型&#xff0c;如整型(INTERGER)、比特串(BIT STRING)、字…

【Unity】搭建Jenkins打包工作流,远程打热更、构建App

Jenkins是团队协作项目打包常用的工作流&#xff0c;不多做介绍。 Jenkins的部署Unity打包环境还是非常简单的&#xff1a; 工作流程如下&#xff1a; 1. 在Jenkins中添加打包配置参数(如: 版本号, 目标平台等), 参数将以UI的形式显示在Jenkins Web界面以便打包前填写参数&a…

机器人抓取检测——Dex-Net

如今&#xff0c;在各种期刊顶会都能看到平面抓取检测的论文&#xff0c;他们声称能应对多物体堆叠场景&#xff0c;然而实际效果都不尽人意&#xff0c;我认为主要原因有如下几点&#xff1a; 缺乏多物体堆叠场景的抓取数据集。现在最常用的Cornell Grasp Dataset, Jacquard数…

政务网中使用内部华为云

项目按甲方要求&#xff0c;部署在政务网&#xff0c;各种需要在系统中播放的视频存放于内部华为云&#xff1b;然后&#xff0c;系统需要在互联网上访问。 经过一天捣鼓&#xff0c;终于搞定。过程中遇到了许多问题&#xff0c;有nginx代理的&#xff0c;docker域名解析的&am…

FTP Entering Extended Passive Mode

目录 原因 两种方法解决,哪个行用哪种 方法一 方法二 原因 FTP的连接建立有两种模式PORT