Spring 5(黑马)

news2025/6/8 7:03:38

在这里插入图片描述

文章目录

  • 传统JavaWeb开发的困惑
  • IoC、DI和Aop思想提出
  • Spring框架的诞生
    • Spring 框架概述
    • Spring 框架历史
    • Spring Framework技术栈图示
    • BeanFactory 快速入门
    • DI 入门案例
    • ApplicationContext快速入门
    • BeanFactory 和 ApplicationContext的关系
    • BeanFactory 的继承体系
    • ApplicationContext 的继承体系
  • 基于xml的Spring应用
    • SpringBean 的配置详解
  • 基于注解的Spring应用

传统JavaWeb开发的困惑

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

IoC、DI和Aop思想提出

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Spring框架的诞生

Spring 框架概述

在这里插入图片描述

Spring 框架历史

在这里插入图片描述

Spring Framework技术栈图示

在这里插入图片描述

BeanFactory 快速入门

在这里插入图片描述

  1. 导入jar包

        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.3.7</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
  2. 定义UserService、UserDao接口及其各自的实现类

    package com.xxxx.lln.service;
    
    /**
     * UserService接口
     */
    public interface UserService {
        public void print();
    }
    
    
    
    
    
    package com.xxxx.lln.service.serviceImpl;
    
    import com.xxxx.lln.dao.UserDao;
    import com.xxxx.lln.dao.daoImpl.UserDaoImpl;
    import com.xxxx.lln.service.UserService;
    /**
     * UserService接口实现类
     */
    public class UserServiceImpl implements UserService {
        private UserDao userDao = new UserDaoImpl();
        @Override
        public void print() {
            System.out.println("userService...");
            userDao.print();
        }
    }
    
    package com.xxxx.lln.dao;
    
    /**
     * UserDao接口
     */
    public interface UserDao {
    
        public void print();
    
    }
    
    
    
    package com.xxxx.lln.dao.daoImpl;
    
    import com.xxxx.lln.dao.UserDao;
    
    /**
     * UserDao接口实现类
     */
    public class UserDaoImpl implements UserDao {
        @Override
        public void print() {
            System.out.println("userDao...");
        }
    }
    
  3. 配置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 id="userService" class="com.xxxx.lln.service.serviceImpl.UserServiceImpl"></bean>
        <bean id="userDao" class="com.xxxx.lln.dao.daoImpl.UserDaoImpl"></bean>
    
    </beans>
    
  4. 创建BeanFactoryTest,加载配置文件,获取UserService

    package com.xxxx.lln.test;
    
    import com.xxxx.lln.dao.UserDao;
    import com.xxxx.lln.service.UserService;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.support.DefaultListableBeanFactory;
    import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
    
    public class BeanFactoryTest {
    
        @Test
        public void test1() {
    
            //创建工厂对象
            DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
            //创建一个读取器(xml文件)
            XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
            //读取器配置文件给工厂
            reader.loadBeanDefinitions("bean1.xml");
            //根据id获取Bean实例对象
            UserService userService = (UserService) beanFactory.getBean("userService");
            System.out.println(userService);
            userService.print();
            UserDao userDao = (UserDao) beanFactory.getBean("userDao");
            System.out.println(userDao);
            userDao.print();
    
        }
    }
    
    

    在这里插入图片描述

DI 入门案例

Spring的IOC入门案例已经完成,但是在UserServiceImpl的类中依然存在UserDaoImpl对象的new操作,它们之间的耦合度还是比较高,这块该如何解决,就需要用到下面的DI:依赖注入

  1. 删除业务层中使用new的方式创建的dao对象,提供userDao的setter方法

    package com.xxxx.lln.service.serviceImpl;
    
    import com.xxxx.lln.dao.UserDao;
    import com.xxxx.lln.dao.daoImpl.UserDaoImpl;
    import com.xxxx.lln.service.UserService;
    import com.xxxx.lln.test.BeanFactoryTest;
    
    /**
     * UserService接口实现类
     */
    public class UserServiceImpl implements UserService {
    
        //private UserDao userDao = new UserDaoImpl();
        private UserDao userDao;
        public void setUserDao(UserDao userDao){
            System.out.println("BeanFactoryTest调用setUserDao该方法"+userDao);
            this.userDao = userDao;
        }
    
        @Override
        public void print() {
            System.out.println("userService...");
            userDao.print();
        }
    }
    
    
  2. 在配置文件中添加依赖注入的配置

        <bean id="userService" class="com.xxxx.lln.service.serviceImpl.UserServiceImpl">
            <property name="userDao" ref="userDao"></property>
        </bean>
        <bean id="userDao" class="com.xxxx.lln.dao.daoImpl.UserDaoImpl"></bean>
    
  3. 运行程序调用方法
    在这里插入图片描述

