还不懂Spring常用的配置?看看阿里的大牛是怎么配置

大专学历成功拿到35koffer ! 全凭阿里大牛总结的Java面试笔记 个人背景 如标题所示,我的个人背景非常简单,Java开发经验1年半,学历普通,2本本科毕业,毕业后出来就一直在Crud,在公司每天重复的工作对我的技术提升并没有什么帮助,但小镇出来的我也深知自我努力的重要性,想要改变“命运”,没有背景没有资本的人,只能通过勤奋获得。 美团面试经历(还原最真实的4面) 美团一面: 1、自我介绍 2、聊项目相关 介绍项目 怎么保证redis与Mysql的数据一致性 见你写了个加随机数预防缓存雪崩,解释一下 未改进和改进后的Jmter测试性能对比 3、Red 阅读详情

本文转载自:还不懂Spring常用的配置?看看阿里的大牛是怎么配置


一、Bean的Scope

1. 介绍

  • Scope描述的是Spring容器是如何新建Bean的实例。
  • Singleton:一个Spring容器只有一个实例。
  • Prototype:每次调用都会新建一个Bean的实例。

2. 需求

Singleton和Prototype,分别从Spring容器中获得两次Bean,判断是否相等

3. 示例

①. 编写Singleton的Bean

package com.eleven.scope1;
import org.springframework.stereotype.Service;
@Service // 表示当前类是Spring管理的一个Bean
// @Scope("singleton") 默认为Singleton,所以注释掉
public class DemoSingletonService {
}

②. 编写Prototype的Bean

package com.eleven.scope1;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
@Service // 表示当前类是Spring管理的一个Bean
@Scope("prototype") // 声明scope为prototype
public class DemoPrototypeService {
}

③. 配置类

package com.eleven.scope1;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration // 声明当前类是一个配置类
@ComponentScan("com.eleven.scope1") // 自动扫描包下面的所有配置
public class ScopeConfig {
}

④.运行

package com.eleven.scope1;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
	public static void main(String[] args) {
		// 声明AnnotationConfigApplicationContext是Spring管理的一个Bean,将ScopeConfig注入进去
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ScopeConfig.class);
		// 获取DemoSingletonService声明的Bean
		DemoSingletonService s1 = context.getBean(DemoSingletonService.class);
		DemoSingletonService s2 = context.getBean(DemoSingletonService.class);
		DemoPrototypeService p1 = context.getBean(DemoPrototypeService.class);
		DemoPrototypeService p2 = context.getBean(DemoPrototypeService.class);
		System.out.println("Singleton:s1和s2是否相等:" + s1.equals(s2));
		System.out.println("Prototype:p1和p2是否相等:" + p1.equals(p2));
		context.close();
	}
}

5.输出

Singleton:s1和s2是否相等:true
Prototype:p1和p2是否相等:false

二、Profile

1. 介绍

Profile表示可以在不同环境下使用不同的配置。

2. 需求

通过使用Profile注解,来配置生产/开发环境。

3. 示例

①. 示例Bean

package com.eleven.profile;
public class DemoBean {
	private String content;
	public DemoBean(String context) {
		super();
		this.content = context;
	}
	/** get/set方法 */
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
}

②. Profile配置

package com.eleven.profile;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration // 声明当前类是一个配置类
public class ProfileConfig {
	@Bean	// 表示当前类的返回值就是一个Bean
	@Profile("dev")
		public DemoBean devDemoBean() {
		return new DemoBean("开发环境");
	}
	@Bean
		@Profile("prod")
		public DemoBean prodDemoBean() {
		return new DemoBean("生产环境");
	}
}

③. 运行

package com.eleven.profile;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
	public static void main(String[] args) {
		// 使用AnnotationConfigApplicationContext作为Spring的容器
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
		// 通过设定Environment的ActiveProfiles来设定当前context的配置环境
		context.getEnvironment().setActiveProfiles("prod");
		// 先将活动的Profile设置为Prod
		// context.getEnvironment().setActiveProfiles("dev"); // 表示开发环境
		context.register(ProfileConfig.class);
		// 注册Bean的配置类
		context.refresh();
		// 刷新容器
		// 获得DemoBean声明的Bean
		DemoBean demoBean = context.getBean(DemoBean.class);
		System.out.println(demoBean.getContent());
		context.close();
	}
}

