Spring知识点记录

news2025/1/18 11:46:24

Spring知识点

  • 1. Spring简介(此章略过)
    • 1.1 Spring概述
    • 1.2 Spring家族
    • 1.3 Spring Framework
  • 2. IOC
    • 2.1 IOC容器
    • 2.2 基于XML管理bean
      • 2.2.1 入门案例(ioc容器的整体思路)
      • 2.2.2 获取bean的三种方式
      • 2.2.3 依赖注入
        • 2.2.3.1 setter注入
        • 2.2.3.2 构造器注入
      • 2.2.4 特殊值处理
      • 2.2.5 为类类型属性赋值
      • 2.2.6 为数组类型属性赋值
      • 2.2.7 为集合类型属性赋值
      • 2.2.8 p命名空间
      • 2.2.9 引入外部属性文件
      • 2.2.10 bean的作用域
      • 2.2.11 bean的生命周期
      • 2.2.12 FactoryBean
      • 2.2.13 基于xml的自动装配
    • 2.3 基于注解管理bean
      • 2.3.1 标记与扫描
      • 2.3.2 基于注解的自动装配
  • 3. AOP
    • 3.1 场景模拟
    • 3.2 代理模式
    • 3.3 AOP概念及相关术语
    • 3.4 基于注解的AOP
    • 3.5 基于XML的AOP(了解)
  • 4. 声明式事务
    • 4.1 JdbcTemplate
    • 4.2 声明式事务概念
    • 4.3 基于注解的声明式事务
    • 4.4 基于XML的声明式事务


1. Spring简介(此章略过)

1.1 Spring概述

1.2 Spring家族

1.3 Spring Framework


2. IOC

2.1 IOC容器

IOC:Inversion of Control,翻译过来是反转控制。
DI:Dependency Injection,翻译过来是依赖注入。

2.2 基于XML管理bean

2.2.1 入门案例(ioc容器的整体思路)

类和方法:

文件位置:src/main/java/com/atguigu/spring/pojo/HelloWorld.java

package com.atguigu.spring.pojo;

public class HelloWorld {
    public void sayHello(){
        System.out.println("hello,spring");
    }
}

Spring配置文件

创建方式:
Spring配置文件创建方式

文件位置:src/main/resources/applicationContext.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--
        bean:配置一个bean对象,将对象交给IOC容器来管理;
            配置HelloWorld所对应的bean,即将HelloWorld的对象交给Spring的IOC容器管理
        属性:
        id:设置bean的唯一标识
        class:设置bean所对应类型的全类名
    -->
    <bean id="helloworld" class="com.atguigu.spring.pojo.HelloWorld"></bean>
</beans>

测试类

文件位置:src/test/java/com/atguigu/spring/test/HelloWorldTest.java

package com.atguigu.spring.test;

import com.atguigu.spring.pojo.HelloWorld;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class HelloWorldTest {
    @Test
    public void test(){
        //获取IOC容器
        ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取IOC容器中的Bean对象
        HelloWorld helloworld = (HelloWorld) ioc.getBean("helloworld");
        helloworld.sayHello();
    }
}

2.2.2 获取bean的三种方式

获取bean的方式:
1、根据id获取
2、根据类型获取(最常用)
3、根据id和类获取

    /**
     * 获取bean的三种方式:
     * 1、根据id获取;
     * 2、根据类型获取;(使用最多的方式)
     *  注意:根据类型获取bean时,要求IOC容器中有且只有一个类型匹配的bean。
     *  若没有任何一个类型匹配的bean,此时抛出异常:NoSuchBeanDefinitionException
     *  若有多个类型匹配的bean,此时抛出异常:NoUniqueBeanDefinitionException
     * 3、根据id和类型获取;
     */
    @Test
    public void testIOC(){
        //获取IOC容器
        ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取bean的第一种方法:根据id获取bean
        //Student studentOne = (Student) ioc.getBean("studentOne");

        //获取bean的第二种方法:根据类型获取bean
        Student student = ioc.getBean(Student.class);

        //获取bean的第三种方法:根据id和类型来获取bean
        //Student studentOne = ioc.getBean("studentOne", Student.class);
        System.out.println(studentOne);
    }

