Spring核心概念、IoC和DI的认识、Spring中bean的配置及实例化、bean的生命周期

news2024/9/21 2:36:07

初始Spring

  • 一、Spring核心概念
    • 1.1IoC(Inversion of Contral):控制反转
    • 1.2IoC代码实现
    • 1.2DI代码实现
  • 二、bean的相关操作
    • 2.1bean的配置
      • 2.1.1bean的基础配置
      • 2.1.2bean的别名配置
      • 2.1.3bean的作用范围配置
    • 2.2bean的实例化 - - 构造方法
    • 2.3bean的实例化 - - 实例工厂与FactoryBean
    • 2.4bean的生命周期
  • 总结

一、Spring核心概念

1.1IoC(Inversion of Contral):控制反转

  • 代码书写现状
    • 耦合度偏高
  • 解决方案
    • 使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象

  • IoC(Inversion of Contral):控制反转
    • 对象的创建控制权由程序转移到外部,这种思想称为控制反转
  • Spring技术对IoC思想进行了实现
    • Spring提供了一个容器,称为IoC容器,用来充当IoC思想中的“外部
    • IoC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为Bean
  • DI(Dependency Injection)依赖注入
    • 在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入

1.2IoC代码实现

  • 1.导入Spring坐标
<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-context</artifactId>
     <version>5.2.21.RELEASE</version>
</dependency>
  • 2.定义Spring管理类
package com.practice.dao;

/**
 * @Author YJ
 * @Date 2023/7/25 11:26
 * Description:
 */
public interface BookDao {
    void save();
}

package com.practice.service;

/**
 * @Author YJ
 * @Date 2023/7/25 11:28
 * Description:
 */
public interface BookService {
    void save();
}

package com.practice.service.impl;

import com.practice.dao.BookDao;
import com.practice.dao.impl.BookDaoImpl;
import com.practice.service.BookService;

/**
 * @Author YJ
 * @Date 2023/7/25 11:28
 * Description:
 */
public class BookServiceImpl implements BookService {
    private BookDao bookDao = new BookDaoImpl();
    public void save() {
        bookDao.save();
    }
}

  • 3.创建Spring配置文件applicationContext.xml,配置对应类作为Spring管理的bean
<?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">
    <!--1.导入spring的坐标spring-context,对应的版本号是5.2.21.RELEASE-->
    <!--2.配置bean-->
    <bean id="bookDao" class="com.practice.dao.impl.BookDaoImpl"/>
    <bean id="bookService" class="com.practice.service.impl.BookServiceImpl"/>
</beans>
  • 4.初始化IoC容器(Spring核心容器/Spring容器),通过容器获取bean
public class App {
    public static void main(String[] args) {
        //获取IoC容器
        ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取bean
        /*BookDao bookDao = (BookDao) act.getBean("bookDao");
        bookDao.save();*/
        BookService bookService = (BookService) act.getBean("bookService");
        bookService.save();

    }
}

在这里插入图片描述

1.2DI代码实现

  • 1.删除业务层中使用new的方式创建的dao对象
  • 2.提供对应的setter方法
  • 3.配置service与dao的关系
    • property标签表示配置当前bean的属性
    • name属性表示配置哪一个具体的属性
    • ref属性表示参照哪一个bean
package com.practice.service.impl;

import com.practice.dao.BookDao;
import com.practice.service.BookService;

public class BookServiceImpl implements BookService {
    //删除业务层中使用new的方式创建的dao对象
    private BookDao bookDao;

    public void save() {
        bookDao.save();
    }

    //提供对应的set方法
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}
<?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">
    <!--1.导入spring的坐标spring-context,对应的版本号是5.2.21.RELEASE-->
    <!--2.配置bean-->
    <bean id="bookDao" class="com.practice.dao.impl.BookDaoImpl"/>
    <bean id="bookService" class="com.practice.service.impl.BookServiceImpl">
        <!--配置service与dao的关系-->
        <!--property标签表示配置当前bean的属性-->
        <!--name属性表示配置哪一个具体的属性-->
        <!--ref属性表示参照哪一个bean-->
        <property name="bookDao" ref="bookDao"/>

    </bean>
</beans>

在这里插入图片描述

二、bean的相关操作

2.1bean的配置

2.1.1bean的基础配置

  • 1.功能: 定义Spring核心容器管理的对象
  • 2.格式:
<beans>
	<bean/>
	<bean></bean>