④. 输出

生产环境

三、事件(Application Event)

1. 介绍

Spring的事件为Bean和Bean之间的消息通信提供了支持。
当一个Bean处理完一个任务之后,希望能够被其它Bean知道并作出相应的处理,这时,我们就需要让其它Bean监听当前Bean所发送的事件。

2. 需求

  1. 自定义事件,集成ApplicationEvent。
  2. 定义事件监听器,实现ApplicationListener。
  3. 使用容器发布事件。

3. 示例

①.自定义事件

package com.eleven.event;
import org.springframework.context.ApplicationEvent;
public class DemoEvent extends ApplicationEvent {
	private static final long serialVersionUID = 1L;
	private String msg;
	/** get/set **/
	public DemoEvent(Object source, String msg) {
		super(source);
		this.msg = msg;
	}
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
}

②.定义事件监听器

package com.eleven.event;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component	// 将普通的pojo对象实例化到Spring容器中
public class DemoListener implements ApplicationListener<DemoEvent> {
	// 实现了ApplicationListener接口,并指定监听事件的类型
	@Override
		public void onApplicationEvent(DemoEvent event) {
		// 使用onApplicationEvent方法对消息进行接收处理
		String msg = event.getMsg();
		System.out.println("我(bean-demoListener)接收到了bean-demoPublisher发布的消息:" + msg);
	}
}

③.使用容器发布事件

package com.eleven.event;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
@Component
public class DemoPublisher {
	@Autowired	// 将ApplicationContext注入到当前类中
	ApplicationContext applicationContext;
	// 注入ApplicationContext用来发布事件
	public void publish(String msg) {
		applicationContext.publishEvent(new DemoEvent(this, msg));
		// 使用ApplicationContext的PublishEvent方法来发布
	}
}

④.配置类

package com.eleven.event;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration	// 声明当前是一个配置类
@ComponentScan("com.eleven.event")	// 自动扫描包下面所以的配置
public class EventConfig {
}

⑤. 运行

package com.eleven.event;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
	public static void main(String[] args) {
		// 将AnnotationConfigApplicationContext作为Spring的容器,并将参数配置进去
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(EventConfig.class);
		// 获得DemoPublisher的声明Bean
		DemoPublisher demoPublisher = context.getBean(DemoPublisher.class);
		// 发布消息
		demoPublisher.publish("Hello Application Event");
		context.close();
	}
}

⑥. 输出

我(bean-demoListener)接收到了bean-demoPublisher发布的消息:Hello Application Event


本文转载自:还不懂Spring常用的配置?看看阿里的大牛是怎么配置

SpringBoot2.x系列教程(六十五)SpringBoot扫描其他项目的几种方案 最近接手一套基于SpringBoot项目,对项目进行重构调整,将公共部分抽离成子项目。在实践的过程中,发现抽离之后的模板中组件并没有被初始化。于是将排查解决过程中搜集到的方案及知识汇总分享给大家。 问题原因 问题的原因很简单,因多套系统的package命名不一致。比如业务系统的包命名为com.abc.xx,而公共(common)部分的包命名为com.efg.xx,引入公共jar包时默认是无法初始化的。 对于SpringBoot项目,我们知道扫描的路径从启动类所在包开始,扫描当前包及其子级包下的所有文件。上 阅读详情

相关推荐

哨兵一号数据下载

哨兵1号数据的下载过程

weixin_59617499的博客 5135

java web spring_javaweb中的spring是什么东西?

Spring是Java EE编程领域的一个轻量级开源框架,该框架由一个叫Rod Johnson的程序员在 2002 年最早提出并随后创建,是为了解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架 。 [2] Spring是一个开源容器框架,它集成各类型的工具,通过核心的Bean factory实现了底层的类的实例化和生命周期的管理。在整个框架中,各类型的功能被抽象成一个个的 Bean,这样就...

weixin_42508215的博客 605

阿里开源最强数字人工具 EchoMimicV2,本地部署(一)

