一、Spring简介

首先,Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性的角度而言,绝大部分Java应用都可以从Spring中受益。总结说来,Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。其架构图如下:

其使用步骤:

1、spring的依赖包配置,以下三个包都是必须的:

/dist/spring.jar

/lib/log4j/log4j-1.2.14.jar

/lib/jakarta-commons/commons-logging.jar

2、提供spring配置文件applicationContext.xml

3、提供log4j.properties配置文件

二、为什么使用spring

spring一个很重要的特性就是控制反转,在目前的运用中个,控制反转还是我使用spring的一个重要原因。那么,什么是控制反转?

2.1,控制反转

控制反转(Inversion of Control ,Ioc):所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护由外部容器来负责。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。

那么在我们最初没有使用spring的时候,我们每次使用一个对象,都要使用关键字new 去实例化我们的具体类。比如说,我们的DAO层有一个MySQL的实现,我们在调用的时候,会new一个mysql的实现类。但如果需求发生了变化,我们需要将数据库的实现变为Oracle等,那么我们要重新写DAO的实现,并且去程序里面修改所有的new出来的对象,这样子,就带来了很多麻烦。而spring实现了控制反转,以依赖注入的形式去创建对象。使用spring,我们不需要使用new关键字去实例化一个新的对象,只需要在配置文件中进行类的注入,就可以完成对象的创建。当我们需要更改的时候,则只需要更改配置文件的注入实例即可。

PS:spring的注入形式:1.setter方法注入;2.使用构造器注入;3.使用Field注入(用于注解方式)

2.2,实例解析

首先,建立一个java程序(非必须java程序):

其次,看spring的主要配置:applicationContext.xml文件

<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <bean id="userDao4Mysql" class="com.angel.spring.dao.UserDao4MySqlImpl"></bean> <bean id="userDao4Oracle" class="com.angel.spring.dao.UserDao4OracleImpl"></bean> <bean id="userManager" class="com.angel.spring.manager.UserManagerImpl">
<property name="userDao" ref="userDao4Oracle" />
</bean>
</beans>
</span>

然后,看manager层对于dao层的调用:

<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.angel.spring.manager;

import com.angel.spring.dao.UserDao;

public class UserManagerImpl implements UserManager {

	private UserDao userDao;

	public void addUser(String username, String password) {
userDao.addUser(username, password);
} public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
</span>

最后,是客户端对于manager层的调用

<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.angel.spring.client;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.angel.spring.manager.UserManager;
import com.angel.spring.manager.UserManagerImpl; public class Client { public static void main(String[] args) {
// 读取配置文件
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml"); UserManager userManager = (UserManager) factory.getBean("userManager");
userManager.addUser("Angel", "123");
} }</span>

可以发现的是,当我们使用spring控制反转,依赖注入的形式去组建我们的系统时,我们不再使用new关键字去定位我们需要的对象。而是统一通过配置文件的形式去注入我们需要的实例,这样子,当我们的系统需要更改的时候,就容易方便很多。而且,大大降低了系统的侵入性!

三、总结

spring的使用能给我们带来很多的好处,比如:1,降低组件之间的耦合度,实现软件各层之间的解耦;2,可以使容器提供众多服务如事务管理消息服务处理等等。当我们使用容器管理事务时,开发人员就不需要手工 控制事务,也不需要处理复杂的事务传播;3,容器提供单例模式支持,开发人员不需要自己编写实现代码;4,容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能;5,集成其他主流框架等等。但是,选择一种架构、一种技术的依据是基于实践的证据——来自历史项目或亲自试验的经验,而不是任何形式的偶像崇拜或者门户之见,这就是“循证架构”——Evidence-based
architecture。

【Spring 1】Spring简介的更多相关文章

  1. Spring 系列: Spring 框架简介 -7个部分

    Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...

  2. Spring Web Flow 简介

    Spring Web Flow 简介 博客分类: 转载 SSH 最近在TSS上看到了一片介绍Spring Web Flow的文章,顺便就翻译了下来,SWF的正式版估计要到6月份才能看到了,目前的例子都 ...

  3. Spring 系列: Spring 框架简介(转载)

