spring学习小笔记

news2024/11/14 2:29:24

spring学习小笔记(1)

  • 一、Spring开发
    • 1.1 Spring简介
    • 1.2 Spring Framework系统架构
    • 1.3 Spring Framework学习路线
    • 1.4 Spring Farmework核心概念
    • 1.5 Spring入门
  • 二、Bean的基础配置
    • 2.1 Bean的别名配置
    • 2.2 Bean的作用范围
    • 2.3 Bean的实例化
      • 2.3.1 构造方法实例化bean
      • 2.3.2 静态工厂实现实列化bean
    • 2.3.3 利用实例化工厂实例bean
    • 2.4 Bean的生命周期

一、Spring开发

1.1 Spring简介

  1. Spring官网
  2. Spring:他就是一个技术的全家桶,含有许多的技术

1.2 Spring Framework系统架构

Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基
在这里插入图片描述
详细介绍:

在这里插入图片描述

1.3 Spring Framework学习路线

在这里插入图片描述

1.4 Spring Farmework核心概念

  • IOC:控制反转
    • 适用对象的的时候,由主动new产生对象产生由外部提供对象,在这个创建的过程当中对象的创建控制权由程序转变为外部,这样就被称为控制反转
  • Spring技术对IOC思想进行了实现
    • Spring创建了一个IOC容器–>充当IOC思想的外部
    • IOC负责对象的创建、初始化等工作,被管理或者被创建的对象在IOC当中就叫做Bean
  • DI :依赖注入
    • 如果一个Bean与另外一个Bean存在依赖的关系,那么容器就会自动的将其绑定依赖关系,这一个过程就叫做依赖注入
      在这里插入图片描述

1.5 Spring入门

1. 导入Spring坐标

 <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>

2. 定义Spring管理类(接口)

public class BookServiceImpl implements BookService {
    private final BookDao bookDao = new BookDaoImpl();
    @Override
    public void save() {
        System.out.println("save Service !!!!!");
        bookDao.save();
    }
}
package com.huanglei.Service;

public interface BookService {
    public void save();
}

3. 创建Spring配置文件 ,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 id="BookDao" class="com.huanglei.dao.impl.BookDaoImpl"/>
    <bean id="BookService" class="com.huanglei.Service.impl.BookServiceImpl" />
</beans>

4. 初始化IOC容器(获取容器),通过容器获取到Bean

public class App1 {
    public static void main(String[] args) {
        //首先获取到IOC容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

        //获取到Bean
         BookDao  bookDao = (BookDao) applicationContext.getBean("BookDao");
         bookDao.save();

        BookService bookService = (BookService) applicationContext.getBean("BookService");
        bookService.save();
    }
}

将上述的全部利用new的方式进行替换

  1. 定义Spring管理类(接口)
public class BookServiceImpl implements BookService {
    private  BookDao bookDao ;

    @Override
    public void save() {
        System.out.println("save Service !!!!!");
        bookDao.save();
    }

    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}
  1. 创建Spring配置文件 ,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 id="BookDao" class="com.huanglei.dao.impl.BookDaoImpl"/>
    <!--
        property标签表示配置当前Bean的属性
        name:表示配置的哪一个具体的属性
        ref:表示参照的哪一个Bean,表示的为哪一个Bean的id
    -->
    <bean id="BookService" class="com.huanglei.Service.impl.BookServiceImpl">
        <property name="bookDao" ref="BookDao"/>
    </bean>
</beans>

二、Bean的基础配置

2.1 Bean的别名配置

可以创建多个命名
在这里插入图片描述

2.2 Bean的作用范围

创建的是单一Bean,还是多个Bean

类别描述
名称scope
类型属性
所属bean标签
功能定义bean的作用范围,可选范围如下: singleton:单例(默认)prototype :非单例
范例<bean id="bookDao"class="com.itheima.dao.impl.BookDaoImpl" scope="prototype"/>

2.3 Bean的实例化

bean本质上就是对象,创建bean使用构造方法完成

2.3.1 构造方法实例化bean

提供可访问的构造方法:

public BookDaoImpl(){
        System.out.println("BookDao servicing !!!!");
    }

配置条件:

 <bean id="BookDao" class="com.huanglei.dao.impl.BookDaoImpl"/>

Bean创建的方法是通过其调用该类的误餐构造方法来达到创建效果的,若没有无参构造就会报错BeanCreationException

2.3.2 静态工厂实现实列化bean

静态工厂:

public class OrderDaoFactory {
    public static OrderFactory getOrderFactory(){
        return new OrderFactoryImpl();
    }
}

public interface OrderFactory {
    public  void save();
}

public class OrderFactoryImpl implements OrderFactory {
    @Override
    public void save() {
        System.out.println("orderFactory save!!!");
    }
}

配置方法:

<bean id="OrderFactory" class="com.huanglei.Factory.OrderDaoFactory" factory-method="getOrderFactory"/>

2.3.3 利用实例化工厂实例bean

静态工厂:

public class OrderDaoFactory {
    public  OrderFactory getOrderFactory(){
        return new OrderFactoryImpl();
    }
}