EchoMimicV2是阿里推出的半身人体AI数字人项目,基于参考图片、音频剪辑和手部姿势序列生成高质量动画视频,确保音频内容与半身动作的一致性。现在本地部署,安装体验一下。

缘分天空的专栏 4614

ssm整合

整合的思路: 明确路线,是用spring来整合另外两个框架 编写Spring框架(编写业务层) 首先要创建一个数据库 导入依赖: <dependencies> <!-- spring --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <ver

qq_43603598的博客 263

从零开始搭建GD32F103CBT6开发环境:VSCode配置与实战技巧

本文详细介绍了如何从零开始为国产MCU GD32F103CBT6搭建高效的VSCode开发环境。内容涵盖工具链安装、VSCode核心插件配置、工程目录结构规划、关键配置文件编写以及Makefile实战,旨在帮助开发者摆脱传统IDE束缚,利用现代化工具链提升嵌入式开发效率。

weixin_29158413的博客 448

在Qt中使用EtherCAT-SOEM的初始化中,状态机卡在PreOp->Save-Op过程中,出现State=0x12, Error=0x001e错误的解决办法

1.在调试EtherCAT软件过程中,一直出现配置从站进不了Save_op状态,通过下函数检查从站状态: //使用的从站编号为1 只有1个从站 ec_slave[1].state = EC_STATE_SAFE_OP; ec_writestate(1); //设置到安全模式 ec_statecheck(1, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE * 4); printf("Slave %d State=0x%2.2x StatusCode=0x%4

zeal_for_rov的博客 6828

@componentscan 配置多个扫描包_Spring注解驱动开发之二——包扫描@ComponentScan、typeFilter自定义规则...

本文包含以下内容:新、旧方法包扫描扫描排除测试扫描只包含测试指定过滤规则拓展@ComponentScan1.新、旧方法包扫描1).旧方法包扫描,通过在配置xml 文件中添加context:component-scan 标签进行包扫描,只要标注了@Controller、@Service、@Repository,@Component,都会注册进来"com.atguigu" use-con...

weixin_35198152的博客 6088

RDMA 出现背景、如何实现?如何测试连通性?

文章目录一、背景:1、传统的 网络通信:2、传统网络通信的问题:二、RDMA :1、出现背景:2、RDMA 简介:3、如何工作:4、RDMA 与 Infiniband 的关系:5、支持 RDMA 的其他协议:6、RDMA 的优势:7、通过 Infiniband 实现 RDMA :8、如何测试 RDMA 连通性:   一、背景: 1、传统的 网络通信:     &n...

郑泽林 2162

使用@ComponentScan注释扫描多个包

当使用@ComponentScan来进行包扫描时 当只扫描一个包可写为 @ComponentScan("包名") 例如:@ComponentScan("com.example.service.rpc") 当扫描的包是多个时,应当使用数组的形式 例如:@ComponentScan({"com.example.service.rpc","com.example.web.controller"}) ...

liutaiyi8的博客 3万+

网络设备调试指南:如何用MDIO Clause22/45协议读写Marvell MV88E6390寄存器

本文深入解析了如何通过MDIO Clause 22/45协议对Marvell MV88E6390交换芯片进行寄存器读写调试。文章详细对比了两种协议的本质区别与适用场景,并重点阐述了MV88E6390的直接与间接寻址策略,提供了实战代码示例与关键调试技巧,帮助网络工程师高效解决配置与通信问题。

tequila的博客 517

ETAS工具导入Com Arxml修改步骤

通讯协议栈开发一般通过导入DBC实现,ETAS工具本身导入DBC也是生成arxml后执行cfggen,本文介绍直接导入客户提供的arxml文件,实现通讯协议栈的生成。通过Arxml导入相比于DBC来说,少了从DBC转为arxml的过程。而且arxml中能提供的信息也会更多。如果是DBC的话,很多信息(如PNC的映射,CANTP的配置等)都需要额外配置。不过还有连DBC都无法提供的,那就更麻烦了~

赞的博客 1541

@componentscan 配置多个扫描包_还不懂Spring常用的配置?看看阿里的大牛是怎么配置...

