在工具类静态方法调用@autowired注入的bean方法-编程思维

今天在搞一个工具类的时候,需要在工具类的静态方法中调用mapper的方法插入数据,但是,用spring的@Autowired注入bean后,测试一跑,报空指针异常。 解决方案如下: 1.对工具类使用@Component 注解 [email protected] 注解注入bean [email protected] 使用该注解定义init()方法,在方法中给logTool赋值 使用时调用logTool.xxx

spring竟然可以创建“重复”名称的bean?—一次项目中存在多个bean名称重复问题的排查-编程思维

作者:京东科技 韩国凯 一、项目中存在了名称重复的bean 众所周知,在Spring中时不能够创建两个名称相同的bean的,否则会在启动时报错: 但是我却在我们的spring项目中发现了两个相同名称的bean,并且项目也可以正常启动,对应的bean也可以正常使用。 因为项目原因中会用到多个redis集群,所以有配置了多个redis环境,并且在id上做了区分。 但是在配置redis环境的时候,两

spring源码核心剖析-编程思维

作者:京东科技 韩国凯 前言 SpringAOP作为Spring最核心的能力之一,其重要性不言而喻。然后需要知道的是AOP并不只是Spring特有的功能,而是一种思想,一种通用的功能。而SpringAOP只是在AOP的基础上将能力集成到SpringIOC中,使其作为bean的一种,从而我们能够很方便的进行使用。 一、SpringAOP的使用方式 1.1 使用场景 当我们在日常业务开发中,例如有些

如何评价java-编程思维

1 语言优劣论 世上只有两种编程语言:一种被人骂,一种没人用。 Java已经诞生20多年了,依然是企业级开发中使用最广泛的语言,也是挨骂最多的语言。技术圈经常有“A语言比B语言更好”的争论,争论的核心有两点:语法和性能,比如“Java性能不如C#、Python语法比Java优雅”。 先谈谈语法的优劣。每个开发者都有自己偏爱的语法。你觉得很舒服的写法,就有人觉得别扭,这是个主观问题。比如Java

非常小的一个东西,spring依赖注入bean类型的8种情况-编程思维

大家好,我是三友~~ 今天来讲一个可能看似没有用但是实际又有点用的一个小东西,那就是@Autowired支持注入哪些Bean的类型。 为啥要讲这个呢? 故事说起来可能就比较长了。 不过长话可以短说,仅仅就是突然想起来之前有一个妹子问过我这个问题! 微信公众号:三友的java日记 1、普通对象 这没什么好说的,大家都这么用的,比如需要用到UserService,直接@Autowired就可以

java 2023年接地气的中高级面试题一(附答案)-编程思维

直入主题:   Q1:为什么要用分布式锁?   在分布式系统中,多个进程或线程可能会同时访问共享资源,这可能会导致数据不一致、并发性问题、性能下降等问题。为了解决这些问题,我们通常会使用分布式锁来协调多个进程或线程对共享资源的访问。   分布式锁是一种协调机制,它通过在共享资源上设置锁来防止多个进程或线程同时访问它。分布式锁的主要作用如下: 保证数据的一致性:通过分布式锁来控制对共享资源的访

玩转mybatis高级特性:让你的数据操作更上一层楼-编程思维

目录动态SQL缓存机制插件机制自定义类型转换总结 Mybatis高级特性能够帮助我们更加灵活地操作数据库,包括动态SQL、缓存机制、插件机制、自定义类型转换等。学习这些特性可以让我们更好地利用Mybatis,提高数据操作的效率和质量。 未来的道路由自己抉择,事业的高度由自己决定。 动态SQL 动态SQL中,Mybatis提供了多种标签来帮助我们构建动态的SQL语句,其中包括: <if

mybatis-spring注解mapperscan的原理-编程思维

很多开发者应该都知道,我们只使用@MapperScan这个注解就可以把我们写的Mybatis的Mapper接口加载到Spring的容器中,不需要对每个Mapper接口加@Mapper这个注解了,加快了我们开发的效率。如下: 就可以把我们写在io.renren.mapper这个包下的Mapper接口加载到我们的Spring容器中。当然mybatis-spring能使用这样的注解还是因为的大神开发

玩转springboot原理:掌握核心技术,成为高级开发者-编程思维