</beans>
  • 3.属性:
    • 3.1id: bean的id,使用容器可以通过id值获取对应的bean,在一个容器中id值唯一
    • 3.2class: bean的类型,即配置的bean的全路径类名

2.1.2bean的别名配置

  • 别名配置就是在bean标签中添加一个name属性,这个name属性就是bean的别名,可以有多个别名中间用逗号、空格或分号隔开即可
<?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">
    <!--1.导入spring的坐标spring-context,对应的版本号是5.2.21.RELEASE-->
    <!--2.配置bean-->
    <bean id="bookDao" class="com.practice.dao.impl.BookDaoImpl"/>
    <!--name起别名-->
    <bean id="bookService" name="service" class="com.practice.service.impl.BookServiceImpl">
        <!--配置service与dao的关系-->
        <!--property标签表示配置当前bean的属性-->
        <!--name属性表示配置哪一个具体的属性-->
        <!--ref属性表示参照哪一个bean-->
        <property name="bookDao" ref="bookDao"/>

    </bean>
</beans>
package com.practice;

import com.practice.dao.BookDao;
import com.practice.service.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @Author YJ
 * @Date 2023/7/25 11:33
 * Description:
 */
public class App {
    public static void main(String[] args) {
        //获取IoC容器
        ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取bean
        /*BookDao bookDao = (BookDao) act.getBean("bookDao");
        bookDao.save();*/
        BookService bookService = (BookService) act.getBean("service");//用到别名service
        bookService.save();

    }
}

在这里插入图片描述

  • 若是bean的名称跟配置的不一致会出现NoSuchBeanDefinitionException异常,表示该bean未定义
public class App {
    public static void main(String[] args) {
        //获取IoC容器
        ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取bean
        /*BookDao bookDao = (BookDao) act.getBean("bookDao");
        bookDao.save();*/
        BookService bookService = (BookService) act.getBean("service1");//用到错误别名service1
        bookService.save();

    }
}

在这里插入图片描述

2.1.3bean的作用范围配置

  • Spring默认配置的bean是一个单列的,即只有一个bean对象,如下所示:
public class AppForScope {
    public static void main(String[] args) {
        //获取IoC容器
        ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");
        BookDao bookDao1 = (BookDao) act.getBean("bookDao");
        BookDao bookDao2 = (BookDao) act.getBean("bookDao");
        System.out.println(bookDao1);
        System.out.println(bookDao2);
    }
}

在这里插入图片描述


  • 我们可以通过配置bean的文件控制是否产生一个对象还是多个对象
  • 通过scope属性定义bean的作用范围,可选范围如下:
    • singleton:单例(默认)
    • prototype:非单例

在这里插入图片描述


在这里插入图片描述


  • 适合交给容器进行管理的bean
    • 表现层对象
    • 业务层对象
    • 数据层对象
    • 工具对象
  • 不适合交给容器进行管理的bean
    • 封装实体的域对象

2.2bean的实例化 - - 构造方法

  • bean本质上就是对象,创建bean使用构造方法完成
public class BookDaoImpl implements BookDao {
    private BookDaoImpl() {
        System.out.println("book dao constructor running...");
    }
    public void save() {
        System.out.println("bookDao save~");
    }
}
public class App {
    public static void main(String[] args) {
        //获取IoC容器
        ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取bean
        BookDao bookDao = (BookDao) act.getBean("bookDao");
        bookDao.save();
        

    }
}
<?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">
    <!--1.导入spring的坐标spring-context,对应的版本号是5.2.21.RELEASE-->
    <!--2.配置bean-->
    <bean id="bookDao" class="com.practice.dao.impl.BookDaoImpl" scope="prototype"/>
    <!--name起别名-->
    <bean id="bookService" name="service" class="com.practice.service.impl.BookServiceImpl" >
        <!--配置service与dao的关系-->
        <!--property标签表示配置当前bean的属性-->
        <!--name属性表示配置哪一个具体的属性-->
        <!--ref属性表示参照哪一个bean-->
        <property name="bookDao" ref="bookDao"/>

    </bean>
</beans>

在这里插入图片描述

  • 表明bean在创建时调用的无参构造方法
  • 无参构造方法如果不存在,会抛出BeanCreationException异常

2.3bean的实例化 - - 实例工厂与FactoryBean