ApplicationContext快速入门

在这里插入图片描述

package com.xxxx.lln.test;

import com.xxxx.lln.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ApplicationContextTest {

    @Test
    public void test1() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = (UserService) applicationContext.getBean("userService");
        System.out.println(userService);
    }

}

在这里插入图片描述

BeanFactory 和 ApplicationContext的关系

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

BeanFactory 的继承体系

在这里插入图片描述

ApplicationContext 的继承体系

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

基于xml的Spring应用

在这里插入图片描述

SpringBean 的配置详解

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

基于注解的Spring应用

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

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

相关文章

全志H616——安装SQlite库并使用常用的数据库操作指令

在官网下载安装包&#xff1a;SQLite下载页面、https://www.sqlite.org/2022/sqlite-autoconf-3400100.tar.gz&#xff08;安装包&#xff09;下载到MobaXterm_Personal中解压&#xff1a;tar xvf sqlite-autoconf-3400100.tar.gz设置下载路径&#xff1a;./configure --help:.…

滴滴一面:order by 调优10倍,思路是啥?

背景说明&#xff1a; Mysql调优&#xff0c;是大家日常常见的调优工作。 所以&#xff0c;Mysql调优是一个非常、非常核心的面试知识点。 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;其相关面试题是一个非常、非常高频的交流话题。 近段时间&#xff0c;有小伙伴面…

计算机视觉 吴恩达 week 10 卷积

文章目录一、边缘检测二、填充 padding1、valid convolution2、same convolution三、卷积步长 strided convolution四、三维卷积五、池化层 pooling六、 为什么要使用卷积神经网络一、边缘检测 可以通过卷积操作来进行 原图像 n✖n 卷积核 f✖f 则输出的图像为 n-f1 二、填充…

【软考】系统集成项目管理工程师(二十)项目风险管理

一、项目风险管理概述1. 风险概念2. 风险分类3. 风险成本二、项目风险管理子过程1. 规划风险管理2. 识别风险3. 实施定性风险分析4. 实施定量风险分析5. 规划风险应对6. 控制风险三、项目风险管理流程梳理一、项目风险管理概述 1. 风险概念 风险是一种不确定事件或条件,一旦…

java赫夫曼编码

1.基本介绍 赫夫曼编码也翻译为 哈夫曼编码(Huffman Coding)&#xff0c;又称霍夫曼编码&#xff0c;是一种编码方式, 属于一种程序算法赫夫曼编码是赫哈夫曼树在电讯通信中的经典的应用之一。赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在 20%&#xff5e;90%之间赫夫曼…

[Android]网络框架之Retrofit(kotlin)

目录 Retrofit简介 Retrofit基本使用 Retrofit的注解 Retrofit的转换器 文件的上传与下载 Retrofit简介 Retrofit是一款由Square公司开发的网络库&#xff0c;但是它和OkHttp的定位完全不同。 OkHttp侧重的是底层通信的实现&#xff0c;而Retrofit侧重的是上层接口的封装…

永磁同步电机中BEMF电阻的作用

一、电路原理图 二、原理分析 如图一我们测的是相电压&#xff0c;从理论上我们知道我们测得相电压是一个马鞍波形&#xff0c;马鞍波形中并没有隐含 转子的位置和速度信息。那么为什么我们还要有这样一个电路呢&#xff1f; 这个问题其实困惑了我好久&#xff1f;直到有一天…

曹云金对德云社最大的贡献,就是促进了薪酬体系改革

虽然曹云金已经离开德云社&#xff0c;但是关于他和德云社的话题&#xff0c;却从来没有间断过&#xff0c;尤其是他和小岳岳的对比&#xff0c;更是很有争议的一个话题。实话实说&#xff0c;曹云金在德云社的这些年&#xff0c;对这个这个民间相声社团发展&#xff0c;还是做…

Docker实战

