非web环境的spring应用

springframework提供的spring容器,非常适合应用于javaweb环境中。 同时,spring组件的低耦合性为普通java应用也提供了足够的支持。

以下,我们通过一个范例来了解spring在普通java application project中的应用。

开发环境及工具

  • JDK 1.8
  • Eclipse - jee - Oxygen3a
  • Maven 3.5.2
  • spring framework 5.1.3

spring特点

  • 上帝类

spring容器就是上帝,需要什么bean只管找它要就是了,甚至可以说,bean的职责是命中注定的。

  • 梦境化

在梦境中,我们几乎从来都不关心我们是如何来到当前场景的,只知道如何应对当前场景的事件。spring应用和这个情况几乎一致,着眼目标,无问西东。

项目需求

  • 通过注解方式(JavaConfig)配置Bean;
  • main方法中加载spring容器(ApplicationContext),并获取先前配置的Bean。
  • maven构建
  • 非web环境
  • 易于测试

项目创建并重构(提供spring-framework支持)

  • 新建Maven Project,使用maven-archetype-quickstart 1.1骨架
  • 添加Maven依赖,spring-context

本例中,仅需spring-context依赖即可。 但为了便于后期扩展,直接添加了spring-data-jpa依赖项,它会间接地添加spring-context依赖项。

    <!-- 选用2.1.3版本,是为了配合springframework 5.1.3版本 -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
  • 编写spring配置信息,其实就是配置一大堆的bean,交给spring容器备用

spring支持的配置方式有xml配置和java配置,在此,我们暂且仅用java配置。

java配置,即:注解配置,使用@Configuration注解类,使用@Bean注解方法。

    @Configuration
public class AppConfig {
@Bean(name="hello")
public String hello() {
return "hello, it is a bean from javaconfig.";
}
}
  • 修改main方法,启用spring容器

    public class App {
    public static void main( String[] args ){
    System.out.println( "Hello World!" );
    ApplicationContext ctx =
    new AnnotationConfigApplicationContext(AppConfig.class); System.out.println(ctx.getBean("hello"));
    }
    }

运行结果:

运行结果正常,没什么大问题。

运行测试

为方便测试,我们把maven依赖的junit的版本从默认的v3.8.1提升到v4.12,好处是加入了hamcrest依赖项,让测试断言通俗一点。

   <!-- 提升junit版本至junit4 -->

    <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12<!-- default is v3.8.1 --></version>
<scope>test</scope>
</dependency>

针对注解配置类AppConfig编写测试类

package my.demo.it.contact.config;

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.junit.Assert.assertThat; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class AppConfigTest { @Test
public void bootstrapAppFromJavaConfig() { ApplicationContext context =
new AnnotationConfigApplicationContext(AppConfig.class);
assertThat(context, is(notNullValue()));
assertThat(context.getBean("hello"), is(notNullValue()));
}
}

测试通过

附:引入slf4j-nop依赖,可以解决SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder"问题。

        <!-- 解决:SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.25</version>
</dependency>

非web环境的注解配置的spring项目应用(non-web, Spring-data-jpa, JavaConfig, Java Application, Maven, AnnotationConfigApplicationContext)的更多相关文章

  1. SpringMVC学习(三)——基于注解配置的springMVC项目

    可运行的附件地址:http://files.cnblogs.com/files/douJiangYouTiao888/springWithAnnotation.zip 项目说明: 作者环境:maven ...

  2. Spring Data Jpa示例(IntelliJ maven项目)

    1. 在IntelliJ中新建maven项目 给出一个建好的示例,(本示例中省略了业务逻辑组件UserService) 2. 在pom.xml中配置依赖 包括: spring-context spri ...

  3. Android-----搭建开发环境AND模拟器配置AND启动项目

    开发工具我这里用的是eclipse 你也可以用Google最新推出的Android Studio开发工具(不需要配置) 下载地址:https://developer.android.com/sdk/i ...

  4. web环境中的spring MVC

    1. web.xml文件的简单详解 在web环境中, spring MVC是建立在IOC容器的基础上,要了解spring mvc,首先要了解Spring IOC容器是如何在web环境中被载入并起作用的 ...

  5. Web环境中Spring的启动过程

    1.spring不但可以在JavaSE环境中应用,在Web环境中也可以广泛应用,Spring在web环境中应用时,需要在应用的web.xml文件中添加如下的配置: …… <context-par ...

  6. Spring Boot中的缓存支持(一)注解配置与EhCache使用

    Spring Boot中的缓存支持(一)注解配置与EhCache使用 随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决 ...

  7. Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探

    由小编的上篇博文可以一窥基于AspectJ注解配置的AOP编程实现. 本文一下未贴出的相关代码示例请关注小编的上篇博文<Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AO ...

  8. IDEA Java Web(Spring)项目从创建到打包(war)

    创建Maven管理的Java Web应用 创建新项目,"create new project",左侧类型选择"maven",右侧上方选择自己的SDK,点击&qu ...

  9. spring boot + Thymeleaf开发web项目

    "Spring boot非常适合Web应用程序开发.您可以轻松创建自包含的HTTP应用.web服务器采用嵌入式Tomcat,或者Jetty等.大多数情况下Web应用程序将使用 spring- ...

随机推荐

  1. BLE和2.4G实现通信

    1. 背景 客户的项目是无线控制灯具,目前采用2.4G芯片,一端是2.4G遥控器,一端是2.4G灯具.现在客户的需求是在不增加成本的条件下增加手机APP控制.因为BLE芯片一般会比纯2.4G芯片价格高 ...

  2. PowerShell 知识点总结

  3. [Ms SQL] 基本創建、修改與刪除

    ##創建 table student, 內涵 id ,name ,tel三種columne,設定id為primary key create table student ( id int primary ...

  4. LeetCode——翻转数字

    第七题,Reverse Integer.(https://leetcode.com/problems/reverse-integer/description/) 注意事项:翻转之后,数据有可能会超过I ...

  5. Flagr 架构

    来自官方文档 https://checkr.github.io/flagr/#/flagr_overview There are three components in the flagr, Flag ...

  6. Networked Graphics: Building Networked Games and Virtual Environments (Anthony Steed / Manuel Fradinho Oliveira 著)

    PART I GROUNDWORK CHAPTER 1 Introduction CHAPTER 2 One on One (101) CHAPTER 3 Overview of the Intern ...

  7. linux配置Anaconda python集成环境

    1.下载anaconda与安装 利用anaconda来配置python环境 如果你上面两步已经没有问题了,那么这一步可以省略. 如果你想简单一些,利用anaconda来配置python环境,那么直接从 ...

  8. MQ实战

    MQ是什么? MQ(消息队列)是一种跨进程的通信机制,用于上下游传递消息. MQ的优点 异步处理,代码解藕. spring中集成MQ的实现 1. xml配置 <?xml version=&quo ...

  9. Javascript校验密码复杂度的正则表达式

    1.密码中必须包含大小字母.数字.特称字符,至少8个字符,最多30个字符. var regex = new RegExp('(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.* ...

  10. php7带来的性能升级

    前言本文是一篇讲座听后+后续研究的总结. 话说当年追时髦,php7一出就给电脑立马装上了,php5和php7共存,也是立马写了个超级耗时间的循环脚本测了一番,确实php7给力很多,然后也是注意了一些新 ...