public interface OrderFactory {
    public  void save();
}

public class OrderFactoryImpl implements OrderFactory {
    @Override
    public void save() {
        System.out.println("orderFactory save!!!");
    }
}

在这里插入图片描述

  • 改进方法

调用接口:

public class OrderDaoFactoryBean implements FactoryBean<OrderFactory> {
    /*
    * 代替实例化对象的创建对象
    * */
    @Override
    public OrderFactory getObject() throws Exception {
        return new OrderFactoryImpl();
    }
    /*
    * 创建的类型
    * */
    @Override
    public Class<?> getObjectType() {
        return OrderFactory.class;
    }

    /*
    * 这里来设置是否为单例对象
    * true:单
    * false:非单
    * */
    @Override
    public boolean isSingleton() {
        return false;
    }

配置文件:

 <bean id="OrderFactory" class="com.huanglei.Factory.OrderDaoFactoryBean"/>

2.4 Bean的生命周期

  • 初始化容器
    • 创建对象(内存分配)
    • 执行构造方法
    • 执行属性注入 ( set操作)
    • 执行bean初始化方法
  • 使用bean
    • 执行业务操作
  • 关闭/销毁容器
    • 执行bean销毁方法

生命周期控制方法:

  1. 利用配置文件进行操作
 <bean id="OrderFactory" class="com.huanglei.Factory.OrderDaoFactoryBean" init-method="init" destroy-method="destroy"/>

文件方法:

public class OrderDaoFactoryBean implements FactoryBean<OrderFactory>, InitializingBean, DisposableBean {
    /*
    * 代替实例化对象的创建对象
    * */
    @Override
    public OrderFactory getObject() throws Exception {
        return new OrderFactoryImpl();
    }
    /*
    * 创建的类型
    * */
    @Override
    public Class<?> getObjectType() {
        return OrderFactory.class;
    }

    /*
    * 这里来设置是否为单例对象
    * true:单
    * false:非单
    * */
    @Override
    public boolean isSingleton() {
        return false;
    }

    public void init(){
        System.out.println("init…………");
    }

    public void destroy(){
        System.out.println("destroy…………");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("等到属性设置设置完后才执行这个方法");
    }
}

关闭容器的方法:

  • 手动关闭容器
 //通过close进行关闭
        classPathXmlApplicationContext.close();
  • 注册关闭钩子进行关闭,在虚拟机退出前关闭容器
//调用钩子的方法关闭bean
classPathXmlApplicationContext.registerShutdownHook();

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

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

相关文章

本地vscode安装GPU版本PyTorch

操作系统 windows, IDE环境vscode&#xff0c;本地GPU 可以新建一个jupyter文件&#xff0c;运行一些测试代码 确保装好显卡驱动 在底下调出终端窗口&#xff0c;默认是power shell&#xff0c;我喜欢用cmd窗口 激活自己的虚拟环境&#xff0c;输入命令 nvidia-smi 确保自己…

ctfshow-web12(glob绕过)

打开链接&#xff0c;在网页源码里找到提示 要求以get请求方式给cmd传入参数 尝试直接调用系统命令&#xff0c;没有回显&#xff0c;可能被过滤了 测试phpinfo&#xff0c;回显成功&#xff0c;确实存在了代码执行 接下来我们尝试读取一下它存在的文件&#xff0c;这里主要介…

E. Li Hua and Array

Problem - E - Codeforces 思路&#xff1a;观察给定的函数&#xff0c;其实就是求与这个数互质的数的个数&#xff0c;即欧拉函数&#xff0c;我们发现一个数迭代欧拉函数不会很多&#xff0c;那么对于第一个操作来说我们可以直接暴力修改&#xff0c;而对于第二个操作来说&am…

软件测试/测试开发丨为什么接口自动化测试是提升职业技能的关键?

接口测试背景和必要性 接口测试是测试系统组件间接口&#xff08;API&#xff09;的一种测试&#xff0c;主要用于检测内部与外部系统、内部子系统之间的交互质量&#xff0c;其测试重点是检查数据交换、传递的准确性&#xff0c;控制和交互管理过程&#xff0c;以及系统间相互…

ElementPlus Switch 开关基础使用

昨天开发用到开关组件 后台返回字段是 can_write 默认是0 or 1 但是Switch 组件绑定的默认值默认是 true or false 直接绑定会导致默认是关闭状态 在页面一加载 值发生变化时 会自己调用 查了文档 需要使用 active-value 和 inactive-value 来指定绑定的数据类型 …

C#,工业化软件与院校软件的对比及编程语言的选择建议

飞机发动之之一&#xff0c;涡轮喷气航空发动机&#xff08;JET ENGINE&#xff09; 火箭发动机之一&#xff0c;俄罗斯RD-180煤油和液氧发动机&#xff08;ROCKET ENGINE&#xff09; 1 飞机发动机与火箭发动机的简明对比 2 工业软件与院校软件的简单对比 除了以上类似的对比…

【java学习】方法的参数传递(21)

文章目录 相关概念1. 方法传递之基本数据类型2. 方法的参数传递之引用对象3. 总结 相关概念 方法&#xff0c;必须有其所在类或对象调用才有意义。若方法含有参数&#xff1a; 形参&#xff1a;方法声明时的参数 实参&#xff1a;方法调用时实际传给形参的参数值 问题&#xf…

数据建模设计

数据库系统——建模与设计 一、数据建模 数据库的设计不仅需要处理规则的理解&#xff0c;更重要的是数据需求的理解与表达。 表达计算机世界的模型称为数据模型&#xff0c;而表达信息世界的模型称为概念模型。抽象是具有层次的&#xff0c;将现实世界的问题抽象成概念模型…

[ValueError: not enough values to unpack (expected 3, got 2)]

项目场景&#xff1a; 在使用opencv进行关键点识别、边缘轮廓提取的时候&#xff0c;提示以上错误。 import cv2 import numpy as npdef preprocess(image):# 进行图像预处理&#xff08;例如灰度化、高斯模糊等&#xff09;gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)blu…

Vuex的使用,详细易懂

目录 一.前言 二.Vuex的简介 三.vuex的使用 3.1 安装Vuex 3.2 使用Vuex的步骤&#xff1a; 四.vuex的存值取值&#xff08;改变值&#xff09; 五.vuex的异步请求 好啦&#xff0c;今天的分享就到这啦&#xff01;&#xff01;&#xff01; 一.前言 今天我们继续前面的E…

openGauss Meetup(天津站.10月13日),欢迎报名

由openGauss社区、天开发展集团、天津市软件行业协会、天大智图&#xff08;科技&#xff09;有限公司联合主办,天津鲲鹏生态创新中心、天津市计算机学会、天津市人工智能学会、天津市系统集成协会、麒麟软件有限公司、天津南大通用数据技术股份有限公司、AI知学社协办的“open…

【Vuex+ElementUI】Vuex中取值存值以及异步加载的使用

一、导言 1、引言 Vuex是一个用于Vue.js应用程序的状态管理模式和库。它建立在Vue.js的响应式系统之上&#xff0c;提供了一种集中管理应用程序状态的方式。使用Vuex&#xff0c;您可以将应用程序的状态存储在一个单一的位置&#xff08;即“存储”&#xff09;中&#xff0c;…

北斗高精度定位为无人车成为机场运营新常态提供技术保障

在现代快节奏的生活中&#xff0c;人们对交通效率和安全性的需求越来越高。为了满足这一需求&#xff0c;无人驾驶技术被广泛研究和应用。而随着北斗卫星系统的发展&#xff0c;机场无人车正成为潜在的未来运输解决方案。本文将深入探讨北斗卫星如何改变机场运营&#xff0c;以…

Vega Prime入门教程14.01:调用VAPS XT DLL

本文首发于&#xff1a;Vega Prime入门教程14.01&#xff1a;调用VAPS XT DLL 在VAPS XT系列教程中提到过Vega Prime可以直接调用Drawing Integration生成的dll&#xff0c;本文来测试这个功能效果。 本系列使用的是VP18.0&#xff0c;使用的是VC14.0&#xff08;VS2015&…

java装箱和拆箱

package daysreplace;import com.sun.jdi.IntegerValue;import java.util.Arrays;public class Test {public static void main(String[] args) {//装箱&#xff1a;自动将基本数据类型转成包装类 基本数据类型->包装类型//拆箱&#xff1a;自动将包装类转成基本数据类型 包…

【LeetCode:2512. 奖励最顶尖的 K 名学生 | 模拟+哈希表+堆】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

练[GYCTF2020]EasyThinking

[GYCTF2020]EasyThinking 文章目录 [GYCTF2020]EasyThinking掌握知识解题思路还得靠大佬正式开始 关键paylaod 掌握知识 ​ thinkphpV6任意文件操作漏洞&#xff0c;代码分析写入session文件的参数&#xff0c;源码泄露&#xff0c;使用蚁剑插件disable_functions绕过终端无回…

Android Native 开发 要点实录

Android Studio 中写 C 代码 android studio创建C项目_android studio native c-CSDN博客 项目配置参考 【CMake】CMakeLists.txt的超傻瓜手把手教程&#xff08;附实例源码&#xff09;_【cmake】cmakelists.txt的超傻瓜手把手教程(附实例源码)-CSDN博客 CMakeLists.txt 讲解…

一文区分路由策略和策略路由!

一、路由策略 在复杂的数据通信网络中&#xff0c;根据实际组网需求&#xff0c;往往需要实施一些路由策略对路由信息进行过滤、属性设置等操作&#xff0c;通过对路由的控制&#xff0c;可以影响数据流量转发。路由策略并非单一的技术或者协议&#xff0c;而是一个技术专题或…

MongoDB——centOS7环境Mongodb权限管理(图解版)

目录 一、MongDB权限概述1.1、MongDB权限概述1.2、MongDB权限列表 二、Mongodb权限管理示例2.1、创建账号2.1.1、创建管理员用户2.1.2、开启认证2.1.3、创建普通账号 一、MongDB权限概述 1.1、MongDB权限概述 mongodb是没有默认管理员账号&#xff0c;所以要先添加管理员账号…