spring java配置

我发现许多我认识的Spring开发人员仍然不了解或使用Spring Java Configuration(aka JavaConfig)。 Spring 3.0引入了此功能,该功能使Spring可以完全用Java进行配置-不再需要XML! 我真的很喜欢使用JavaConfig,因为,好吧,它是Java! 这意味着它具有Java类型安全和IDE支持的所有优点:

  • 打字错误生成编译错误–无需等待加载时间即可找到XML错字
  • IDE重构工具将自动更新JavaConfig,因为它是常规Java
  • 可以使用IDE自动导入功能来代替在XML中键入完全限定的类名
  • IDE向下钻取功能
  • IDE自动完成功能
  • 我想您明白了,它与Java兼容。

上面的某些功能确实内置在具有Spring支持的更高级的IDE中,但是最好不要依赖自定义IDE Spring支持来获得这些功能。 对我而言,编译时检查是一项重大工作。 我经常重构代码,更改字段名或移动或重命名Java文件经常会破坏XML Spring配置。 当然,在部署应用程序并收到Spring初始化错误之前,我通常不会意识到这一点。 现在,当我重构代码时,IDE会自动更新JavaConfig引用,因为它只是普通的Java。 另外,如果我忘记使用IDE的重构工具,那么JavaConfig中仍然会出现编译错误,该错误会在部署前提醒我出现问题。

让我展示一个有关XML配置如何转换为JavaConfig的基本示例。 首先,XML配置:

<beans><bean id="PersonService" class="com.codetutr.PersonService"><constructor-arg ref="personDao" /></bean><bean id="personDao" class="com.codetutr.dao.PersonDao"><property name="endpoint" value="localhost" /></bean>
</beans>

转换为JavaConfig:

package com.codetutr.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.codetutr.dao.PersonDao;
import com.codetutr.service.PersonService;@Configuration
public class AppConfig {@Beanpublic PersonService personService() {return new PersonService(personDao());}@Beanpublic PersonDao personDao() {PersonDao personDao = new PersonDao();personDao.setEndpoint("localhost");return personDao;}}

这是一个非常简单的一对一转换。 每个<beans>文档都转换为带有@Configuration注释的Java类。 每个<bean>元素都转换为带有@Bean注释的单个方法。 方法的名称与bean ID相对应。 要在JavaConfig中引用另一个bean,只需调用所需bean的方法(请参见上面的personService )。

我对Spring JavaConfig的另一种观察是,使用构造函数注入而不是setter注入更为自然-因为它导致一种单行方法。 对我来说这是一个优点,因为我通常更喜欢构造函数注入。 如果一个类需要某些依赖项才能正常运行,我更喜欢在构造函数中要求它们。 这样,我可以确保将类初始化为有效状态。 我注意到,无论出于何种原因,构造器注入似乎在XML配置中很少使用。 也许constructor-arg太难记了? 我不知道,但是我喜欢JavaConfig似乎可以带回一些东西。

现在,为了引导JavaConfig Application Context,Spring提供了一个新的ApplicationContext实现: AnnotationConfigApplicationContext 。 它的用法与使用ClassPathXmlApplicationContext用法相同:

ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
PersonService personService = ctx.getBean(PersonService.class);

或者,如果您在Web应用程序中:

<servlet><servlet-name>myServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextClass</param-name><param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value></init-param><init-param><param-name>contextConfigLocation</param-name><param-value>com.codetutr.config.AppConfig</param-value></init-param><load-on-startup>1</load-on-startup>
</servlet>

请注意,可以为上面的contextConfigLocation参数传递程序包名称或类名称。

或者最后,如果您使用的是Servlet 3的Java配置:

public class SpringWebAppInitializer implements WebApplicationInitializer {@Overridepublic void onStartup(final ServletContext servletContext) throws ServletException {final AnnotationConfigWebApplicationContext springContext = new AnnotationConfigWebApplicationContext();springContext.register(AppConfig.class);final ServletRegistration.Dynamic springServlet = servletContext.addServlet("myServlet", new DispatcherServlet(springContext));springServlet.setLoadOnStartup(1);springServlet.addMapping("/*");}
}

这篇文章只是刮擦了JavaConfig的表面。 我将继续发布有关如何从其他@Configuration类或XML文件导入bean以及如何使用自定义名称空间的文章。 另外,请查看我的文章有关如何使用JavaConfig设置Spring-MVC应用程序 。

参考: CodeTutr博客上来自我们JCG合作伙伴 Steve Hanson的Spring Java Configuration 。

翻译自: https://www.javacodegeeks.com/2013/04/spring-java-configuration.html

