10. 注解开发Bean作用范围和生命周期管理

news2024/12/25 23:38:08

1. bean作用范围注解配置

使用@Scope注解定义bean作用范围

1.1. singleton为单例

1.1.1 在bean头上使用@Scope注解,singleton

package com.lin.dao.impl;

import com.lin.dao.BookDao;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;

@Repository
@Scope("singleton")
public class BookDaoImpl implements BookDao {

    public void save() {
        System.out.println("dao的save");
    }
}

1.1.2 测试类创建容器获取俩个bean打印

package com.lin.app;

import com.lin.config.SpringConfig;
import com.lin.dao.BookDao;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class App {
    public static void main(String[] args) {

        //1.创建spring容器,加载配置配置类
        AnnotationConfigApplicationContext springContext = new AnnotationConfigApplicationContext(SpringConfig.class);
        //2.根据类型获取bean
        BookDao bookDao1 = springContext.getBean(BookDao.class);
        BookDao bookDao2 = springContext.getBean(BookDao.class);
      
        System.out.println(bookDao1);
        System.out.println(bookDao2);


    }
}

1.1.3运行结果

image-20221219132415397

1.2 prototype,非单例

1.2.1 在bean头上使用@Scope注解,prototype

package com.lin.dao.impl;

import com.lin.dao.BookDao;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;

@Repository
@Scope("prototype")
public class BookDaoImpl implements BookDao {

    public void save() {
        System.out.println("dao的save");
    }
}

1.2.2 测试类创建容器依旧获取俩个bean打印

package com.lin.app;

import com.lin.config.SpringConfig;
import com.lin.dao.BookDao;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class App {
    public static void main(String[] args) {

        //1.创建spring容器,加载配置配置类
        AnnotationConfigApplicationContext springContext = new AnnotationConfigApplicationContext(SpringConfig.class);
        //2.根据类型获取bean
        BookDao bookDao1 = springContext.getBean(BookDao.class);
        BookDao bookDao2 = springContext.getBean(BookDao.class);
      
        System.out.println(bookDao1);
        System.out.println(bookDao2);

    }
}

1.2.3 运行结果观察

image-20221219133311454

2. bean生命周期注解配置

2.1@PostConstruct、@PreDestroy定义bean生命周期

在bean中定义一个init方法,destroy,在该方法上使用该@PostConstruct、@PreDestroy注解;

package com.lin.dao.impl;

import com.lin.dao.BookDao;
import org.springframework.stereotype.Repository;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Repository

public class BookDaoImpl implements BookDao {

    public void save() {
        System.out.println("dao的save");
    }