<?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">
    <!--1.导入spring的坐标spring-context,对应的版本号是5.2.21.RELEASE-->
    <!--2.配置bean-->
    <!--方式三:使用实例化工厂实例化bean-->
    <bean id="userFactory" class="com.practice.factory.UserDaoFactory"/>
    <bean id="userDao" factory-bean="userFactory" factory-method="getUserDao"/>
</beans>
public interface UserDao {
    public void save();
}
public class UserDaoImpl implements UserDao {
    public void save() {
        System.out.println("UserDao save...");
    }
}
public class UserDaoFactory {
    public UserDao getUserDao(){
        return new UserDaoImpl();
    }
}

package com.practice;

import com.practice.dao.UserDao;
import com.practice.factory.UserDaoFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @Author YJ
 * @Date 2023/7/25 19:09
 * Description:
 */
public class AppForInstanceUser {
    public static void main(String[] args) {
        /*//创建实例工厂对象
        UserDaoFactory userDaoFactory = new UserDaoFactory();
        UserDao userDao = userDaoFactory.getUserDao();
        userDao.save();*/
        //获取IoC容器
        ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取bean
        UserDao userDao = (UserDao) act.getBean("userDao");
        userDao.save();

    }
}

在这里插入图片描述

  • 使用FactoryBean实例化bean
package com.practice.factory;

import com.practice.dao.UserDao;
import com.practice.dao.impl.UserDaoImpl;
import org.springframework.beans.factory.FactoryBean;

/**
 * @Author YJ
 * @Date 2023/7/25 19:21
 * Description:使用FactoryBean实例化bean
 */
public class UserDaoFactoryBean implements FactoryBean<UserDao> {

    public UserDao getObject() throws Exception {
        //代替原始实例工厂中创建对象的方法
        return new UserDaoImpl();
    }

    public Class<?> getObjectType() {
        return UserDao.class;
    }
}

<?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 id="userFactory" class="com.practice.factory.UserDaoFactory"/>
    <bean id="userDao1" factory-bean="userFactory" factory-method="getUserDao"/>
    <!--方式四:使用FactoryBean实例化bean-->
    <bean id="userDao" class="com.practice.factory.UserDaoFactoryBean"/>

</beans>

在这里插入图片描述

  • 使用这种方式创建出的bean是单例的
    在这里插入图片描述
  • 可在UserDaoFactoryBean中实现方法isSingleton并返回false即可
public boolean isSingleton() {
        return false;
    }

在这里插入图片描述

2.4bean的生命周期

  • 生命周期:从创建到消亡的完整过程
  • bean生命周期:bean从创建到消毁的整体过程
  • bean生命周期控制:在bean创建后到销毁前做一些事情
package com.practice.dao.impl;

import com.practice.dao.BookDao;

/**
 * @Author YJ
 * @Date 2023/7/25 11:24
 * Description:
 */
public class BookDaoImpl1 implements BookDao {
    public void save() {
        System.out.println("bookDao save~");
    }
    //表示bean初始化
    public void init() {
        System.out.println("init...");
    }
    //表示bean销毁前对应操作
    public void destroy() {
        System.out.println("destroy...");
    }
}

<?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 id="userFactory" class="com.practice.factory.UserDaoFactory"/>-->
    <!--<bean id="userDao1" factory-bean="userFactory" factory-method="getUserDao"/>-->
    <!--方式四:使用FactoryBean实例化bean-->
    <!--<bean id="userDao" class="com.practice.factory.UserDaoFactoryBean"/>-->
    <!--配置bean的生命周期-->
    <bean id="bookDao" class="com.practice.dao.impl.BookDaoImpl1" init-method="init" destroy-method="destroy"/>
</beans>
package com.practice;

import com.practice.dao.BookDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @Author YJ
 * @Date 2023/7/25 19:40
 * Description:
 */
public class AppForLifeCycle {
    public static void main(String[] args) {
        //获取IoC容器
        ClassPathXmlApplicationContextact = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取bean
        BookDao bookDao = (BookDao) act.getBean("bookDao");
        bookDao.save();
        //关闭容器,才能看到destory方法的执行结果
        //1.暴力关闭
        act.close();
        //2.关闭钩子
        act.registerShutdownHook();

    }
}

在这里插入图片描述

package com.practice.service.impl;

import com.practice.dao.BookDao;
import com.practice.dao.impl.BookDaoImpl1;
import com.practice.service.BookService;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

/**
 * @Author YJ
 * @Date 2023/7/25 11:28
 * Description:
 */
public class BookServiceImpl1 implements BookService, InitializingBean, DisposableBean {
    private BookDao bookDao;
    public void save() {
        System.out.println("bookService save...");
        bookDao.save();
    }

