Spring:(一)入门基础学习

前述

  因为前几日刚刚学完Spring的基础,因此写一篇博客整理一下相关的基础知识。

什么是Spring?

  Spring 是一个轻量级的 DI / IoC 和 AOP 容器的开源框架,帮助分离项目组件之间的依赖关系。,来源于 Rod Johnson 在其著作《Expert one on one J2EE design and development》中阐述的部分理念和原型衍生而来。

  Spring:SE/EE开发的一站式框架。

    一站式框架:有EE开发的每一层解决方案。

      WEB层             :SpringMVC

      Service层         :Spring的Bean管理,Spring声明式事务

      DAO层              :Spring的Jdbc模板,Spring的ORM模块

Spring框架的优点

  • 非侵入式设计:

  非侵入式指应用程序代码对框架的依赖最小化,即不需要用户代码引入框架代码的信息,从类的编写者角度来看,察觉不到框架的存在。

  • 方便解耦、简化开发:

  通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

  • 支持AOP编程:

  AOP(Aspect Oriented Programming)面向切面编程。Spring提供了对AOP的支持,它允许将一些通用任务,如安全、事务、日志等进行集中式处理,从而提高了程序的复用性。

  • 支持声明式事务处理:

  只需要通过配置就可以完成对事务的管理,不需要手动编程。

  • 方便程序的测试:

  Spring对Junit4支持,可以通过注解方便的测试Spring程序。

  • 方便集成各种优秀框架:

  Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts、Hibernate、Hessian、Quartz)等的直接支持。

  • 降低Java EE API的使用难度:

  Spring对很多难用的Java EE API(如JDBC、JavaMail、远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。

Spring的框架结构

  • Data Access/Integration层(数据访问/集成)包含有JDBC、ORM、OXM、JMS和Transaction模块。
  • Web层包含了Web、Web-Servlet、WebSocket、Web-Porlet模块。
  • AOP模块提供了一个符合AOP联盟标准的面向切面编程的实现。
  • Core Container(核心容器):包含有Beans、Core、Context和SpEL模块。
  • Test模块支持使用JUnit和TestNG对Spring组件进行测试。

  

Spring的框架包

  官方下载地址:https://repo.spring.io/webapp/#/artifacts/browse/tree/General/libs-release-local/org/springframework/spring

  选择相应的版本下载就可以了,注意:jdk1.7只能和spring4.0以下的包搭配使用,而你要是用Spring4.0以上的包就要用jdk1.8.0乃至以上的版本。

说明

  下面对照结构图说一下每个jar包的作用

  spring4中的jar包一共有20个

  Core部分包含4个模块

  1. spring-core:依赖注入IoC与DI的最基本实现
  2. spring-beans:Bean工厂与bean的装配
  3. spring-context:spring的context上下文即IoC容器
  4. spring-expression:spring表达式语言

 

  AOP部分包含4个模块

  1. spring-aop:面向切面编程
  2. spring-aspects:集成AspectJ
  3. spring-instrument:提供一些类级的工具支持和ClassLoader级的实现,用于服务器
  4. spring-instrument-tomcat:针对tomcat的instrument实现

  

  Data Access/Integration部分包含5个模块

  1. spring-jdbc:jdbc的支持
  2. spring-tx:事务控制
  3. spring-orm:对象关系映射,集成orm框架
  4. spring-oxm:对象xml映射
  5. spring-jms:java消息服务

  Web部分包含3个模块

  1. spring-web:基础web功能,如文件上传
  2. spring-webmvc:mvc实现
  3. spring-webmvc-portlet:基于portlet的mvc实现
  4. spring-websocket:为web应用提供的高效通信工具

  

  Test部分一个模块

  1. spring-test:spring测试,提供junit与mock测试功能

  

  剩下的包是

  1. spring-messaging:用于构建基于消息的应用程序
  2. spring-context-support:spring额外支持包,比如邮件服务、视图解析等

  除了Spring的包之外,在开发中还会用到一个依赖包,即

  下载地址:http://commons.apache.org/proper/commons-logging/download_logging.cgi

我的第一个 Spring 程序

  • 创建Web项目,引入核心jar包

  • 创建pojo,描述一个User,有name和id
 1 package spring_test1.pojo;
 2
 3 /**
 4  * @author jyroy
 5  *
 6  */
 7 public class User {
 8     private String name;
 9     private int id;
10
11     public String getName() {
12         return name;
13     }
14     public void setName(String name) {
15         this.name = name;
16     }
17     public int getId() {
18         return id;
19     }
20     public void setId(int id) {
21         this.id = id;
22     }
23     @Override
24     public String toString() {
25         return "User [name=" + name + ", id=" + id + "]";
26     }
27 }
  • 编写配置文件

  编写配置文件要做的就是将类交给Spring管理

  在src目录下新建Spring核心的配置文件applicationContext.xml

  这个配置文件要怎么写呢?

  首先要写的,就是XML配置文件的约束,那约束怎么写呢?只要去 spring-framework-4.3.20.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html 目录下找到相关的约束复制到xml中就可以了,剩下要做的就是对于类的配置了。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:p="http://www.springframework.org/schema/p"
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5     xsi:schemaLocation="
 6             http://www.springframework.org/schema/beans
 7              http://www.springframework.org/schema/beans/spring-beans.xsd">
 8
 9         <!--Spring的入门的配置-->
10         <bean name="user"  class="spring_test1.pojo.User">
11             <property name="name" value="李东"/>
12             <property name="id" value="1007" />
13         </bean>
14
15 </beans>
  • 创建一个测试类

 用到了ApplicationContext,它是一种常用的Spring核心容器。提供了完整的IOC服务支持,是管理Bean的工厂,主要负责初始化各种Bean,并调用Bran生命周期的方法,还包含对国际化、资源访问、事件传播等方面的支持。

 创建ApplicationContext接口实例,通常有两种方式:

  1. 通过 ClassPathXmlApplicationContext 创建,就是下面例子中用到的方式,new ClassPathXmlApplicationContext("applicationContext.xml") 是Spring会去类路径中查找名为applicationContext.xml 的配置文件。
  2. 通过FileSystemXmlApplicationContext 创建,从指定的文件系统路径(绝对路径)中寻找指定的XMl配置文件。

 

 1 package spring_test1.test;
 2
 3 import org.junit.Test;
 4 import org.springframework.context.ApplicationContext;
 5 import org.springframework.context.support.ClassPathXmlApplicationContext;
 6
 7 import spring_test1.pojo.User;
 8
 9 public class UserTest {
10
11     @Test
12     public void demo1() {
13         //创建Spring的工厂
14         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
15         //通过容器获取user对象
16         User user = (User) applicationContext.getBean("user");
17         System.out.println(user);
18     }
19 }
  • 结果

IOC和DI简述

  IOC (Inversion Of Control):控制反转。这是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由Spring框架来管理。

  DI (Dependency Injection):  依赖注入。将对象依赖属性(简单值,集合,对象)通过配置设值给该对象。

  说明:

  上面的例子中,便应用了IOC和DI,这里详细的说一下。

  可以看到,我们并没有进行 new 实例化,但是还是产生对象了,这就是利用了IOC容器,进行创建对象,其中 User user = (User) applicationContext.getBean("user"); 便是通过Spring容器获取的实现类对象,而不是通过 new 关键字来创建user。

  其中name和id的设置便是应用了依赖注入,通过set方法进行的基本数据类型的注入。

  

传统方式与IOC方式对比

传统方式

  通过new关键字来实例化,创建对象。

  Category c = new Category();

IOC方式

  对象的生命周期由Spring来管理,而不需要通过显式的new来实现。即控制权从本来在自己手里,现在交给了Spring。

  Category c = Spring产生。



  

  这篇都是Spring介绍和一点点基础。关于细节的地方没有展开。我慢慢来。

原文地址:https://www.cnblogs.com/jyroy/p/10289930.html

时间: 2024-10-20 21:15:19

Spring:(一)入门基础学习的相关文章

Python入门基础学习 三

Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形,true就相当于1,false相当于0,可以用来计算 类型转换 转换:整数:int();字符串:str();浮点数:float() 转换例子:(图9) 如果用内置函数当变量名,比如str=123,一旦被赋值,再使用这个函数会被报错. type()函数可以明确告诉我们变量类型. isinstance

C语言/C++编程新手入门基础学习中链接类型

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制).创一个小群,供大家学习交流聊天如果有对学C++方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步呀.也希望大家对学C++能够持之以恒C++爱好群,如果你想要学好C++最好加入一个组织,这样大家学习的话就比较方便,还能够共同交流和分享资料,给你推荐一个学习的组