    public BookDaoImpl() {
        System.out.println("Construct");
    }

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

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

2.2 在测试类中创建容器,并注册关闭钩子或者直接关闭容器,运行

package com.lin.app;

import com.lin.config.SpringConfig;
import com.lin.dao.BookDao;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class App {
    public static void main(String[] args) {

        //1.创建spring容器,加载配置配置类
        AnnotationConfigApplicationContext springContext = new            AnnotationConfigApplicationContext(SpringConfig.class);
        springContext.registerShutdownHook();
    }
}

2.3 运行结果

image-20221219134937937

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

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

相关文章

企业档案管理实务:档案的检索方法知多少

在鸿翼档案的企业档案系统设计中,企业档案常用的检索实际上包括两个行为:企业档案信息的贮存和企业档案信息的查找。档案检索工具一方面是整个企业档案检索体系中贮存结果的最终体现,直接反映贮存的质量和水平;另一方面又是各项业…

Redis 哈希(Hash)方法使用详解

目录一、简介二、常用方法2.1、HSET2.2、HSETNX2.3、HGET2.4、HINCRBY、HINCRBYFLOAT2.5、HSTRLEN2.6、HEXISTS2.7、HDEL2.8、HLEN2.9、HMSET、HMGET2.10、HKEYS、HVALS、HGETALL2.11、HSCAN一、简介 本文今天主要是讲哈希(Hash)的方法的使用&#xff0c…

毕业设计 单片机手势检测识别系统 - arduino 物联网 嵌入式

文章目录0 前言1 简介2 主要器件3 实现效果4 设计原理5 部分核心代码6 最后0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长…

uniapp中video层级太高(或者在页面中不跟随页面滚动)解决方案

我觉得这个问题有必要记录一下。最近项目中遇到的问题:项目是uniapp开发,有一个商品详情的页面和一个视频竖向轮播的页面。 问题描述 1、商品详情页上面是图片轮播(包含视频),下面是商品详情,当页面上下滑动时,如果当…

微服务框架 SpringCloud微服务架构 服务异步通讯 52 惰性队列 52.2 惰性队列

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 服务异步通讯 文章目录微服务框架服务异步通讯52 惰性队列52.2 惰性队列52.2.1 惰性队列52.2.2 总结52 惰性队列 52.2 惰性队列 52.2.1 惰…

【BTC】Fork

区块链中fork的分类: state fork: 两个节点差不多同一个时候挖到了矿,就会出现一个临时性的分叉。 forking attack(deliberate fork):也是属于对比特币这个区块链当前的状态产生的意见分歧,只不…

汇编语言笔记——汇编程序开发、汇编大作业

文章目录传送门汇编程序开发汇编代码初步实践dos虚拟机与挂载实模式Hello World代码解析汇编链接重新汇编与批处理反汇编与debug保护模式Hello WorldVS2017masm32环境配置汇编基础语言概述汇编环境汇编语言语句格式常用伪指令数据定义符号定义操作符\$OFFSET算术操作符逻辑操作…

【基础】RabbitMQ 基础

RabbitMQ 基础RabbitMQ 基本介绍RabbitMQ 基本概念ConnectionChannelVirtual HostQueueExchangedirectfanouttopicheadersRabbitMQ 基本介绍 RabbitMQ 是使用 Erlang 语言开发的基于 AMQP 协议来实现的开源消息队列系统。 RabbitMQ 的特点: 灵活路由:E…

社招前端二面react面试题整理

解释 React 中 render() 的目的。 每个React组件强制要求必须有一个 render()。它返回一个 React 元素&#xff0c;是原生 DOM 组件的表示。如果需要渲染多个 HTML 元素&#xff0c;则必须将它们组合在一个封闭标记内&#xff0c;例如 <form>、<group>、<div&g…

什么是数据标注,它的用途是什么?

什么是数据标注&#xff1f; 从本质上讲&#xff0c;数据标注是对计算机视觉或自然语言处理 (NLP)可识别的材料内容进行标记的过程。当我们标记或标注这些类型的数据时&#xff0c;它们变得更容易输入算法或编程以通过 NLP 进行解释。 得益于数据标注&#xff0c;人工智能 (…

【Vue】Vue项目打包上线流程--20221219

Vue项目打包上线流程 我的链接https://blog.csdn.net/m0_46629123/article/details/128371149 1.打包 npm run build 2.准备服务器 1.准备demo文件夹&#xff0c;并CMD输入npm init 2.CMD输入npm i express 3.新建并编辑server.js server.js const express require(…

电动汽车对系统运行的影响(Matlab实现)

目录 0 写在前面 1 插式电动车介绍 2 全系统 PEV 充电需求估算 2.1 旅行模式模型 2.2 能源消耗模型 2.3 电力消耗模型 3 单个 PEV 充电设施需求估算 4 PEV充电站需求估算网络 5 电动汽车对电力系统影响的评估 6 系统模型 6.1 结果 6.2 Matlab代码 0 写在前面 在不久…

论文笔记High-Resolution Image Synthesis with Latent Diffusion Models

普通的扩散模型在像素空间操作&#xff0c;运算复杂度较高。为了保证在低资源下训练扩散模型&#xff0c;并保留扩散模型的质量和灵活性&#xff0c;该论文使用预训练的自编码器得到隐含空间&#xff0c;并在隐含空间中训练扩散模型。另一方面&#xff0c;该论文使用cross-atte…

设计模式原则 - 里氏替换原则

一 背景&#xff1a; 里氏替换原则是针对继承的。介绍前先聊聊继承性的特点 继承优势 提高代码的复用性&#xff08;每个子类有拥有父类的属性和方法&#xff09;提高代码的可扩展性 继承劣势 继承是侵入性的&#xff08;只要继承&#xff0c;就必须拥有父类的属性和方法&…

齐鲁转债上市价格预测

齐鲁转债基本信息转债名称&#xff1a;齐鲁转债&#xff0c;评级&#xff1a;AAA&#xff0c;发行规模&#xff1a;80.0亿元。正股名称&#xff1a;齐鲁银行&#xff0c;今日收盘价&#xff1a;4.28&#xff0c;转股价格&#xff1a;5.87。当前转股价值 转债面值 / 转股价格 *…

endo BCN-PEG4-COOH,endo BCN-四聚乙二醇-羧酸

中文名&#xff1a;endo BCN-四聚乙二醇-羧酸 英文名&#xff1a;endo BCN-PEG4-acid CAS号&#xff1a;1881221-47-1 分子式/分子量&#xff1a;C22H35NO8/441.5 结构式 溶解性&#xff1a;溶于大部分有机溶剂&#xff0c;如&#xff1a;DCM、DMF、DMSO、THF等等&#…

公务员备考(四十) 图推提升

第一章 平面专题总结 一、线总结 1、曲线直线 曲直图形判断原则:有曲则为曲,无曲才为直。阴影图形不讨论曲直性。 曲直规律图形特点:a.纯直线曲线图形;b.简笔画实物图形;c.单区域简单图形;d.内外结构图形 2、平行线(含回旋折线) a.轮廓自带平行线条;b.N字型、Z字…

Vs Code的使用

在上一章中有使用到Vs Code但是没有相关的介绍。 什么是Vs Code&#xff1f; 1、vscode是Microsoft公司在美国的一个项目&#xff1a;一个跨平台的源代码编辑器&#xff0c;用于在Mac OS X&#xff0c;Windows和Linux上运行的现代Web和云应用程序。通俗地说&#xff0c;是一款…

MapReduce案列-数据去重

文章目录一&#xff0c;案例分析&#xff08;一&#xff09;数据去重介绍&#xff08;二&#xff09;案例需求二&#xff0c;案例实施&#xff08;一&#xff09;准备数据文件&#xff08;1&#xff09;启动hadoop服务&#xff08;2&#xff09;在虚拟机上创建文本文件&#xf…