Spring实战(四)Spring高级装配中的bean profile
profile的原意为轮廓、剖面等,软件开发中可以译为“配置”。
在3.1版本中,Spring引入了bean profile的功能。要使用profile,首先要将所有不同的bean定义整理到一个或多个profile中,在将应用部署到每个环境时,要确保对应的profile处于激活(active)状态。
1、@Profile注解应用在类上
在一个类上使用JavaConfig中的注解@Profile("xxx"),指定这个类中的bean属于某一个profile。
它告诉Spring,这个配置类中的bean只有在xxx profile激活时才会创建;
如果xxx profile没有被激活,那类中的@Bean注解的方法都会被忽略。
2、@Profile注解应用在方法上
Spring3.2开始,可以在方法级别上使用@Profile注解,与@Bean注解一起使用。
这样做的一个好处是,可以将不同的bean(所属的profile也不同)的声明,放在同一个配置类(@Configuration)中。
只有当指定的profile被激活时,相应的bean才会被创建。
而没有指定profile的bean,始终都会被创建。
@Configuration
public class AConfigClass{
@Bean
@Profile("A")
methodA(){...};
@Bean
@Profile("B")
methodB(){...};
}
3、XML中配置多个profile
以下<beans>元素嵌套在root <beans>中,这样也可以在一个XML文件中配置多个profile。
<beans profile="dev">
...
...
</beans>
4、如何激活某个profile?
Spring在确定某个profile是否被激活时,依赖两个独立的属性:
A---spring.profiles.active
B---spring.profiles.default
如果设置了A属性,它的值会优先被Spring用来确定哪个profile是激活的;
如果没有,Spring会查找B的值;
若A、B均没有设置,则没有激活的profile,Spring则只会创建没有定义在profile中的bean。
5、怎样设置上述A、B属性的值呢?
作者最喜欢的一种方式是使用DispatcherServlet的参数将spring.profiles.default设置为开发环境的profile,这样所有的开发人员都可以从版本控制软件中获得应用程序源码。
web.xml(web应用程序中)
<context-param>
<param-name>spring.profiles.default</param-name>
<param-value>dev</param-value>
</context-param>
6、测试时,激活相关的profile,Spring提供了@ActiveProfiles("dev")注解指定它在运行测试时激活。
Spring实战(四)Spring高级装配中的bean profile的更多相关文章
- 【Spring实战】Spring注解配置工作原理源码解析
一.背景知识 在[Spring实战]Spring容器初始化完成后执行初始化数据方法一文中说要分析其实现原理,于是就从源码中寻找答案,看源码容易跑偏,因此应当有个主线,或者带着问题.目标去看,这样才能最 ...
- 【转】【Spring实战】Spring注解配置工作原理源码解析
一.背景知识 在[Spring实战]Spring容器初始化完成后执行初始化数据方法一文中说要分析其实现原理,于是就从源码中寻找答案,看源码容易跑偏,因此应当有个主线,或者带着问题.目标去看,这样才能最 ...
- 【Spring实战】Spring容器初始化完成后执行初始化数据方法
一.背景知识及需求 在做WEB项目时,经常在项目第一次启动时利用WEB容器的监听.Servlet加载初始化等切入点为数据库准备数据,这些初始化数据是系统开始运行前必须的数据,例如权限组.系统选项.默认 ...
- (二)《Spring实战》——Spring核心
第二章:装配Bean 在Spring中,对象无需自己查找或创建与其所关联的其他对象.相反,容器负责把需要相互协作的对象引用赋予各个对象.例如,一个订单管理组件需要信用卡认证组件,但它不需要自己创建信用 ...
- spring实战四之Bean的自动装配(注解方式)
使用注解装配: 从spring2.5开始,Spring启用了使用注解自动装配Bean的属性,使用注解方式自动装配与在XML中使用 autowire 属性自动装配并没有太大区别,但是使用注解方式允许更细 ...
- Spring实战笔记2---Bean的装配
创建应用对象之间协作关系的行为通常成为装配,该篇的主要内容有两个,一个Spring装配Bean的几种方式以及Spring表达式,事实上这两者是分不开的,在Spring中,对象无需自己负责查找或者创建与 ...
- spring学习总结——高级装配学习一(profile与@Conditional)
前言: 在上一章装配Bean中,我们看到了一些最为核心的bean装配技术.你可能会发现上一章学到的知识有很大的用处.但是,bean装配所涉及的领域并不仅仅局限于上一章 所学习到的内容.Spring提供 ...
- spring实战第二章小记-装配bean
时间:2020/02/06 一.思想 1.创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入(DI)的本质. 对于上面这句话的个人理解:当我们在new一个对象时如果传入了别的对象作为参数(这个 ...
- Spring实战——通过Java代码装配bean
上篇说的是无需半行xml配置完成bean的自动化注入.这篇仍然不要任何xml配置,通过Java代码也能达到同样的效果. 这么说,是要把上篇的料拿出来再煮一遍? 当然不是,上篇我们几乎都在用注解的方式如 ...
随机推荐
- Docker容器数据券
1.是什么? 2.能干嘛? 3.数据卷 ——容器内添加 方式一:直接命令添加 1).命令 2).在宿主机上新建并添加内容 3).查看容器内相应共享文件夹,发现宿主机的文件夹下发生变化,会同步到容器内的 ...
- Flutter控制某个TextField获取焦点及失去焦点
在项目中有时需要点击某个地方的时候让一个文本框获取焦点以弹起键盘~~比如前端经常使用的input.focus(),但是在flutter中没有.focus()这个方法~~不过我们可以通过FocusSco ...
- [转][echarts]地图轮播
代码片断: 来自:https://blog.csdn.net/qq_36947128/article/details/90899564 function Play(){ chart.dispatchA ...
- python笔记6 模块与包 程序开发规范 包 re sys time os模块
模块与包 python 模块首引用加载到内存,如果再次引用此模块,直接从内存中读取. python文件分为:执行文件(解释器运行的文件),被引用文件(import) 模块引用一共发生了3件事: 1.他 ...
- [go]ini配置文件解析
// config.ini [app] server.port = 8080 name = resk enabled = false time = 10s ;我是一个注释 #mysql数据库配置 [m ...
- kotlin 之相等判断
在kotlin 中存在二种相等的判断: 1.引用相等 也就是说,两个引用指向同一个对象,使用===操作 ,相反操作为!==来判断 2.结构相等 使用equals 函数相等和==操作符 a?.equal ...
- kotlin委托属性
fun main(arg: Array<String>) { val myClass1 = myClass1() myClass1.name="mycalsss1" v ...
- app怎么获取package与active name
1.aapt dump badging apk名称 2.adb logcat | grep START 或者 adb shell "logcat | grep START" 然后在 ...
- Jquery Easyui与Jquery Bootstrap的比较
1.easyui是js框架 :bootstrap 是css框架 ,bootstrap = 样式库 + 一堆jQuery插件,顺便解释一句,如果你只需要bootstrap的样式,你完全不用引入jQuer ...
- windows是下安装nvmw
nvmw:Windows环境下的node多版本管理工具. 安装: 1. git clone https://github.com/hakobera/nvmw.git 2.修改环境变量 计算机 -&g ...