CSS入门基础学习二

我们下午继续学习CSS的入门基础,搬上你的小板凳赶快进入吧! 一.背景(background) Background-color:背景颜色 background-image (背景图片) background-repeat(设置背景平铺)  repeat (默认值) no-repeat (不平铺) repeat-x  (横向平铺) repeat-y (纵向平铺) background-position (设置背景位置) 设置具体值: left| right| top| bottom| cnete

CAD入门基础学习准则分享

初学CAD制图的小伙伴们,我们刚刚开始学习CAD制图的时候,往往不知道从何下手.若是掌握了好的制图技巧,对我们绘制出好的CAD 图纸非常有帮助.下面小编就给大家分享一些CAD入门,基础学习准则.分享如下:1.遵循一定的作图原则①作图步骤:设置图幅→设置单位及精度→建立若干图层→设置对象样式→开始绘图.②绘图始终使用1:1比例.为改变图样的大小,可以在打印时于图纸空间内设置不同的打印比例.③为不同类型的图元对象设置不同的图层.颜色及线宽,而图元对的颜色.线型及线宽都应由图层控制(LAYER):④需

Python 入门基础学习

Python入门学习 我们使用python3.0版本 首选来入门  带你进入Hello World >>> print ("Hello World")Hello World 好了 我们会python了  呵呵了 我们来实现个简单的列子吧  文字游戏 print('------------我爱九月天---------------') temp = input("不妨猜一下九月天在你心里你会想的是哪个数字:") guess = int(temp) if