    public void afterPropertiesSet() throws Exception {
        System.out.println("service init...");
    }

    public void destroy() throws Exception {
        System.out.println("service destroy...");
    }

    public void setBookDao(BookDaoImpl1 bookDao) {
        this.bookDao=bookDao;
    }
}

package com.practice;

import com.practice.dao.BookDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @Author YJ
 * @Date 2023/7/25 19:40
 * Description:
 */
public class AppForLifeCycle {
    public static void main(String[] args) {
        //获取IoC容器
        ClassPathXmlApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取bean
        BookDao bookDao = (BookDao) act.getBean("bookDao");
        bookDao.save();
        //act.close();
        act.registerShutdownHook();

    }
}

<?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 id="userFactory" class="com.practice.factory.UserDaoFactory"/>-->
    <!--<bean id="userDao1" factory-bean="userFactory" factory-method="getUserDao"/>-->
    <!--方式四:使用FactoryBean实例化bean-->
    <!--<bean id="userDao" class="com.practice.factory.UserDaoFactoryBean"/>-->
    <!--配置bean的生命周期-->
    <bean id="bookDao" class="com.practice.dao.impl.BookDaoImpl1" init-method="init" destroy-method="destroy"/>
    <bean id="bookService" class="com.practice.service.impl.BookServiceImpl1">
        <property name="bookDao" ref="bookDao"/>
    </bean>
</beans>

总结

关于Spring的初步认识我们就学到这里了,关于bean的操作我们有了基本的认识,欢迎各位小伙伴点赞+关注!!!

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

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

相关文章

windows中注册redis服务启动时报1067错误

注册完redis服务&#xff0c;打开计算机 服务时确实有redis服务存在&#xff0c;但是点击启动时却报1067错误&#xff0c;而命令行用redis-server.exe redis.windows.conf 命令却也可以启动 查看6379的端口也没有被占用&#xff08;netstat -ano | findstr :6379&#xff09; …

【LeetCode】98.验证二叉搜索树

题目 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1&#xff1a…

怎么在树莓派上搭建web网站,并发布到外网可访问?

文章目录 怎么在树莓派上搭建web网站&#xff0c;并发布到外网可访问&#xff1f;概述使用 Raspberry Pi Imager 安装 Raspberry Pi OS测试 web 站点安装静态样例站点 将web站点发布到公网安装 Cpolarcpolar进行token认证生成cpolar随机域名网址生成cpolar二级子域名将参数保存…

servlet基本使用

1.创建web项目&#xff08;新版本idea中首先新创建新项目&#xff0c;再在新项目中选中添加框架支持&#xff0c;即可生成web项目&#xff09; 2.接下来我们可以来编写代码&#xff0c;我们在源文件下创建包后再创键类 我们想要利用servlet&#xff0c;可以通过三种方式来实现 …

Mybatis 支持复杂类型方式List<String>

设置 autoResultMap true TableField(value "enums", typeHandler JacksonTypeHandler.class) <id column"enums" property"enums" typeHandler"com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />

Appium+python自动化(二十六)- Toast提示(超详解)简介

开始今天的主题 - 获取toast提示 在日常使用App过程中&#xff0c;经常会看到App界面有一些弹窗提示&#xff08;如下图所示&#xff09;这些提示元素出现后等待3秒左右就会自动消失&#xff0c;这个和我日常生活中看到的烟花和昙花是多么的相似&#xff0c;那么我们该如何获取…

在Ail Linux中手动配置IPv6

第一步&#xff0c;登录阿里云服务器控制台&#xff0c;在“概览”页面找到对应实例&#xff0c;然后单击实例ID。 第二步&#xff0c;在“实例详情”页面中的“网络信息”栏目中&#xff0c;可以发现“IPv6 地址”中没有数据&#xff0c;然后单击“专有网络”的专有网络ID。 第…

(学习笔记-系统结构)Linux内核与windows内核

内核 计算机是由各种外部硬件设备组成的&#xff0c;比如内存、CPU、硬盘等&#xff0c;如果每个应用都要和这些硬件设备对接通信协议&#xff0c;那这样太累了&#xff0c;所以这个中间人由内核来负责&#xff0c;让内核作为应用连接硬件设备的桥梁&#xff0c;应用程序只关心…

Docker 容器基础操作

