Spring 高级装配

本贴最后更新于 3185 天前,其中的信息可能已经天翻地覆

 

  • 在 JavaConfig 中使用 @Profile 注解指定某个 bean 属于哪个 profile,只有在规定 profile时 bean 才会被创建,没有指定 profile 的 bean 会始终被创建。

  • 在 xml 中可以通过 <beans> 元素的 profile 属性配置 bean,还可以在根<beans>元素中嵌套定义<beans>元素,而不是为每一个 profile 创建一个 xml 配置。

  • spring 通过 spring.profiles.activespring.profiles.default 确定激活哪一个 profile,如果设置了 active,将用 active 的值作为激活的 profile,否则将会使用 default 的值作为激活的 profile。如果均未设置,表示没有激活的 profile,只创建没有定义在 profile 中的 bean。

  • 有多种方式可以设置配置 profile 的两个属性(activedefault): 作为 DispatcherServlet 的初始化参数作为 web.xml 的参数作为 JDNI 条目作为环境变量作为 JVM 系统属性在集成测试类上使用@ActiveProfiles 注解设置

  • 可以在 web.xml 中使用<context-param>为上下文设置默认的 profile,在生产环境中根据情况设置 spring.profiles.active,方便开发人员从版本控制软件中获取源码。

  • @ActiveProfiles 注解可以指定在运行测试时使用哪个 profile。

  • @Conditional(yourCondition.class) 注解可以用在带有@Bean注解的方法上,给定条件满足时才会创建 bean,yourCondition.class 需要实现 Condition 接口。

  • 可以通过 @Primary 注解设置首选 bean 来解决自动装配中多个 bean 满足条件的歧义性,在 xml中可以通过<bean primary="true" />来设置。

  • 装配限定符 @Qualifier("qualifierName") 可以与 @Autowired 协同使用,表明要注入哪个 bean。@Qualifier("qualifierName") 也表示给 bean 指定限定符,没有指定 bean 的限定符时,会有一个默认的限定符与 ID 相同。@Qualifier 的最佳实践是为 bean 选择特征性或描述性的术语。需要同时使用多个限定符时,可以创建自定义的限定符注解。

  • 默认情况下,spring 应用上下文中 bean 都以单例 Singleton的形式创建。除单例外,spring 还提供多种作用域:原型 Prototype会话 Session请求 Request

  • 选择其他作用域,要使用 @Scope 注解,例如@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)。xml 中可以使用 bean 下的 scope 属性来设置。

  • @Scope 注解还有一个proxyMode属性,用来指定将其他作用域的 bean 装配到单例 bean 中时的代理模式,ScopedProxyMode.INTERFACES表明要实现对应接口,ScopedProxyMode.TARGET_CLASS表明要以生成目标扩展类的方式创建代理。

  • spring 处理外部值时,可以声明属性源并通过 spring 的 Environment 来检索属性,例如使用注解 @PropertySource("classpath:/com/xxx/aaa.properties"),注入 Environment env,通过 env 的 getProperty()方法获取。如果要求属性必须定义,可以使用 env.getRequiredProperty("xxx")获取,在没有找到定义时抛出异常。

  • spring支持将属性定义到外部的属性的文件中,通过占位符的形式为使用 ${...} 的属性名称包装。

  • spring 的表达式语言 SpEL 要放在 #{...} 中,T()运算符的结果为 class 对象,能够使用目标类型的静态方法和常亮。

  • SpEL 通过 matches 运算符支持表达式模式匹配,返回 boolean 值,例如 #{admin.email matches '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9._]+\\.com'} 匹配email 地址。

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3203 引用 • 8217 回帖
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    948 引用 • 1460 回帖 • 3 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖 • 1 关注
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 74 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 687 关注
  • 倾城之链
    23 引用 • 66 回帖 • 173 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 92 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 4 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    240 引用 • 224 回帖
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    188 引用 • 832 回帖
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 41 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    442 引用 • 1238 回帖 • 599 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 688 关注
  • 博客

    记录并分享人生的经历。

    273 引用 • 2389 回帖 • 4 关注
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 697 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 165 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    89 引用 • 150 回帖
  • 安全

    安全永远都不是一个小问题。

    200 引用 • 818 回帖 • 2 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    694 引用 • 537 回帖
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 398 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    957 引用 • 944 回帖
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    77 引用 • 37 回帖 • 1 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    135 引用 • 798 回帖
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    167 引用 • 408 回帖 • 484 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    500 引用 • 1396 回帖 • 253 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 368 关注
  • V2Ray
    1 引用 • 15 回帖 • 5 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 507 关注