Spring batch 入门基础

Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统.Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务.Spring Batch可以提供大量的,可重复的数据处理功能,包括日志记录/跟踪,事务管理,作业处理统计工作重新启动.跳过,和资源管理等重要功能. 业务方案: 批处理定期提交. 并行批处理:并行处理工作. 企业消息驱动处理 大规模的并行处理 手动或是有计划的重启 局部处理:跳过记录

Spring AOP入门基础-继承、装饰者,代理的选择

关于Spring AOP,底层是基于动态代理实现的,下面简单的学习下为什么选择动态代理,而不选择继承实现,装饰者模式实现,下面参考如下业务场景下理解. 业务场景 业务层如果有业务需求,需要在注册用户,升级用户,和删除用户方法前都进行一次权限验证,最原始的方法就是在业务层每个方法前都添加代码验证.这是最原始的方式,在实际业务中有很多的方法,那都需要重写修改,很显然这是不合理的,因此衍生如下几个解决方案: (1)使用继承类,在继承类中对继承的方法进行修改,参考DogDemo01 (2)使用装饰者模式

Spring -- AOP入门基础

动态代理 我们在日常开发过程中是否会遇到下图中的这种状况 红框中的是我们要输出的日志,你是否发现,日志中大部分信息都是相同的,并且如果我们要修改一个地方,所有的地方都需要改,而且代码看起来还比较冗余 下面我们就可以通过动态代理的方式解决这个问题 看下代码 public interface Calculation { public int add(int x, int y); public int sub(int x, int y); public int mul(int x, int y); p

Java入门基础学习源码,有C或C++语言基础的可以快速掌握

以下为完整源码,需要1.8版本JDK,否则部分新特性可能出现兼容问题,去掉注释号即可运行 package hello; import java.util.Scanner; public class Hello { public static void main(String[] args) { // TODO 自动生成的方法存根 /* //这是第一个程序 System.out.println("这是一个减法计算器"); Scanner in = new Scanner(System.i