Docker容器基础操作 容器(container)是Docker镜像的运行实例,类似于可执行文件与进程的关系,Docker是容器引擎,相当于系统平台。 容器的生命周期 容器的基础操作(以 tomcat8.0 为例) # 拉取tomcat8.0镜像 [root@tudou tudou]# docker pull tomcat:8.0 8.0: Pulling f…

【山河送书第四期】:《Python之光:Python编程入门与实战》参与活动,免费送书五本!!

【山河送书第四期】&#xff1a;《Python之光&#xff1a;Python编程入门与实战》参与活动&#xff0c;免费送书五本&#xff01;&#xff01; 书本简介本书亮点配套丰富购买链接参与方式往期赠书回顾&#xff1a; 书本简介 作为一种极其流行的编程语言&#xff0c;Python已经…

评测报告的结论如何写?

背景 最近组内同学开始编写评测报告&#xff0c;报告中的结论中存在以下几种情况&#xff1a; 1.结论是一大段文字&#xff0c;像散文一样 2.评测数据结果中存在多个数据维度&#xff0c;将所有的数据结果都罗列到结论中&#xff0c;主要信息不突出 3.只是将评测数据罗列到…

QT多线程编程基础

文章目录 前言一、线程&#xff0c;进程 介绍二、创建线程三、终止线程总结 前言 一、线程&#xff0c;进程 介绍 线程&#xff1a; 是操作系统中独立运行的最小单位。每个线程都有自己的执行路径、程序计数器、堆栈和一组寄存器。线程共享进程的资源&#xff0c;如内存和文件…

突破AI医疗对话MDS瓶颈,深兰科技·科学院论文被国际顶会SIGIR 2023收录

7月23日&#xff5e;27日&#xff0c;人工智能领域智能信息检索方向最权威的国际会议“第46届国际计算机学会信息检索大会”(SIGIR 2023)在中国台湾省台北市举行。大会公布了投稿论文入选名单&#xff0c;由深兰科技科学院多名科技研发人员合力撰写的论文《MDKG&#xff1a;基于…

【ADS】导入CMOS衬底文件+使用coilsys生成电感

新建工程经常忘记怎么操作&#xff0c;简记防遗忘。 操作步骤 1.unzip file2.原理图仿真3.Layout加载衬底文件4.使用coilsys生成电感 1.unzip file designKits-》unzip&#xff0c;选择对应库的压缩包&#xff0c;我这里是&#xff08;TSMC_CRN65GP_v2.zip&#xff09;。 为了…

MySQL碎片清理

为什么产生&#xff1f; 经过大量增删改的表&#xff0c;都可能存在碎片 MySQL数据结构是B树&#xff0c; 删除某一记录&#xff0c;只会标记为删除&#xff0c;后续插入一条该区间的记录&#xff0c;就会复用这个位置。 删除整个数据页的记录&#xff0c;则整个页标记为“可…

C语言getchar函数和putchar函数

getchar()是输入字符的函数 putchar是输出字符的函数 需要包含头文件&#xff1a;<stdio.h>

关于avs和avs2编码stuffing bit的一点理解

avs和avs2编码标准关于结尾有一点和h264的不同。 比如一段视频通过avsx编码后&#xff0c;如果最后1位是字节对齐的&#xff08;也就是说编码后的流刚好是8*n bit&#xff09;&#xff0c;那么就要在最后1bit后面再增加一字节0x80(1000 0000). 如果最后1bit没有对齐&#xff0c…

封装 vue3 入场动画 插件 并发布到 npm

准备 vue create entry-animate 只需要简单的项目框架即可&#xff0c;router\vuex 都不用&#xff1b; 封装过程 src 目录下新建 package&#xff0c;package文件夹是存放我们封装的组件的&#xff1b;还需要加一个入口文件&#xff0c;在 package 中加一个 index.js 文件&a…

BHQ-2 Maleimide,BHQ2 马来酰亚胺,用于检测生物分子的存在和浓度变化

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ BHQ-2 Mal&#xff0c;BHQ2 Maleimide&#xff0c;BHQ-2 马来酰亚胺 PART1----​Product structure&#xff1a; PART2----​Product specifications&#xff1a; 1.CAS No&#xff1a;N/A 2.Molecular formula&#xff1…

linux跑代码,程序终止了,但资源没有释放。

linux跑代码&#xff0c;程序终止了&#xff0c;但资源没有释放。 程序终止&#xff0c;但是资源没有释放. kill -9 5062完成。 linux终止进程