我发现许多我认识的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配置相关推荐

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

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

  2. spring java配置_Spring Java配置

    spring java配置 我发现许多我认识的Spring开发人员仍然不了解或使用Spring Java Configuration(aka JavaConfig). Spring 3.0引入了此功能 ...

  3. Spring Java配置:会话超时

    当您可以使用基于Java的配置开发Spring应用程序时,我们生活在一个美好的时光. 不再有多余的XML代码,只有纯Java代码. 在本文中,我想讨论一个关于Spring应用程序中会话管理的热门话题. ...

  4. spring java配置_Spring基于java的配置

    我们之前都了解过spring基于xml的配置,我们也可以通过配置类来完成基于xml的配置,我们会在下面以一个例子来讲述一下Spring基于java的配置. 首先第一步准备工作: 1)创建一个Dog类 ...

  5. java避免使用orderby_java – Spring安全配置@Order不是唯一的例外

    我试图在我的Spring Security配置中注册多个过滤器,但是我总是得到相同的异常: 04-Nov-2015 14:35:23.792 WARNING [RMI TCP Connection(3 ...

  6. Spring 基于Java配置

    到目前为止,您已经了解了如何配置使用XML配置文件的Spring bean.如果习惯使用XML配置,那么会说,这不是真的需要学习如何进行基于Java的配置,因为你要使用的配置或者可达到相同的结果. 基 ...

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

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

  8. spring实战六之使用基于java配置的Spring

    之前接触的都是基于XML配置的Spring,Spring3.0开始可以几乎不使用XML而使用纯粹的java代码来配置Spring应用.使用基于java配置的Spring的步骤如下: 1. 创建基于ja ...

  9. Spring的Java配置方式

    Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1     @Configuration 和 @Bean Spring的Java配置方式是通过 @Configuration ...

最新文章

  1. golang学习笔记————字符串
  2. MDT2010 Client PE 镜象通过PXELinux 或PXEGrub来启动
  3. 5行Python就能爬取 3000+ 上市公司的信息?
  4. 别眨眼!AI 通过自学秒解魔方,比人类纪录快两倍
  5. 深入理解Java内存模型(七)——总结
  6. Shell else if mysql_Shell if else语句(详解版)
  7. 整数因子分解c语言递归,整数因子分解:计算一个整数所有的分解式(递归实现)...
  8. 性能测试之JMeter取样器详解:sampler
  9. 服务器主板显示B1,电脑检测卡显示b1是啥意思
  10. cesium 隐藏entity_cesium中随entity动态变化的弹出框
  11. 使用Python为时间序列预测创建ARIMA模型
  12. 微信小程序云开发视频教程上线啦
  13. SQL-基础学习4--聚集函数:AVG(),COUNT(),MAX(),MIN(),SUM();聚集不同值:DISTINCT
  14. 2022-2028年中国飞机电子飞行包(EFB)行业市场竞争状况及发展趋向分析报告
  15. 一个程序员的时间管理“辛”路历程
  16. 阿里云国际站怎么注册?
  17. 三维激光扫描系统基本原理及分类
  18. mysql内存参数及最大内存
  19. AndroidStudio导入/第一次新建项目gradle版本错误或者卡住解决方法
  20. head 10字节_优秀了!10万系谱,计算近交系数,不到1秒!

热门文章

  1. 求瑞年的java程序,java 计算瑞年的方法
  2. python遗传算法工具箱的使用_遗传算法的python实现,非常值得看的一篇文章
  3. think-in-java(21)并发
  4. Spring boot web(2):web综合开发
  5. Ubuntu下apt-get方式Git的安装、配置和更新
  6. junit4和junit5_JUnit5 TestSuite替代
  7. 通过OAuth 2.0和Okta使用安全的服务器到服务器通信构建Spring Boot应用
  8. 缓冲池java_了解Java缓冲池
  9. java ee 8 api_Java EE 8安全性API:概述
  10. couchbase_具有Couchbase,Java EE和WildFly的CRUD Java应用程序