一、概述

只要用框架开发java,一定躲不过spring,Spring是一个轻量级的Java开源框架,存在的目的是用于构建轻量级的J2EE应用。Spring的核心是控制反转(IOC)和面向切面编程(AOP)。Spring有如下特点:

  1. 轻量级:应用大小和应用开支,包括应用方式

  2. DI/IoC:提供松耦合的一种实现技术

  3. AOP:切面编程将业务逻辑从应用服务中分离

  4. 容器:包含并管理应用对象的生命周期和配置

  5. 框架:使用组件配置组合成复杂的应用,并提供很多基础功能

由于spring是一个容器型的框架,所以它不排斥其他框架,并且可以轻松的整合其他框架。

Spring以一种非侵入式的方式来管理你的代码,Spring提倡”最少侵入”,这也就意味着你可以适当的时候安装或卸载Spring 。

二、模块

Spring框架大约由20多个小模块组成,这些模块分为:核心容器,数据访问/集成,Web,面向切面编程(AOP),消息和测试等等,如下图所示

下面逐一介绍这几大模块:

1.核心容器:核心容器包括spring-core, spring-beans,spring-context, spring-context-support, 和spring-express,其中spring-core和spring-beans模块提供框架的基础部分,包括控制反转和依赖注入。BeanFactory是一个复杂的工厂模式的实现。上下文(spring-context)模块建立在Core和Bean模块的基础之上:它提供了一种框架风格来访问对象,类似于JNDI注册表。Context模块继承了Bean模块的特点并增加了对国际化、事件传播、资源加载等的支持。ApplicationContext接口是Context模块的焦点。spring-context-support支持将第三方库集成到Spring应用中,例如缓存,JavaMail、模板引擎等。spring-expression模块为运行时查询和操作对象提供了强大的表达式语言,它是JSP2.1中的EL语言的扩展,这种语言支持设置和获取属性值,属性赋值,方法调用,访问数组,逻辑和算术运算符,还支持列表投影、选择和常见的聚合。

2.面向切面:Spring的AOP封装包提供了符合AOP Alliance规范的面向切面的编程实现,让你可以定义,例如方法拦截器和切点,从逻辑上讲,从而减弱代码的功能耦合,清晰的被分离开。

3.消息传送:Spring FrameWork 4包括一个spring-messaging模块,它是从Spring集成项目的关键抽象,如Message, MessageChannel,MessageHandle。该模块该包含一组注释映射消息的方法,类似Spring MVC基于注释的编程模型。

4.数据访问/集成:这一层包括JDBC、ORM、OXM、JMS和事务模块。spring-jdbc模块提供了一个JDBC抽象层从而消除了令人乏味的JDBC编程和解析数据库提供商特定的错误。spring-tx模块支持类的编程和声明式事务管理,实现特殊的接口和你的POJO(Plain Old Java Objects)。spring-orm模块提供了流行的对象-关系映射集成层API,包括JPA、JDO和Hibernate。使用spring-orm模块可以使这ORM框架结合Spring提供的其他特性,比如前面提到的简单的声明式事务管理。spring-oxm模块提供了一个抽象层,支持对象/XML映射的实现,如JAXB、 Castor、XMLBeans、 JiBX和XStream。

5.网络层:包括spring-web、spring-webmvc、spring-websocket和spring-webmvc-portlet模块。spring-web模块提供基础的针对web开发的集成特性,包括文件上传功能、利用Servlet侦听器进行IOC容器初始化和针对web的应用上下文。它还包括一个HTTP客户端和Spring的web部件的远程支持。spring-webmvc模块包括Spring的MVC模型和REST Web服务实现的web应用程序,Spring的MVC框架提供了一种清晰的分离模型,在领域模型代码和web form之间,并且还可以借助Spring框架的其他特性。

6.测试层:spring-test模块支持单元测试和包含Junit或者TestNG的集成测试,它提供了Spring的ApplicationContext一致性装载和这些上下文的缓存机制,它还提供了可用于测试代码隔离的模拟对象。

三、动手创建

概念先讲到这,先上手创建项目找找感觉。使用的是idea开发工具。创建项目开始(使用maven构建)

在Groupid中填入项目的包名即可。Artifactid自定义即可,这里建议与项目名称一致。版本默认在Groupid中填入项目的包名即可。Artifactid自定义即可,这里建议与项目名称一致。版本默认.

另外的是maven相关设置,不懂得同学可以先去学学maven,项目中都是必学的

选择文件位置

创建完成,项目架构如图(img与md文件是说明文件,不计其中)

在main下新建文件夹resources用于存放资源文件

在resources上右键,选择mark directory as 选中Resources Root

添加spring依赖包

 <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>

pom.xml的完整配置如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.yuanqinnan</groupId>
<artifactId>springLearn</artifactId>
<version>1.0-SNAPSHOT</version> <name>springLearn</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>
</dependencies> <build>
</build>
</project>

在刚才新建的resources下新建META-INF包,在META-INF下新建applicationContext.xml.

文件内容如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

新建test包和HelloWorld.java,Main.java结构如下:

代码如下:

public class HelloWorld {

        private String info;

        public String getInfo() {
return info;
} public void setInfo(String info) {
this.info = info;
}
}
public class Main {
public static void main(String[] args)
{
//读取配置文件
ApplicationContext ctx=new ClassPathXmlApplicationContext("META-INF/applicationContext.xml");
//获取bean的实例
HelloWorld t=(HelloWorld) ctx.getBean("hello");
//调用方法
System.out.println(t.getInfo());
}
}