2.2.3 依赖注入

2.2.3.1 setter注入

学生类

package com.atguigu.spring.pojo;

import java.util.Arrays;
import java.util.Map;

public class Student {
    private Integer sid;
    private String sname;
    private Integer age;
    private String gender;
    private Double score;
    private Clazz clazz;
    private String[] hobby;
    private Map<String,Teacher> teacherMap;

    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                ", score=" + score +
                ", clazz=" + clazz +
                ", hobby=" + Arrays.toString(hobby) +
                ", teacherMap=" + teacherMap +
                '}';
    }

    public Map<String, Teacher> getTeacherMap() {
        return teacherMap;
    }

    public void setTeacherMap(Map<String, Teacher> teacherMap) {
        this.teacherMap = teacherMap;
    }

    public String[] getHobby() {
        return hobby;
    }

    public void setHobby(String[] hobby) {
        this.hobby = hobby;
    }

    public Clazz getClazz() {
        return clazz;
    }

    public void setClazz(Clazz clazz) {
        this.clazz = clazz;
    }

    public Double getScore() {
        return score;
    }

    public void setScore(Double score) {
        this.score = score;
    }

    public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Student() {
    }

    public Student(Integer sid, String sname,String gender , Integer age) {
        this.sid = sid;
        this.sname = sname;
        this.gender = gender;
        this.age = age;
    }
    public Student(Integer sid, String sname, String gender, Double score) {
        this.sid = sid;
        this.sname = sname;
        this.gender = gender;
        this.score = score;
    }
}

spring配置文件

    <!--依赖注入-setter注入-->
    <bean id="studentTwo" class="com.atguigu.spring.pojo.Student">
        <!--
            property:通过成员变量的set方法来进行赋值;
            name:需要设置需要赋值的属性名(属性名:跟get、set方法有关);
            value:设置为属性所赋的值;
        -->
        <property name="sid" value="1001"></property>
        <property name="sname" value="张三"></property>
        <property name="gender" value=""></property>
        <property name="age" value="23"></property>
    </bean>

测试类

    public void testDI(){
        //获取IOC容器
        ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
        //setter注入
        Student studentTwo = ioc.getBean("studentTwo", Student.class);
        System.out.println(studentTwo);
       }

2.2.3.2 构造器注入

学生类同上(需要设置有参构造)
Spring配置文件

    <!--依赖注入-构造器注入-->
    <bean id="studentThree" class="com.atguigu.spring.pojo.Student">
        <constructor-arg name="sid" value="1002"></constructor-arg>
        <constructor-arg name="sname" value="李四"></constructor-arg>
        <constructor-arg name="gender" value=""></constructor-arg>
        <constructor-arg name="age" value="24"></constructor-arg>
    </bean>

测试类

    public void testDI(){
        //构造器注入
        Student studentThree = ioc.getBean("studentThree", Student.class);
        System.out.println(studentThree);
       }

2.2.4 特殊值处理

特殊值处理:
1、赋值null
2、使用XML特殊符号赋值
3、使用CDATA节赋值

    <!--字面量的特殊值赋值处理-->
    <bean id="studentFour" class="com.atguigu.spring.pojo.Student">
        <!--1、赋值null-->
        <property name="sname"><null/></property>
        <!--2、XML特殊符号-->
        <property name="sname" value="&lt;王五&gt;"></property>
        <!--
            3、CDATA节(内容必须放到value标签中)
                IDEA中输入“CD”按回车就可以在CDATA节括号内输入内容,CDATA节中的内容全部原样解析。
        -->
        <property name="sname"><value><![CDATA[<王五>]]></value></property>
    </bean>

2.2.5 为类类型属性赋值

2.2.6 为数组类型属性赋值

2.2.7 为集合类型属性赋值

2.2.8 p命名空间

2.2.9 引入外部属性文件

2.2.10 bean的作用域

2.2.11 bean的生命周期

2.2.12 FactoryBean

2.2.13 基于xml的自动装配

2.3 基于注解管理bean

2.3.1 标记与扫描

2.3.2 基于注解的自动装配


3. AOP

3.1 场景模拟

3.2 代理模式

3.3 AOP概念及相关术语

3.4 基于注解的AOP