本文通过编写一个自定义starter来学习springboot的底层原理,帮助我们更好的使用springboot集成第三方插件 步骤一:创建项目 步骤二:添加依赖 步骤三:创建自动配置类 步骤四:创建属性类 步骤五:创建服务类 步骤六:添加自动配置类到Springboot自动配置列表中 步骤七:打包并发布 步骤八:在其他项目中使用自定义starter 结论 步骤一:创建项目 世界上最伟大的

spring boot中如何优雅地实现异步调用?-编程思维

前言 SpringBoot想必大家都用过,但是大家平时使用发布的接口大都是同步的,那么你知道如何优雅的实现异步呢? 这篇文章就是关于如何在Spring Boot中实现异步行为的。但首先,让我们看看同步和异步之间的区别。 同步编程:在同步编程中,任务一次执行一个,只有当一个任务完成时,下一个任务才会被解除阻塞。 异步编程:在异步编程中,可以同时执行多个任务。您可以在上一个任务完成之前转到另一个任

springboot项目启动后自动打开浏览器网页-编程思维

        以前写Spring项目的时候,每次启动Tomcat可以自动打开并预览网页,但是后面使用SpringBoot项目(因为SpringBoot内置了Tomcat无法修改配置),每次启动项目然后再打开浏览器访问十分麻烦,通过编写一个代码类也可以实现类似的功能: @Component public class OpenBrowser implem

java线程池和spring异步处理高级篇-编程思维

开发过程中我们会遇到很多使用线程池的场景,例如异步短信通知,异步发邮件,异步记录操作日志,异步处理批量Excel解析。这些异步处理的场景我们都可以把它放在线程池中去完成,当然还有很多场景也都可以使用线程池,掌握线程池后开发中自己灵活应用。 例如在生成订单的时候给用户发送短信,生成订单的结果不应该被发送短信的成功与否所左右,也就是说生成订单这个主操作是不依赖于发送短信这个操作,我们就可以把发送短信

spring:现代java开发的必备框架-编程思维

目录Spring:现代Java开发的必备框架Spring创建bean的生命周期以及对应的接口和注解Spring使用三级缓存解决循环依赖的原理Spring使用三级缓存创建bean的过程Spring使用AOPSpringAOP的实现原理Spring使用事务管理Spring事务的原理DataSourceTransactionManager的实现DataSourceTransactionManager

spring-纯java创建一个ssm【webapp】-编程思维

纯Java搭建webapp QuickStart 使用纯 Java 来搭建一个 SSM 环境,即在项目中,不存在任何 XML 配置,包括 web.xml 1创建一个Maven工程 引入依赖 <!-- TODO 【Java创建SSM】1、引入依赖 --> <dependency> <groupId>org.springframework<

spring-设计模式-编程思维

1.1开闭原则 开闭原则(open-closed principle,OCP)是指一个软件实体(如类,模块和函数)应该对扩展开放,对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。 强调用抽象构建框架,用实现扩展细节,可以提高软件系统的可复用性及可维护性;例如版本更新时,我们尽可能不修改源代码就可以添加新功能。 首先创建一个课程接口JavaCourse /** * TODO 开

spring-传统方式(xml)创建webapp-编程思维

如何搭建一个传统的webapp项目【Java后端】 使用xml 来搭建 SSM 环境,要求 Tomcat 的版本必须在 7 以上 QuickStart 1创建工程 创建一个新模块【普通的 Maven 工程】 这里我们选择webapp作为maven的archetype 创建完成之后,项目默认的层级如下: 我们发现根本就没有java目录,这时候就需要手动创建一个java目录: 引入本次项目

统一返回对象result-编程思维

统一返回对象Result 项目中我们会将响应封装成json返回,一般我们会将所有接口的数据格式统一, 使前端(iOS Android, Web)对数据的操作更一致、轻松。 一般情况下,统一返回数据格式没有固定的格式,只要能描述清楚返回的数据状态以及要返回的具体数据就可以。但是一般会包含状态码、返回消息、数据这几部分内容 例如,我们的系统要求返回的基本数据格式如下: 列表:** { "code

springboot解决跨域方案-编程思维

SpringBoot解决跨域的几种方式 跨域资源共享(CORS):通过修改Http协议header的方式,实现跨域。说的简单点就是,通过设置HTTP的响应头信息,告知浏览器哪些情况在不符合同源策略的条件下也可以跨域访问,浏览器通过解析Http协议中的Header执行具体判断。具体的Header如下: CORS跨域常用header Access-Control-Allow-Origin: 允许