spring java配置

spring java配置_Spring Java配置相关推荐

  1. spring mvc mysql配置_spring mvc配置数据库连接

    ACM 配置中心实战:Spring + MyBatis + Druid + ACM 很多基于 Spring MVC 框架的 Web 开发中,Spring + MyBatis + Druid 是一个黄金 ...

  2. jdbctemplate mysql 配置_Spring JDBCTemplate配置使用

    一.开发环境 Windows 10 IntelliJ IDEA 2016.1 旗舰版 JDK1.8 二.项目和数据库结构 项目结构: 数据库(MySQL 5.5.39): /* Navicat MyS ...

  3. spring java配置_Spring:使基于Java的配置更加优雅

    spring java配置 大家好,我很久没有写新文章了. 积累了很多资料,需要在不久的将来在我的博客中发布. 但是现在我想谈谈Spring MVC应用程序配置. 确切地说,我想谈谈基于Java的Sp ...

  4. Spring Boot 整合 Quartz 实现 Java 定时任务的动态配置

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 首先说下这次主题,动态配置.没接触过定时任务的同学可以先看 ...

  5. java+++多数据源配置,Spring Cloud + Mybatis 多数据源配置

    项目开发中遇到缺陷,使用多数据源能避免分库间数据同步的步骤,在此记录配置步骤. 一.数据源自动配置禁用 1.将spring boot自带的DataSourceAutoConfiguration禁掉,防 ...

  6. Java Spring Data Redis实战与配置参数详解 application.properties...

    Redis作为开源分布式高并发缓存,使用范围非常广泛,主流互联网公司几乎都在使用. Java Spring Boot 2.0实战开发Redis缓存可以参考下面的步骤,Redis安装可以直接使用Linu ...

  7. spring boot框架学习学前掌握之重要注解(2)-通过java的配置方式进行配置spring

    本节主要内容: 1:通过代码演示实现零XML配置spring 2:使用重点注解理解 声明: 本文是<凯哥陪你学系列-框架学习之spring boot框架学习>中spring boot框架学 ...

  8. 零配置 之Spring基于Java类定义Bean配置元数据

    转载自  [第十二章]零配置 之 12.4 基于Java类定义Bean配置元数据 --跟我学spring3 12.4  基于Java类定义Bean配置元数据 12.4.1  概述 基于Java类定义B ...

  9. Spring:使基于Java的配置更加优雅

    大家好,我很久没有写新文章了. 积累了很多资料,需要在不久的将来在我的博客中发布. 但是现在我想谈谈Spring MVC应用程序配置. 确切地说,我想谈谈基于Java的Spring配置. 尽管在3.0 ...

最新文章

  1. 【转】关于 SELECT /*!40001 SQL_NO_CACHE */ * FROM 的解惑
  2. PHP之mb_internal_encoding使用
  3. 开放搜索查询分析服务架构解读
  4. spring boot + vue + element-ui全栈开发入门
  5. java读取csv合适文件_解析-您可以推荐一个Java库来读取(并可能写入)CSV文件吗?...
  6. python itemgetter函数用法_Python中的sorted函数以及operator.itemgetter函数
  7. JavaScript中数组去重汇总
  8. php preg_split,php汉字截取函数_preg_split()
  9. 拓端tecdat|新能源车主数据图鉴
  10. 【数据结构】KMP算法分析与理解(图文分析)
  11. 金额转换,阿拉伯数字的金额转换成中国传统的形式
  12. 应用程序错误(0xc0000135)
  13. linux dsi接口,RPi 树莓派 DSI 接口研究 MIPI raspberry pi
  14. 使用地图编辑器构建游戏场景
  15. winxp下用ssh控制 linux 服务器
  16. 如何利用自己的数据制作社交地图?只显示可视区域内的标注
  17. python绘制彩色六边雪花
  18. 区块链如何改变供应链金融
  19. 运行 RoCEv2 的网络注意事项
  20. 高通QSPR读写NV

热门文章

  1. Java 非阻塞 IO 和异步 IO
  2. 《四世同堂》金句摘抄(十一)
  3. 《白鹿原》金句摘抄(六)
  4. mybatis简单案例源码详细【注释全面】——前期准备
  5. 2019蓝桥杯省赛---java---C---9(等差数列)
  6. mysql 语句块语法_MySQL ------ MySQL常用语句的语法 (三十四)
  7. linux虚拟机tomcat上部署web项目的常用命令
  8. jakarta ee_Jakarta EE的拟议命名空间
  9. findfirst_当心findFirst()和findAny()
  10. hibernate性能_改善Hibernate应用程序性能的7种方法