    Spring 系列: Spring 框架简介 http://www.ibm.com/developerworks/cn/java/wa-spring1/ Spring AOP 和 IOC 容器入门 在 ...

  4. Spring中AOP简介与切面编程的使用

    Spring中AOP简介与使用 什么是AOP? Aspect Oriented Programming(AOP),多译作 "面向切面编程",也就是说,对一段程序,从侧面插入,进行操 ...

  5. Unit03: Spring Web MVC简介 、 基于XML配置的MVC应用 、 基于注解配置的MVC应用

    Unit03: Spring Web MVC简介 . 基于XML配置的MVC应用 . 基于注解配置的MVC应用 springmvc (1)springmvc是什么? 是一个mvc框架,用来简化基于mv ...

  6. spring 拦截器简介

    spring 拦截器简介 常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等.2.权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直 ...

  7. Spring HTTP invoker简介

    Spring HTTP invoker简介 Spring HTTP invoker是spring框架中的一个远程调用模型,执行基于HTTP的远程调用(意味着可以通过防火墙),并使用java的序列化机制 ...

  8. Spring Boot 之Spring data JPA简介

    文章目录 添加依赖 添加entity bean 创建 Dao Spring Data Configuration 测试 Spring Boot 之Spring data JPA简介 JPA的全称是Ja ...

  9. spring cloud要点简介及常用组件

    spring cloud基于spring boot spring cloud是通过包装其他技术框架实现的,例如OSS组件,实现了一套通过基于注解.java配置和基于模板开发的微服务框架. spring ...

  10. Spring Framework体系结构简介

    说明:以下转自Spring官方文档,用的版本为4.3.11版本. 一.引用官方文档 2.2.1核心集装箱 所述核心容器由以下部分组成spring-core, spring-beans,spring-c ...

随机推荐

  1. 黄聪:C#图片处理封装类(裁剪、缩放、清晰度、加水印、生成缩略图)有示例(转)

    C#图片处理示例(裁剪,缩放,清晰度,水印) 吴剑 2011-02-20 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian/ 前言 需求源自项目中的一些应用,比 ...

  2. freemarker解析模板报错问题

    在确定模板文件代码无误的情况下,导致报错的原因大概有以下原因: 模板文件编码改变了(比如eclipse中的项目部署到tomcat下,而忘记设置tomcat编码就会导致读取模板文件编码不正确,导致程序解 ...

  3. uva 725 Division(暴力模拟)

    Division 紫书入门级别的暴力,可我还是写了好长时间 = = [题目链接]uva 725 [题目类型]化简暴力 &题解: 首先要看懂题意,他的意思也就是0~9都只出现一遍,在这2个5位数 ...

  4. PDF内容不允许复制的解决方法!

    PDF文档的内容不允许复制解决方法! PDF的加密有两个级别: 一个是Owner级别,就是打开文档时需要输入密码PDF Password Remover可以用来破解Owner级别的口令,但是不能用于破 ...

  5. C#异步编程 z

    http://www.cnblogs.com/fangyz/p/5134018.html 从.NET4.5开始,用async和await关键字再加上Task.Run是一个非常不错的异步编程模型. 1. ...

  6. [ActionScript 3.0] AS3.0 Loader加载子swf时是否需要指定新的应用程序域ApplicationDomain

    实际应用中, Loader加载子swf时是否需要指定新的应用程序域ApplicationDomain,需要择情况而定. 1.如果在本地将项目位置添加到flashplayer受信任位置(上一篇文章所述) ...

  7. [Java] java中的接口定义

    在Java的通常规范中,对数据成员的修改要通过接口提供的方法进行(如下面示例中接口中的void learnMath(int hours)和void learnEnglish(int hours)),这 ...

  8. JAVA中String与StringBuffer的区别

    String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...

  9. python实现的json数据以HTTP GET,POST,PUT,DELETE方式页面请求

    一.JSON简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programm ...

  10. Flexigrid例子二: 原位编辑器

    有时候,我们想要编辑flexigrid里的数据.一个原位编辑器是需要的,现在不需要再弹出一个对话框了.这里我会展示如何做到这点. 我使用了jquery-in-place-editor库.请参考官方站点 ...