3.5 基于XML的AOP(了解)


4. 声明式事务

4.1 JdbcTemplate

4.2 声明式事务概念

4.3 基于注解的声明式事务

4.4 基于XML的声明式事务


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

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

相关文章

指针数组与数组指针---傻傻分不清楚?

目录1.指针数组2.数组指针1.指针数组 什么是指针数组呢&#xff1f; 我们通过以前学过的数组进行类比&#xff1a; 整形数组是存放整形的数组字符数组是存放字符的数组所以&#xff0c;指针数组是存放指针(地址)的数组 整形数组的书写形式是int arr[10]&#xff0c;字符指针…

uniapp兼容小程序和H5遇见的坑

目录 一、报错 vue service.requestcomponentinfo:typeerror:cannot read property matches undefined H5不兼容uni-app的image标签 小程序externalClasses不兼容h5 H5不兼容van-picker和van-datetime-picker 一、报错 vue service.requestcomponentinfo:typeerror:cannot r…

【C语言进阶】 一篇带你掌握字符串和内存函数

目录一&#xff1a;strlen模拟实现&#xff1a;二&#xff1a;strcpy模拟实现&#xff1a;三&#xff1a;strcat模拟实现&#xff1a;四&#xff1a;strcmp模拟实现&#xff1a;五&#xff1a;strncpy模拟实现&#xff1a;六&#xff1a;strncat模拟实现&#xff1a;七&#xf…

如何正确地连接PLC与7种设备的输入输出线路

正确地连接输入和输出线路&#xff0c;是保证PLC可靠工作的前提。想要正确地连接PLC与7种设备的输入输出线路&#xff0c;就需注意以下几个方面&#xff1a;1.PLC与主令电器类设备的连接下图是PLC与按钮、行程开关、转换开关等主令电器类输入设备的接线示意图。图中的PLC为直流…

3、运算符

目录 一、算数运算符 二、关系运算符 三、逻辑运算符 一、算数运算符 MATLAB中的算术运算符有加、减、乘、除、点乘、点除等&#xff0c;其运算法则表&#xff1a; 示例1&#xff1a;数值与矩阵的算术运算 Aeye(2)Bones(2)CA*BDA.*B 运行结果&#xff1a; 此外&#xff0…

25.数组指针取*,指针和函数的关系,指针作为函数的参数

数组指针取* 数组指针取*&#xff0c;并不是取值的意思&#xff0c;而是指针的类型发生变化&#xff1b; 一维数组指针取*&#xff0c;结果为它指向的一维数组第0个元素的地址&#xff0c;它们还是指向同一个地方。二维数组指针取*&#xff0c;结果为一维数组指针&#xff0c…

Excel实战 第1章 数据处理

目录1 数据规范2. 导入数据3. 数据清洗3.1 重复数据处理3.2 缺失数据处理3.3 空格数据处理1 数据规范 2. 导入数据 3. 数据清洗 3.1 重复数据处理 数据透视表法&#xff08;首选&#xff09; 选中A、B两列&#xff0c;点击【插入】–》【数据透视表】 把号码拉到【行】&…

LeetCode 207. 课程表

&#x1f308;&#x1f308;&#x1f604;&#x1f604; 欢迎来到茶色岛独家岛屿&#xff0c;本期将为大家揭晓LeetCode 207. 课程表&#xff0c;做好准备了么&#xff0c;那么开始吧。 &#x1f332;&#x1f332;&#x1f434;&#x1f434; 一、题目名称 LeetCode 207. …

图表控件LightningChart.NET 系列教程(六):许可证管理介绍(下)

LightningChart.NET SDK 是一款高性能数据可视化插件工具&#xff0c;由数据可视化软件组件和工具类组成&#xff0c;可支持基于 Windows 的用户界面框架&#xff08;Windows Presentation Foundation&#xff09;、Windows 通用应用平台&#xff08;Universal Windows Platfor…

Docker面试题(史上最全 + 持续更新)

专题37&#xff1a;Docker面试题&#xff08;史上最全、定期更新&#xff09; 本文版本说明&#xff1a;V26 《尼恩面试宝典》升级的规划为&#xff1a; 后续基本上&#xff0c;每一个月&#xff0c;都会发布一次&#xff0c;最新版本&#xff0c;可以联系构师尼恩获取&…