欢迎关注专栏《Java架构筑基》——专注于Java技术的研究与分享!Java架构筑基Java架构筑基——专注于Java技术的研究与分享!后续文章将首发此专栏!欢迎各位Java工程师朋友投稿和关注一、Bean的Scope1. 介绍Scope描述的是Spring容器是如何新建Bean的实例。Singleton:一个Spring容器只有一个实例。Prototype:每次调用都会新建一个Bean的实例。2...

weixin_42573113的博客 802

轴承寿命预测 | 基于BiLSTM双向长短期记忆神经网络的轴承寿命预测附matlab完整代码

轴承寿命预测 | 基于BiLSTM双向长短期记忆神经网络的轴承寿命预测附matlab完整代码

默默科研仔的博客 274

阿里大牛亲码 Spring Boot 进阶(全彩版小册)

很显然,微服务是未来的发展趋势,项目会从传统架构一点一点转向微服务架构。不论你是互联网人才,还是传统行业从业者,学习流行技术是非常重要的。SpringBoot 作为官方大力推荐的一个技术,是每一个开发人员都应该要掌握的重点。学习不难,贵在自觉和坚持。Ps:由于篇幅限制,笔记无法全部为大家展示出来,就以截图主要内容的形式让大家参考啦,

xxxzzzqqq_的博客 220

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

阿里大牛强推Spring源码系列学习笔记,深入底层通俗易懂

前言 今天来与大家聊一聊“SSM”!咳咳咳不要想歪,是Spring+SpringBoot+MyBatis源码!!! 我想先问大家一个问题:不会有人真的喜欢看源码吧!在我的认知里喜欢看源码的都是“变态”,都是大哥!现实中大多数人都是为了涨薪或者一些其他的原因才会去主动接触源码吧。 但是在现在互联网大势所趋下,源码阅读已经是一个优秀软件开发者必备的能力。如今绝大多数软件都是团队协作的成果,只有读懂别人的代码才能继续开发新的功能。即使是单兵作战,也需要读懂自己所写的旧代码,之后才能开展新的工作。那么该如何高

java_dazhuzhu的博客 191

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

阿里大牛强推Spring源码系列学习笔记,深入底层通俗易懂!

前言 今天来与大家聊一聊“SSM”!咳咳咳不要想歪,是Spring+SpringBoot+MyBatis源码!!! 我想先问大家一个问题:不会有人真的喜欢看源码吧!在我的认知里喜欢看源码的都是“变态”,都是大哥!现实中大多数人都是为了涨薪或者一些其他的原因才会去主动接触源码吧。 但是在现在互联网大势所趋下,源码阅读已经是一个优秀软件开发者必备的能力。如今绝大多数软件都是团队协作的成果,只有读懂别人的代码才能继续开发新的功能。即使是单兵作战,也需要读懂自己所写的旧代码,之后才能开展新的工作。那么该如何高

Java码农之星 325

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring巅峰之作,颠覆了阿里大牛认知,Java开发必看!

小编也是很有感触,如果一直都是在中小公司,没有接触过大型的互联网架构设计的话,只靠自己看书去提升可能一辈子都很难达到高级架构师的技术和认知高度。向厉害的人去学习是最有效减少时间摸索、精力浪费的方式。我们选择的这个行业就一直要持续的学习,又很吃青春饭。虽然大家可能经常见到说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。送给每一位想学习Java小伙伴,用来提升自己。

2401_83916394的博客 922

SpringBoot:和阿里大牛的技术面谈,看完没有不懂的

写在前面 最近,很多小伙伴出去面试都被问到了Spring问题,关于Spring,细节点很多,面试官也非常喜欢问一些很细节的技术点。所以,在 Spring 专题中,我们尽量把Spring的每个技术细节说清楚,将透彻。 概述 自定义组件要想使用Spring容器底层的一些组件(比如:ApplicationContext、BeanFactory等),此时,只需要让自定义组件实现XxxAware接口即可。此时,Spring在创建对象的时候,会调用XxxAware接口定义的方法,注入相关的组件。 专题10:Redis

m0_56051002的博客 361

阿里大牛解析微服务架构:Docker,Spring全家桶,分布式,数据库

