在工具类静态方法调用@autowired注入的bean方法-编程思维
今天在搞一个工具类的时候,需要在工具类的静态方法中调用mapper的方法插入数据,但是,用spring的@Autowired注入bean后,测试一跑,报空指针异常。 解决方案如下: 1.对工具类使用@Component 注解 [email protected] 注解注入bean [email protected] 使用该注解定义init()方法,在方法中给logTool赋值 使用时调用logTool.xxx
morethink program
今天在搞一个工具类的时候,需要在工具类的静态方法中调用mapper的方法插入数据,但是,用spring的@Autowired注入bean后,测试一跑,报空指针异常。 解决方案如下: 1.对工具类使用@Component 注解 [email protected] 注解注入bean [email protected] 使用该注解定义init()方法,在方法中给logTool赋值 使用时调用logTool.xxx
前言 项目中参数校验十分重要,它可以保护我们应用程序的安全性和合法性。我想大家通常的做法是像下面这样做的: @Override public void validate(SignUpCommand command) { validateCommand(command); // will throw an exception if command is not valid vali
作者:京东科技 韩国凯 一、项目中存在了名称重复的bean 众所周知,在Spring中时不能够创建两个名称相同的bean的,否则会在启动时报错: 但是我却在我们的spring项目中发现了两个相同名称的bean,并且项目也可以正常启动,对应的bean也可以正常使用。 因为项目原因中会用到多个redis集群,所以有配置了多个redis环境,并且在id上做了区分。 但是在配置redis环境的时候,两
作者:京东科技 韩国凯 前言 SpringAOP作为Spring最核心的能力之一,其重要性不言而喻。然后需要知道的是AOP并不只是Spring特有的功能,而是一种思想,一种通用的功能。而SpringAOP只是在AOP的基础上将能力集成到SpringIOC中,使其作为bean的一种,从而我们能够很方便的进行使用。 一、SpringAOP的使用方式 1.1 使用场景 当我们在日常业务开发中,例如有些
大家好,我是三友~~ 今天来讲一个可能看似没有用但是实际又有点用的一个小东西,那就是@Autowired支持注入哪些Bean的类型。 为啥要讲这个呢? 故事说起来可能就比较长了。 不过长话可以短说,仅仅就是突然想起来之前有一个妹子问过我这个问题! 微信公众号:三友的java日记 1、普通对象 这没什么好说的,大家都这么用的,比如需要用到UserService,直接@Autowired就可以
目录动态SQL缓存机制插件机制自定义类型转换总结 Mybatis高级特性能够帮助我们更加灵活地操作数据库,包括动态SQL、缓存机制、插件机制、自定义类型转换等。学习这些特性可以让我们更好地利用Mybatis,提高数据操作的效率和质量。 未来的道路由自己抉择,事业的高度由自己决定。 动态SQL 动态SQL中,Mybatis提供了多种标签来帮助我们构建动态的SQL语句,其中包括: <if
很多开发者应该都知道,我们只使用@MapperScan这个注解就可以把我们写的Mybatis的Mapper接口加载到Spring的容器中,不需要对每个Mapper接口加@Mapper这个注解了,加快了我们开发的效率。如下: 就可以把我们写在io.renren.mapper这个包下的Mapper接口加载到我们的Spring容器中。当然mybatis-spring能使用这样的注解还是因为的大神开发
本文通过编写一个自定义starter来学习springboot的底层原理,帮助我们更好的使用springboot集成第三方插件 步骤一:创建项目 步骤二:添加依赖 步骤三:创建自动配置类 步骤四:创建属性类 步骤五:创建服务类 步骤六:添加自动配置类到Springboot自动配置列表中 步骤七:打包并发布 步骤八:在其他项目中使用自定义starter 结论 步骤一:创建项目 世界上最伟大的
前言 SpringBoot想必大家都用过,但是大家平时使用发布的接口大都是同步的,那么你知道如何优雅的实现异步呢? 这篇文章就是关于如何在Spring Boot中实现异步行为的。但首先,让我们看看同步和异步之间的区别。 同步编程:在同步编程中,任务一次执行一个,只有当一个任务完成时,下一个任务才会被解除阻塞。 异步编程:在异步编程中,可以同时执行多个任务。您可以在上一个任务完成之前转到另一个任
以前写Spring项目的时候,每次启动Tomcat可以自动打开并预览网页,但是后面使用SpringBoot项目(因为SpringBoot内置了Tomcat无法修改配置),每次启动项目然后再打开浏览器访问十分麻烦,通过编写一个代码类也可以实现类似的功能: @Component public class OpenBrowser implem
开发过程中我们会遇到很多使用线程池的场景,例如异步短信通知,异步发邮件,异步记录操作日志,异步处理批量Excel解析。这些异步处理的场景我们都可以把它放在线程池中去完成,当然还有很多场景也都可以使用线程池,掌握线程池后开发中自己灵活应用。 例如在生成订单的时候给用户发送短信,生成订单的结果不应该被发送短信的成功与否所左右,也就是说生成订单这个主操作是不依赖于发送短信这个操作,我们就可以把发送短信
目录Spring:现代Java开发的必备框架Spring创建bean的生命周期以及对应的接口和注解Spring使用三级缓存解决循环依赖的原理Spring使用三级缓存创建bean的过程Spring使用AOPSpringAOP的实现原理Spring使用事务管理Spring事务的原理DataSourceTransactionManager的实现DataSourceTransactionManager
纯Java搭建webapp QuickStart 使用纯 Java 来搭建一个 SSM 环境,即在项目中,不存在任何 XML 配置,包括 web.xml 1创建一个Maven工程 引入依赖 <!-- TODO 【Java创建SSM】1、引入依赖 --> <dependency> <groupId>org.springframework<
1.1开闭原则 开闭原则(open-closed principle,OCP)是指一个软件实体(如类,模块和函数)应该对扩展开放,对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调用抽象构建框架,用实现扩
1.1开闭原则 开闭原则(open-closed principle,OCP)是指一个软件实体(如类,模块和函数)应该对扩展开放,对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。 强调用抽象构建框架,用实现扩展细节,可以提高软件系统的可复用性及可维护性;例如版本更新时,我们尽可能不修改源代码就可以添加新功能。 首先创建一个课程接口JavaCourse /** * TODO 开
如何搭建一个传统的webapp项目【Java后端】 使用xml 来搭建 SSM 环境,要求 Tomcat 的版本必须在 7 以上 QuickStart 1创建工程 创建一个新模块【普通的 Maven 工程】 这里我们选择webapp作为maven的archetype 创建完成之后,项目默认的层级如下: 我们发现根本就没有java目录,这时候就需要手动创建一个java目录: 引入本次项目
统一返回对象Result 项目中我们会将响应封装成json返回,一般我们会将所有接口的数据格式统一, 使前端(iOS Android, Web)对数据的操作更一致、轻松。 一般情况下,统一返回数据格式没有固定的格式,只要能描述清楚返回的数据状态以及要返回的具体数据就可以。但是一般会包含状态码、返回消息、数据这几部分内容 例如,我们的系统要求返回的基本数据格式如下: 列表:** { "code
SpringBoot解决跨域的几种方式 跨域资源共享(CORS):通过修改Http协议header的方式,实现跨域。说的简单点就是,通过设置HTTP的响应头信息,告知浏览器哪些情况在不符合同源策略的条件下也可以跨域访问,浏览器通过解析Http协议中的Header执行具体判断。具体的Header如下: CORS跨域常用header Access-Control-Allow-Origin: 允许