VALL-E:Neural Codec Language Models are Zero-Shot Text to Speech Synthesizers

文章目录NLP中Bert的进展历史word embeddingELMOGPTBertAudioLM: a Language Modeling Approach to Audio Generationabstractintrorelated workVALL-E:Neural Codec Language Models are Zero-Shot Text to Speech Synthesizersabstractspeech quantizationtraining:condition…

程序的机器级表示part2——访问信息

目录 1. 整数寄存器 2. 操作数指示符与寻址模式 3. 数据传送指令 4. 压入和弹出栈数据 1. 整数寄存器 一个x86-64的CPU包含一组16个存储64位值的通用目的寄存器(general-purpose registers) 整型寄存器x86-64的CPU是64位的&#xff0c;因此相应的寄存器长度与机器字长(数据…

基于matlab实现的水果识别系统+源码+代码注释

水果识别 摘要&#xff1a; 本项目针对多种常见水果混合的图像&#xff0c;利用 Matlab 软件&#xff0c;对水果的识别进行研究。根据水果和背景的差别选取阈值&#xff0c;对去噪增强对比度后的图像进行二值化处理。再对图像进行边缘检测&#xff0c;选定连通区域&#xff0…

仅需一个注解,实现springboot项目中的隐私数据脱敏

文章参考&#xff1a; 仅是为了方便查看&#xff0c;因此在此记录一下​​​​​​​ 目录 1. 创建隐私数据类型枚举&#xff1a;PrivacyTypeEnum 2. 创建自定义隐私注解&#xff1a;PrivacyEncrypt 3. 创建自定义序列化器&#xff1a;PrivacySerializer 4. 隐私数据隐藏工…

高德地图开发之地图配置及vue上初始化创建地图

开门见山地说&#xff0c;现如今地图相关的开发业务在工作中越来越常见&#xff0c;目前市面上主流的地图开发还是以百度和高德为主&#xff0c;今天就来讲一下高德地图的配置和在vue上的初始化创建&#xff0c;帮助大家更好更快的了解高德地图开发相关的内容。 一. 注册地图 …

Python协程的四种实现方式

今天继续给大家介绍Python关知识&#xff0c;本文主要内容是Python协程的四种实现方式。 一、yield关键字实现方式 以yield关键字方式实现协程代码如下所示&#xff1a; def fun1():yield 1yield from fun2()yield 2def fun2():yield 3yield 4f1fun1() for item in f1:print…

steam搬砖项目靠谱吗?怎么样?

Steam搬砖’通俗来讲&#xff1a;小白都可以轻松上手&#xff0c;不需要会玩游戏&#xff0c;项目就是利用低价美金充值卡&#xff0c;从国外Steam平台购买CS:GO游戏装备回来&#xff0c;在国内网易BUFF平台售卖&#xff0c;低买高卖&#xff0c;产生利润的一个项目 首先&…

javascript实现版本号自增打包vue写入版本号

文章目录Preface代码方法一&#xff1a;兼容多长版本号。如&#xff1a;1.0.0.0.0.0方法二&#xff1a;只针对3位版本号打包时写入版本号Preface 前段时间出差去帮忙别的项目&#xff0c;项目中有前端更新提醒用户更新。 更新提示是放在了axios请求中。 这个需求是别人做的&…

再学C语言34:数组

数组&#xff08;array&#xff09;由一系列类型相同的元素构成 数组的声明&#xff1a;包括数组元素的数目和元素的类型&#xff0c;编译器根据这些信息创建合数的数组&#xff0c;数组元素可以具有同普通变量一样的类型&#xff1a; int main(void) {int a[5]; // 包含5…

ESP32-C3 迷你智能语音照明

一、概述二、硬件原理图设计三、硬件PCB软件设计四、软件设计五、结构设计六、总结一、概述本设计是使用ESP32-C3芯片&#xff0c;结合TP4057锂电池充电管理芯片、SIQ-02FVS3旋转编码器、离线语音识别模块、无源蜂鸣器、TYPE-C接口设计的一款迷你智能照明产品。功能特点&#x…