微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。你可以将其看作是在架构层次而非获取服务的类上应用很多SOLID原则。微服务架构是个很有趣的概念,它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。现在,就由某大厂一线架构师来手撕微服务架构,带你大战Spring Boot、Spring Cloud、Nginx和Docker、Tomcat,这些内容不信你看完还搞不懂!

java_beautiful的博客 207

能顺利通过阿里二面,多亏这份Spring源码高阶手册了

吃透这份spring源码高阶手册,能顺利通过阿里二面。 总览 篇幅限制,在此就不全部展示了。想获取这份Spring源码高阶手册的小伙伴:可以点击【传送门】即可获取! 除了这份spring手册还有一套阿里大牛讲解的spring源码视频。有需要的小伙伴后台私信一并获取 ...

Ghost1Xiao的博客 125

阿里大牛用4小时带你深入Spring源码设计及原理

前言 厉害了!!阿里P8大牛用4个小时,18个spring问题带你深入学习Spring源码设计!也许你离大厂就只差这18个问题,希望你能够静下心来,好好学习一下!! 下面就给大家介绍一下,从BAT面试必问的Spring源码来看,Java程序员如何突破这道难关,在线debug,带你彻底搞懂spring循环依赖问题!!! 主要内容 1.如何利用反射实现Autowired注解 2.一招教你如何手撕Spring|OC源码 3. Spring程序是如何启动的? 4. Spring是如何加载配置.

程序员高级码农 1137

凭借阿里大牛最新版Java核心开发手册,已斩获阿里offer

面对市场需求缩水的时期,小编我是如何笑对金三银四,拿到阿里offer的呢? 嘿嘿嘿!今天就来分享一下我的秘密武器:阿里大牛整理的Java核心开发手册,这份手册内容非常之全,涵盖基础知识以及架构进阶。 话不多说,下面就来看看吧: 手册内容目录展示: 篇幅限制,在此就不全部展示了。想获取完整版Java核心开发手册的小伙伴:只需要点赞收藏,关注我之后直接添加微信:mxh5261 即可百分百获取! 细节内容展示 JAVA基础相关知识点整理 JAVA集合相关知识点整理 多线程并发相关知识点

javassb的博客 266

你连SpringBoot都搞不懂,还好意思海投简历?不如来看一下阿里大牛的神总结!

如果你在使用Sping Boot的过程中只是简单地“用",而不去思考其背后的实现逻辑与思想,即便用得再好,收获也是有限的-这样只能做到"手熟",并不能拥有“匠心"。更重要的是,如果不学习Spring Boot背后那些优秀的设计理念和实现方式,我们肯定不能真正用好Spring Boot。 学习Spring Boot的设计理念和实现方式除了能够让开发人员从“手熟”的境界跨入“匠心"的境界,还能够让开发人员在其他业务场景中触类旁通地找到更加优秀的解决方案。同时,开发人员也能够了解代码和项目背后的深层逻辑,这会为

如果频繁就私信一下呢 118

阿里Spring Cloud Alibaba速成手册全网开源

大家都知道Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合。这样一看:马爸爸可以说是左手双十一,右手阿里开源组件,不仅占据了程序员的购物车,还要攻占大家的开发工具(手动狗头)。

weixin_50205273的博客 303

2024最新阿里Java高级面试题及答案,阿里开发7年大牛

我想问下大家当初选择做程序员的初衷是什么?有思考过这个问题吗?高薪?热爱?既然入了这行就应该知道,这个行业是靠本事吃饭的,你想要拿高薪没有问题,请好好磨练自己的技术,不要抱怨。有的人通过培训可以让自己成长,有些人可以通过自律强大的自学能力成长,如果你两者都不占,还怎么拿高薪?架构师是很多程序员的职业目标,一个好的架构师是不愁所谓的35岁高龄门槛的,到了那个时候,照样大把的企业挖他。为什么很多人想进阿里巴巴,无非不是福利待遇好以及优质的人脉资源,这对个人职业发展是有非常大帮助的。

m0_61549740的博客 1040
上一篇: 阿里架构师详解:为什么需要消息中间件——老王给女儿讲故事
下一篇: 面试倒在了HashMap上?别急HashMap面试题,看这一篇就够了
Java_supermanNO1
博客等级 码龄7年 1170粉丝 329原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值