在applicationContext.xml中配置bean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="hello" class="com.yuanqinnan.test.HelloWorld">
<property name="info" value="Hello,This is my first Spring Application!"></property>
</bean>
</beans>

右键运行Main

得到结果:

如此,一个spring项目便创建成功,后面再继续学习spring的其他知识

Spring之旅第一篇-初识Spring的更多相关文章

  1. Spring学习笔记第一篇——初识Spring

    1.简单介绍 spring的ioc底层是先配置xml文件,接着创建工厂,利用dom4j解析配置文件,最后通过反射完成.大概步骤差不多这样,这些具体代码spring帮你完成了.现在我们只需要配置xml和 ...

  2. [Spring Batch 系列] 第一节 初识 Spring Batch

    距离开始使用 Spring Batch 有一段时间了,一直没有时间整理,现在项目即将完结,整理下这段时间学习和使用经历. 官网地址:http://projects.spring.io/spring-b ...

  3. Mybatis之旅第一篇-初识Mybatis

    一.JDBC的问题 为什么我们要使用Mybatis,是因为JDBC存在以下问题 1. 数据库连接创建.释放频繁造成系统资源浪费,从而影响系统性能.如果使用数据库连接池可解决此问题. 2. Sql语句在 ...

  4. spring boot实战(第一篇)第一个案例

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   spring boot实战(第一篇)第一个案例 前言 写在前面的话 一直想将spring boot相关内容写成一个系列的 ...

  5. Spring Cloud实战 | 最终篇:Spring Cloud Gateway+Spring Security OAuth2集成统一认证授权平台下实现注销使JWT失效方案

    一. 前言 在上一篇文章介绍 youlai-mall 项目中,通过整合Spring Cloud Gateway.Spring Security OAuth2.JWT等技术实现了微服务下统一认证授权平台 ...

  6. Spring Cloud实战 | 第九篇:Spring Cloud整合Spring Security OAuth2认证服务器统一认证自定义异常处理

    本文完整代码下载点击 一. 前言 相信了解过我或者看过我之前的系列文章应该多少知道点我写这些文章包括创建 有来商城youlai-mall 这个项目的目的,想给那些真的想提升自己或者迷茫的人(包括自己- ...

  7. 深入理解javascript对象系列第一篇——初识对象

    × 目录 [1]定义 [2]创建 [3]组成[4]引用[5]方法 前面的话 javascript中的难点是函数.对象和继承,前面已经介绍过函数系列.从本系列开始介绍对象部分,本文是该系列的第一篇——初 ...

  8. 深入理解Spring(一):初识Spring

    深入理解Spring(一):初识Spring 一. Spring介绍        Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnso ...

  9. Spring框架第一篇之Spring的第一个程序

    一.下载Spring的jar包 通过http://repo.spring.io/release/org/springframework/spring/地址下载最新的Spring的zip包,当然,如果你 ...

随机推荐

  1. selenium获取元素后用click()点击没有作用,用Keys.ENTER就可以成功

    selenium获取元素后用click()点击没有作用,用键盘输入enter(Keys.ENTER)就可以成功 #coding = utf-8 from selenium import webdriv ...

  2. 在Windows Server 2008 R2下搭建jsp环境(三)-Tomcat的下载安装

    1.百度搜索"Tomcat官网",点击有标志的官网进入,准备下载官方正版Tomcat. 2.进入Tomcat官网之后,在左边我们看到,Tomcat的有6,7,8这三个最流行的版本, ...

  3. bzoj 2120 数颜色 带修改莫队

    带修改莫队,每次查询前调整修改 #include<cstdio> #include<iostream> #include<cstring> #include< ...

  4. BZOJ_1015_[JSOI2008]星球大战_并查集

    BZOJ_1015_[JSOI2008]星球大战_并查集 题意:很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器, ...

  5. Git详解及github与gitlab使用

    第一章 关于版本控制 第二章 GIT简介 第三章 GIT安装 第四章 初次运行GIT前配置 第五章 初始化仓库 第六章 GIT命令操作 第七章 GIT分支结构

  6. Tomcat启动失败的几种解决办法

    1.重复映射 用Eclipse开发,新建了的servlet会有一个url-pattern声明: 这样就不需要在web.xml中添加映射,如果在web.xml中添加了这样一段: <servlet& ...

  7. hystrix 结果缓存机制(5)

    hystrix支持将一个请求结果缓存起来,下一个具有相同key的请求将直接从缓存中取出结果,减少请求开销.要使用hystrix cache功能 第一个要求是重写getCacheKey(),用来构造ca ...

  8. Android 8.1 源码_启动篇(一) -- 深入研究 init(转 Android 9.0 分析)

    前言 init进程,它是一个由内核启动的用户级进程,当Linux内核启动之后,运行的第一个进程是init,这个进程是一个守护进程,确切的说,它是Linux系统中用户控件的第一个进程,所以它的进程号是1 ...

  9. 浅析JavaScript解析赋值、浅拷贝和深拷贝的区别

    文章首发于sau交流学习社区 一.赋值(Copy) 赋值是将某一数值或对象赋给某个变量的过程,分为: 1.基本数据类型:赋值,赋值之后两个变量互不影响 2.引用数据类型:赋**址**,两个变量具有相同 ...

  10. python接口自动化(八)--发送post请求的接口(详解)

    简介 上篇介绍完发送get请求的接口,大家必然联想到发送post请求的接口也不会太难,被聪明的你又猜到了.答案是对的,虽然发送post请求的参考例子很简单,但是实际遇到的情况却是很复杂的,因为所有系统 ...