目录一、FROM 语法二、label语法三、run语法四、workdir 语法五、add 和copy 语法六、ENV语法七、volume 和expose 语法八、run、cmd 和entrypoint一、FROM 语法scratch -- 从头开始尽量来使用官方提供的imageFROM 指定基础镜像&#xff0c;最好挑一些apline&#xff0c;slim之…

Qml学习——控件状态

最近在学习Qml&#xff0c;但对Qml的各种用法都不太熟悉&#xff0c;总是会搞忘&#xff0c;所以写几篇文章对学习过程中的遇到的东西做一个记录。 学习参考视频&#xff1a;https://www.bilibili.com/video/BV1Ay4y1W7xd?p1&vd_source0b527ff208c63f0b1150450fd7023fd8 其…

Apache安全加固配置教程(小白篇)

Apache安全加固配置教程(小白篇) 资源宝分享&#xff1a;www.httple.net 一&#xff0c;Apache服务器的介绍 Apache服务器它是Internet网上应用最为广泛的Web服务器软件之一。Apache服务器源自美国国家超级技术计算应用中心&#xff08;NCSA&#xff09;的 Web服务器项目中。目…

SAS应用入门学习笔记3

操作数据集的观测&#xff1a; Eg. 修改变量值等 变量的值取出来&#xff0c;那么我们需要对变量的值进行修改 weight height bmi? Missing 用到条件语if then、赋值语句、表达式 等。 表达式是操作数和操作符的序列。 例如&#xff1a;3 x x1 1、操作数&#xff1a;…

每日学术速递2.9

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV、cs.AI、cs.LG、cs.IR 1.Graph Signal Sampling for Inductive One-Bit Matrix Completion: a Closed-form Solution(ICLR 2023) 标题&#xff1a;归纳单比特矩阵完成的图信号采样&am…

程序员该不该在年后跳槽?3个问句给你答案

过完春节&#xff0c;2023年也迎来了第二个月份&#xff0c;有些程序员虽然还在公司上班&#xff0c;但是私底下跳槽的心蠢蠢欲动&#xff0c;简历说不定都改到第三版了。 在各大社交平台上&#xff0c;经常能看到不少程序员分享自己的跳槽经历&#xff0c;尤其是春节后更是如…

13薪|运营策划[北京市 - 海淀区]-10k-15k

"众推职聘”以交付结果为宗旨的全流程化招聘服务平台&#xff01;今日招聘信息↓【工作内容】1、根据项目要求&#xff0c;收集相关数据&#xff0c;策划撰写项目运营方案&#xff1b;2、运营合作环节中&#xff0c;监督管理执行&#xff1b;3、参与项目的评估&#xff1b…

WorkTool无障碍服务实现企业微信机器人接口

前言 想要实现一个企业微信机器人&#xff0c;如京东/拼多多福利群、美团瑞幸定时营销群、自助订单查询、智能咨询或社群管理机器人等&#xff0c;首先官方未提供外部群/客户群的机器人API&#xff0c;会话存档也只在一定场景下适用&#xff0c;及时使用会话存档也存在只能收不…

56 门控循环单元(GRU)【动手学深度学习v2】

56 门控循环单元&#xff08;GRU&#xff09;【动手学深度学习v2】 深度学习学习笔记 学习视频&#xff1a;https://www.bilibili.com/video/BV1mf4y157N2/?spm_id_fromautoNext&vd_source75dce036dc8244310435eaf03de4e330 门控循环单元GRU GRU和LSTM 实际上效果差不多。…

030_SSS_MaskSketch Unpaired Structure-guided Masked Image Generation

MaskSketch: Unpaired Structure-guided Masked Image Generation 1. Introduction 本文在MaskGIT的基础上进行了改进&#xff0c;提出了MaskSketch用于sketch-to-photo。MaskSketch直接使用预训练好的MaskGIT&#xff0c;不需要进行模型的训练&#xff0c;而且不需要成对的监…

29 - 面向对象的三大特征 - 多态

目录 一、理解多态 1、概念 2、使用场景 3、特点 二、多态案例1 1、需求 2、代码实现 一、理解多态 1、概念 不同的子类对象调用相同的父类方法&#xff0c;产生不同的执行结果2、使用场景 以继承和重写父类方法为前提是调用方法的技巧&#xff0c;不会影响到类的内部设计3、特…

Kubernetes那点事儿——健康检查

K8s应用程序生命周期管理——健康检查前言一、重启策略二、健康检查三、健康监控方式前言 官网&#xff1a;https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-readiness-probes 一、重启策略 Always&a…