• 概述
  • Bean不同配置方式比较
  • Bean不同配置方式的使用场景
    • 基于XML配置
    • 基于注解配置
    • 基于Java类配置
    • 基于Groovy的配置
  • 总结

概述

对于Spring来讲,为实现Bean的信息定义,提供了基于XML、基于注解、基于JAVA类、基于Groovy这4种选项,同事还允许各种配置方式复合共存。

Bean不同配置方式比较

类别 基于XML配置 基于注解配置 基于Java类配置 基于Groovy DSL配置
Bean定义 在XML文件中通过<bean>元素定义Bean,如:<bean class="com.xgj.UserDao"/> 在Bean实现类处通过标注@Component或衍型类@Repository、@Service及@Controller定义Bean 在标注了@Configuration的Java类中,通过在类方法上标注@Bean定义一个Bean。方法必须提供Bean的实例化逻辑 在Groovy 文件中通过DSL定义Bean的名称 ,如 userDao(UserDao)
Bean名称 通过<bean>的id或name属性定义,如:<bean id="userDao" class="com.xgj.UserDao"/> 默认名称为:com.xgj.userDao#0 通过注解的value属性定义,如@Component(“userDao”)。默认名称为小写字母打头的类名(不带包名):userDao 通过@Bean的name属性定义,如@Bean(“userDao”),默认名称为方法名 通过GroovyDSL定义Bean的名称
Bean注入 通过<property>子元素或通过p命名空间的动态属性,如p:userDao-ref=”userDao”进行注入 通过在成员变量或方法入参处标注@Autowired,按类型匹配自动注入。还可以配合使用@Qualifier按名称匹配方式注入 比较灵活,可以通过在方法处通过@Autowired方法入参绑定Bean,然后在方法中通过代码进行注入,还可以通过调用配置类的@Bean方法进行注入 比较灵活,可以在方法出通过ref()方法进行注入,如ref(“logDao”)
Bean生命过程方法 通过<bean>的init-method和destory-method属性指定Bean实现类的方法名。最多只能指定一个初始化方法和一个销毁方法。 通过在目标方法上标注@PostConstruct和@PreDestroy注解指定初始化或销毁方法,可以定义任意多个方法 通过@Bean的initMethod或destoryMethod指定一个初始化或销毁方法.对于初始化方法来说,你可以直接在方法内部通过代码的方式灵活定义初始化逻辑 通过bean->bean,initMehtod或者bean.destoryMethod指定一个初始化或者销毁方法
Bean作用范围 通过<bean>的scope属性指定,如:<bean class="com.xgj.UserDao" scope="prototype"/> 通过在类定义处标注@Scope指定,如@Scope(“prototype”) 通过在Bean方法定义处标注@Scope指定 通过bean->bean,scope=”prototype”指定
Bean延迟初始化 通过<bean>的lazy-init属性指定,默认为default,继承于的default-lazy-init设置,该值默认为false 通过在类定义处标注@Lazy指定,如@Lazy(true) 通过在Bean方法定义处标注@Lazy指定 通过bean->bean.lazyInit-true指定

Bean不同配置方式的使用场景

基于XML配置

  • 1)Bean实现类来源于第三方类库,如DataSource,JdbcTemplate等,因无法在类中标注注解,通过XML配置方式较好;

  • 2)命名空间的配置,如aop、context等,只能采用基于XML的配置


基于注解配置

Bean的实现类是当前项目开发的,可以直接在Java类中使用基于注解的配置


基于Java类配置

基于Java类配置的优势在于可以通过代码方式控制Bean初始化的整体逻辑。所以如果实例化Bean的逻辑比较复杂,则比较适合用基于Java类配置的方式


基于Groovy的配置

基于Groovy DSL配置优势在于可以通过Groovy脚本灵活控制Bean初始化的过程, 如果bean的逻辑较为复杂,则比较适合使用Groovy DSL配置的方式。


总结

综上所述,我们一般采用XML配置DataSource、SessionFactory等资源Bean,在XML中利用aop 和 context等命名空间进行相关主题的配置,其他所有项目中开发的bean 都通过基于注解配置的方式进行配置,即这个项目采用“基于XML+基于注解”的配置方式,很少采用基于JAVA类的配置方式。

