非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. 前端基础:form表单提交

    今天介绍下form表单提交经常用到的表单元素. 1:datalist元素,一般与input组建配合使用,以定义可能输入的值,例如: <!DOCTYPE html> <html lan ...

  2. OpenStack控制节点上搭建Q版nova服务(step5)

    placement组件监听的端口号是:8778 nova组件监听的端口号是:6080.8774.8775 其中6080端口号是novncproxy监听的端口号. 1.安装服务组件 yum instal ...

  3. ASP.NET CORE 3 安装遇到的问题

    最近在研究 ASP.NET CORE, visualstudio2019 也已正式发布,本以为安装vs2019后就默认支持asp.net core 3,谁知是不支持的,需单独安装net core 3及 ...

  4. ThinkPhp框架分页查询和部分框架知识

    一.一个条件的查询数据 查询数据自然是先要显示出数据,然后根据条件进行查询数据 (1)显示出表的数据 这个方法我还是写在了HomeController.class控制器文件中 (1.1)写了一个方法s ...

  5. mongodb shell 运行js脚本的四种方式

    1. 交互式 mongo shell   大部分的 mongodb 教程,在第一章都会讲解这种方式. mongo 127.0.0.1:27017 use test db.users.findOne() ...

  6. 解决github下载速度慢的问题 ,亲测有效

    原文链接 https://blog.csdn.net/tsq292978891/article/details/78260066 解决办法: 手动更改hosts 关于hosts的作用这里就不做声明了. ...

  7. ICE框架双工通讯+MVVM框架测试案例

    准备 开发工具 VS2015 ICE框架 https://zeroc.com/ MVVMLight框架 ICE接口文件 #include "./Identity.ice" #inc ...

  8. Scrapy实战篇(七)之爬取爱基金网站基金业绩数据

    本篇我们以scrapy+selelum的方式来爬取爱基金网站(http://fund.10jqka.com.cn/datacenter/jz/)的基金业绩数据. 思路:我们以http://fund.1 ...

  9. LeetCode【112. 路径总和】

    思路就是从根节点开始向下选节点,依次与sum比较大小,若小,则向下选左右节点其中一个,若大,则接下来判断是否是叶子节点,若是,则返回false 若不是,则上一步选另一节点,再将上述重新执行. 对于叶子 ...

  10. Oracle问题处理

    一,如果在Oracle中执行for update操作时,出现一致卡顿现象,此时可能是有其它的进程阻塞了. 处理的方法就是查找出阻塞的进程,然后强制杀死 先查询出阻塞进程: select object_ ...