当springboot有多个不能名称但是相同bean的时候,可以使用 @Primary 注解设置其中一个为主要默认bean 有些类它没有用别名去注入bean,会导致注入的时候找到多个相同bean,报错 /** * 短信类线程 */ public static final String SMS = "smsTaskExecutor"; /** * 默认通用线程池 executor.setQueueCapacity(20); // 设置线程活跃时间(秒) executor.setKeepAliveSeconds(60); // 设置默认线程名称 executor.setQueueCapacity(20); // 设置线程活跃时间(秒) executor.setKeepAliveSeconds(60); // 设置默认线程名称 executor.setQueueCapacity(20); // 设置线程活跃时间(秒) executor.setKeepAliveSeconds(60); // 设置默认线程名称
01 前言 用了多年spring,一直想当然把spring默认的beanName当成是类名的首字母小写,比如HelloService其beanName为helloService。 直到有天对接了供方厂商的接口,他有个类形如ABService,于是用 getBean(“aBService”) 的方式获取bean,结果取到是null,一开始以为是ABservice没注入,后面采用 getBean @245b6b85 beanName竟然是ABService,这就和之前的想当然有出入。 * @return The decapitalized version of the string. */ 04 总结 通过扫描bean注解注入IOC时,如果不指定bean名称的默认规则是类名的首字母小写 ,如果类名前两个或以上个字母都是大写,那么bean名称与类名一样。
前言 用了多年spring,一直想当然把spring默认的beanName当成是类名的首字母小写,比如HelloService其beanName为helloService。 直到有天对接了供方厂商的接口,他有个类形如ABService,于是用 getBean(“aBService”) 的方式获取bean,结果取到是null,一开始以为是ABservice没注入,后面采用 @245b6b85 beanName竟然是ABService,这就和之前的想当然有出入。 * @return The decapitalized version of the string. */ 总结 通过扫描bean注解注入IOC时,如果不指定bean名称的默认规则是类名的首字母小写 ,如果类名前两个或以上个字母都是大写,那么bean名称与类名一样。
Bean元数据中获取到Bean的名称。 如果Bean定义是一个带注解的Bean定义,会调用determineBeanNameFromAnnotation()方法来基于注解生成Bean名称;否则会使用默认的Bean名称生成策略buildDefaultBeanName 默认Bean名称生成策略部分:实现了buildDefaultBeanName()方法和getComponentAnnotation()方法,用于生成默认的Bean名称。 当然,@Value中是可以不配置信息的,此时执行fallBack,即调用 buildDefaultBeanName 方法生成一个默认的 Bean 名称,并返回。 AnnotationBeanNameGenerator 的缺点则是: 如果注解中未指定 Bean 名称,该生成器会默认使用类名作为 Bean 名称,这可能导致出现多个类名相同的 Bean,需要特别注意;
与原型bean的区别 如果一个bean被声明为单例的时候,在处理多次请求的时候在Spring容器里只实例化出一个bean,后续的请求都公用这个对象,这个对象会保存在一个map里面。 但是对于原型(prototype)bean来说当每次请求来的时候直接实例化新的bean,没有缓存以及从缓存查的过程。 1.画图分析 2.源码分析 生成bean时先判断单例的还是原型的 如果是单例的则先尝试从缓存里获取,没有在新创建 结论: 单例的bean只有第一次创建新的bean 后面都会复用该bean,所以不会频繁创建对象 单例bean的劣势 单例的bean一个很大的劣势就是他不能做到线程安全!!! 总结 Spring 为啥把bean默认设计成单例? 答案:为了提高性能!!! 从几个方面: 少创建实例 垃圾回收 缓存快速获取 单例有啥劣势? 如果是有状态的话在并发环境下线程不安全。
与原型bean的区别 如果一个bean被声明为单例的时候,在处理多次请求的时候在Spring容器里只实例化出一个bean,后续的请求都公用这个对象,这个对象会保存在一个map里面。 但是对于原型(prototype)bean来说当每次请求来的时候直接实例化新的bean,没有缓存以及从缓存查的过程。 1.画图分析 2.源码分析 生成bean时先判断单例的还是原型的 如果是单例的则先尝试从缓存里获取,没有在新创建 结论: 单例的bean只有第一次创建新的bean 后面都会复用该bean,所以不会频繁创建对象 有关bean实例化相关可以看着篇文章: https://juejin.im/post/5ca42bfa6fb9a05e17799e07 ---- 单例bean的劣势 单例的bean一个很大的劣势就是他不能做到线程安全 关于这方面我正在准备写一篇文章,在整理当中,感兴趣的朋友可以关注我,我后续写一篇详细的文章。 ---- 总结 Spring 为啥把bean默认设计成单例? 答案:为了提高性能!!!
#在箭头处添加 net.ifnames=0 biosdevname=0 2.重新生成grub引导配置文件 grub-mkconfig -o /boot/grub/grub.cfg 3.修改接口名称 nano /etc/network/interfaces #将箭头处改为 eth0 4.重启操作系统 可能发生的错误: reboot后网卡无法启动 解决方法 将 auto eth0 放到
本篇文章讲解了Spring的通过内部Bean设置Bean的属性。 类似内部类,内部Bean与普通的Bean关联不同的是: 1 普通的Bean,在其他的Bean实例引用时,都引用同一个实例。 2 内部Bean,每次引用时都是新创建的实例。 鉴于上述的场景,内部Bean是一个很常用的编程模式。 下面先通过前文所述的表演者的例子,描述一下主要的类: package com.spring.test.setter; import com.spring.test.action1.PerformanceException public interface Performer { void perform() throws PerformanceException; } 如果使用 设值注入 需要设定属性和相应的setter
借助Application.ActivePrinter属性,一方面可以查询当前默认打印机的名称,另一方面,也可以指定默认打印机的名称。 Printer_original As String Dim Path As String, path_saved As String, name_file As String '1 记录最开始的默认打印机 PrToFileName:=path_saved, IgnorePrintAreas:=False Workbooks(name_file).Close False '3 恢复默认的打印机 Application.ActivePrinter = Printer_original End Sub 该代码主要分为三步:(1)先记录当前默认打印机的名称,一般电脑默认连接的是实体打印机 ;(2)借助Printout函数将指定的Excel文件转换为PDF文件,此时默认打印机的名称已经发生变化,转变成了Microsoft Print to PDF; (3)恢复默认的打印机,也就是第(1)步保存的打印机名称
如下图: [avatar] 然后登陆到FTP,找到根目录下的data文件夹然后打开进入backupdata这个文件夹,找到类似 dede_admin_0_ba5fabe4aa5ff9a7.txt这个文件 ,前缀都是一样的,后缀可能会不一样。 下载到本地,用记事本打开,有个admin,这就是默认的ID号,改成你想要的名字即可,然后保存。如图: [avatar] 然后上传覆盖原来的即可(不放心可以提前备份一下)。 如图: [avatar] [avatar] 然后你会发现登陆ID已经变成你改的名称了。 [avatar]
Spring 上一篇文章中已介绍了Bean 的定义,什么是BeanDefinition? 下面主要源码结合模式分析BeanDefinition元信息「Bean的配置元信息」 下面罗列了BeanDefinition元信息配置 ? 上面一表格形式概括说明BeanDefinition元信息配置,不是所有的属性配置都是必须的,但是前面几个参数属性是必须的 附加补充说明 Bean 的作用域 (比如:我们常用的singleton、prototype Bean 的延迟初始化的模式,默认情况下是非延迟的,就是Bean在容器启动过程中会实时进行初始化,此时相对应的属性或则配置会进行一定的设置;相反延迟化的,是按需进行初始化,这种方式可以有效减少启动时间, 需要的时候对Bean进行初始化 Bean 的初始化 & 销毁,通常都是成对出现 如何构建BeanDefinition?
专题有一个聚合的效果,一般会比普通的文章页更符合用户需求。 如果用dedecms建专题的话,默认的目录是special,怎么修改修改dedecms专题目录名称呢,比如将/special/改为/s/这样更好记忆? 这样改也不容易让同行发现,不然你辛辛苦苦建的专题几分钟时间就成为别人的了。 $dirarray[$i++] = addDir('/zt', '专题目录', 0, 0, 1); 第三步:打开/include/common.inc.php //专题列表的存放路径 $cfg_special; 改为如下: //专题列表的存放路径 $cfg_special = $cfg_cmspath.'
与原型bean的区别 如果一个bean被声明为单例的时候,在处理多次请求的时候在Spring容器里只实例化出一个bean,后续的请求都公用这个对象,这个对象会保存在一个map里面。 但是对于原型(prototype)bean来说当每次请求来的时候直接实例化新的bean,没有缓存以及从缓存查的过程。 1.画图分析 2.源码分析 生成bean时先判断单例的还是原型的 如果是单例的则先尝试从缓存里获取,没有在新创建 结论: 单例的bean只有第一次创建新的bean 后面都会复用该bean,所以不会频繁创建对象 有关bean实例化相关可以看着篇文章: https://juejin.im/post/5ca42bfa6fb9a05e17799e07 ---- 单例bean的劣势 单例的bean一个很大的劣势就是他不能做到线程安全 关于这方面我正在准备写一篇文章,在整理当中,感兴趣的朋友可以关注我,我后续写一篇详细的文章。 ---- 总结 Spring 为啥把bean默认设计成单例? 答案:为了提高性能!!!
(bean容器)会存放bean定义及bean名称集合等等 DefaultListableBeanFactory父类DefaultSingletonBeanRegistry会缓存所有实例化的bean 接下来继续查看 AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner的创建 2、注册默认后置处理器 调用AnnotatedBeanDefinitionReader 注册默认扫描的方式 protected void registerDefaultFilters() { // 注册过滤器 添加 @Component // @Controller @Service 容器 配置类bean添加到beanDefinitionMap中,与默认后置处理器存放在一起 三、总结 本篇文章主要讲述刷新上下文前的准备工作 创建bean工厂容器,也就是map对象,以后缓存单例对象 添加常用注册 bean和解析注解的后置处理器 创建根据包路径扫描bean定义的类
一些使用小细节就是在不断的源码探索中逐步发现的,今天就来和小伙伴们聊一下通过 beanName 的设置,可以让一个 bean 拒绝被代理! 1. beanName 我没有使用默认的 beanName,而是自己配置了一个 beanName,这个 beanName 的配置方式是 类名的完整路径+.ORIGINAL。 当我们按照这样的规则给 bean 取名之后,那么即使当前 bean 已经包含在切点所定义的范围内,这个 bean 也不会被代理了。 这是 Spring5.1 开始的新玩法。 这种写法的原理是什么呢? ,增加了额外的能力: 在 bean 实例化之前先做一些预处理,例如直接创建代理对象,代替后续的 bean 生成。 为 false,则表示这个 bean 是不需要代理的。
单例bean与原型bean的区别 单例:一个bean被声明为单例时,处理多次请求时spring容器里只实例化一个bean,后续的请求公用这个对象,这个对象存储在一个map中,当有请求时,先在缓存中(map 结论: 1、单例的bean只有第一次创建新的bean 后面都会复用该bean,所以不会频繁创建对象。 减少jvm垃圾回收 由于不会给每个请求都新生成bean实例,所以自然回收的对象少了。 可以快速获取到bean 因为单例的获取bean操作除了第一次生成之外其余的都是从缓存里获取的所以很快。 单例bean的劣势 单例的bean一个很大的劣势就是他不能做到线程安全,由于所有请求都共享一个bean实例,所以这个bean要是有状态的一个bean的话可能在并发场景下出现问题,而原型的bean则不会有这样问题 总结 面试题:Spring 为啥把bean默认设计成单例? 答案: 为了提高性能 少创建实例* 垃圾回收 缓存快速获取 单例有啥劣势? 如果是有状态的话在并发环境下线程不安全。 什么是有状态对象?
你可以实现自己的用户详情服务(UserDetailsService)来提供用户信息,或者使用 Spring Security 提供的默认实现。 也可以使用 Spring Security 提供的默认实现,例如 InMemoryUserDetailsManager、JdbcUserDetailsManager 等。 auth.userDetailsService(userDetailsService) .passwordEncoder(passwordEncoder()); } @Bean 2.1 UsernamePasswordAuthenticationFilter UsernamePasswordAuthenticationFilter 是Spring Security提供的默认身份验证过滤器 认证成功处理器的主要作用是允许开发人员自定义在认证成功后的处理逻辑,以满足特定的业务需求,它提供了一种灵活的方式来处理认证成功后的操作。
WordPress自带的TinyMCE编辑器,对于一般的文字编辑已足够了,但还是有童鞋希望它功能更多,所以诞生了各种编辑器增强插件,其实不用插件也可以为默认编辑器增加各种功能,下面的方法可以为编辑器增加选择中文字体功能 1、将如下代码加到当前主题的 functions.php 模板文件中: function custum_fontfamily($initArray){ $initArray['font_formats ='幼圆';"; return $initArray;}add_filter('tiny_mce_before_init', 'custum_fontfamily'); 2、WordPress默认
怎么给缺失的参数赋值默认值,在ES6之前,并没有太简洁的方法,如下段代码所示: function myFunction(x, y, z) { x = x === undefined ? 3 : z; console.log(x, y, z); //Output "6 7 3" } myFunction(6, 7); 这种写法是不是比较麻烦?默认值的设置是不是不够直观? 在ES6中,我们可以用更简洁的语法进行实现,通过本篇文章你将学习到以下内容: 使用ES6语法声明参数默认值 使用undefined传参 参数运算 本篇文章阅读时间预计3分钟 01 使用ES6语法声明参数默认值 myFunction(6,7); // Outputs 6 7 3 在上述代码示例中,我们在调用此函数中传递了前两个参数,因此参数的默认值(即x=1和y=2)将会被覆盖(即x=6和y=7)。 而这些接口的友好性是决定这个组件质量的一大指标,其中参数缺省值(默认值)的完善程度同时也影响接口的友好性,感谢ES6能让我们用如此简洁的语法设置参数的缺省值。
怎么给缺失的参数赋值默认值,在ES6之前,没有相关简单易用的方法分配给缺失参数默认值,但是我们一般可以这么编写代码解决缺失参数默认值: function myFunction(x, y, z) { x : 使用ES6语法声明参数默认值 使用undefined传参 参数运算 本篇文章阅读时间5分钟 使用ES6语法声明参数默认值 我们可以使用ES6简洁的语法,如下示例进行声明函数参数的默认值: function ,我们在调用此函数中传递了前两个参数,因此参数的默认值(即x=1和y=2)将会被覆盖(即x=6和y=7)。 参数运算 在ES6中我们不仅可以给参数默认赋值具体的参数,同时参数赋值支持参数的逻辑运算进行赋值,如下段代码所示: function myFunction(x = 1, y = 2, z = x + y 而这些接口的友好性是决定这个组件质量的一大指标,其中参数缺省值(默认值)的完善程度同时也影响接口的友好性,感谢ES6能让我们用如此简介的语法设置参数的缺省值。