Spring-不同配置方式的比较相关推荐

  1. struts+spring的配置方式总结

    现在最流行的j2ee的程序,一般都是用struts+spring+hibernate框架做的,spring+hibernate的配置方式很简单,这里就不说了,下面对struts+spring的几种配置 ...

  2. Spring Bean配置方式之一:Java配置

    简介: Spring bean 是使用传统的 XML 方法配置的.在这篇文章中,您将学习使用基于纯 Java 的配置而非 XML 来编写 Spring bean 并配置它们.本文将介绍可用来配置 be ...

  3. Spring事务配置方式(一) 拦截器方式配置

    一.使用<tx:advice>和<aop:config>配置事务 <!-- 配置事务管理器 --><bean id="transactionMana ...

  4. Spring基于配置方式实现自定义条件装配

    @Profile Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能 @Profile指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件 @Pro ...

  5. spring配置方式:

    spring中配置方式可以完全使用注解也可以完全使用注解实现,但是大部分都是用xml加注解,这样不仅兼顾了效率,也提高了程序的可读性: 但是需要注意的是: 纯注解实现时:需配置扫描: <cont ...

  6. SpringDataJPA教程 三种配置方式

    本教程分为三类配置 1.spring xml配置文件方式 2.spring 注解配置方式 3.springboot 配置方式 1.xml配置方式 引入maven依赖 <dependencies& ...

  7. Spring YAML配置

    Spring YAML配置 使用yaml配置文件是Spring多种配置方式之一,本文介绍使用yaml配置Spring boot多种profile. 1. Spring YAML文件 Spring pr ...

  8. SSH深度历险(六) 深入浅出----- Spring事务配置的五种方式

    这对时间在学习SSH中Spring架构,Spring的事务配置做了具体总结.在此之间对Spring的事务配置仅仅是停留在听说的阶段,总结一下.总体把控.通过这次的学习发觉Spring的事务配置仅仅要把 ...

  9. Spring Boot 添加拦截器的配置方式

    在进行 Java Web 开发的时候我们经常会使用到过滤器,例如日志的记录.权限的验证等功能.以前使用 Spring MVC 的时候需要在 web.xml 中配置过滤器,现在使用 Spring Boo ...

  10. Spring Boot 2.x基础教程:使用MyBatis的XML配置方式

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | http://blog.di ...

最新文章

  1. 树、森林与二叉树的转换
  2. vue指令:v-pre原样输出,不解析插值表达式
  3. 高德推出查岗功能_新型「查岗」工具?高德推出「家人地图」新功能
  4. 8.Java有关变量的面试题
  5. CodeForces - 1343F Restore the Permutation by Sorted Segments(思维)
  6. wps 复制流程图_简单三步,用WPS轻松完成一个又大气又好看的流程图!
  7. 视觉SLAM笔记(28) Ceres
  8. 游族网络:已获得《三体》系列小说游戏开发、改编等权利
  9. [转]asp 无法连接 access,出现 -2147467259 未指定的错误
  10. 免费好用的 PDF 编辑器推荐
  11. jQuery入门视频教程
  12. 数据库系统工程师真题及详解(2015~2021)
  13. 太牛了,2万字用Python深度探索金庸小说世界!
  14. pde中微元分析法的主要思想_有限元法(FEM)
  15. Chrome离线安装CRX插件方法
  16. ICCV2021:Focal Frequency Loss for Image Reconstruction and Synthesis
  17. 如何利用英特尔管理工具绕过Windows防火墙
  18. pycharm设置控制台的解释器_PyCharm设置
  19. 响铃:抖音的敌人不是快手
  20. mysql是怎么实现多对多的_mysql复习篇及一对多和多对多的总结(17.6.26 )

热门文章

  1. 北大邮箱收件服务器,北京大学微电子学研究院邮件系统
  2. maven 程序包不存在_有人说 Maven 很简单,我却被“伤害”过
  3. 重温强化学习之函数近似
  4. 错误解决 :Microsoft Visual C++ 14.0 is require Microsoft Visual C++ Builder 包丢失或者损坏
  5. Linux疑难杂症解决方案100篇(八)-文本处理工具与bash的特性
  6. tableau必知必会之拖拽功能失效是怎么回事
  7. Tableau必知必会之妙用Fixed函数聚合分析维度
  8. MATLAB基本操作(六):矩阵操作的相关函数
  9. php 错误关闭_五种方法教你如何关闭php错误回显信息
  10. win7 安装openssh_Win732位旗舰版老友纯净版安装OpenSSH的方法