Spring学习(二)-Spring简介

来源:互联网 发布:骑俄罗斯大洋马 知乎 编辑:程序博客网 时间:2024/05/16 15:02

通过上篇博客我们创建了第一个Spring示例,发现使用Spring开发和使用传统方式(直接new 一个实例)开发并没有什么不同,反而感觉还变复杂了。其实根本原因是我们那个Hello World示例太简单,完全没有体现出Spring的价值。俗话说,磨刀不误砍柴工,先把基础打牢了,结实了,后面真正参与到大型项目开发中,才能游刃有余。

本篇博客将给出Spring的简介,包括:Spring是什么,Spring能做什么,Spring框架方面的一些基本知识。

1、Spring是什么

Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级的Java开源框架,其目的主要是用于简化企业级应用程序开发。
(1)分层的:
Spring 框架是一个分层架构,由 六个模块组成:核心容器,Spring上下文,Spring AOP,Spring DAO,Spring ORM,Spring Web 模块(包括Spring MVC 框架),允许开发者随意选择其中某一或多个模块使用;

(2)一站式的:
Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。

(3)轻量级的:
Spring框架在系统初始化的时候不需要加载所有的服务,为系统节约了资源,当然轻量级和重量级也是相对的。

(4)开源框架:
Spring的源代码是开放的,可以私人定制。

此外,Spring不是封闭的,还可以和其他一些框架对接使用,比如常见的“三剑客”Spring,Struts,Hibernate。

2、Spring能做什么(为什么使用Spring)
首先看一下传统应用程序是如何开发的,比如在service层需要使用Dao层的对象,通过new一个对象,如下:

package com.spring.model;public class User {    private String userName;    private String userAge;    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    public String getUserAge() {        return userAge;    }    public void setUserAge(String userAge) {        this.userAge = userAge;    }}package com.spring.Dao;import com.spring.model.User;public class UserDao {    public void insert(User user){        System.out.println("insert the record into databases!");    }}package com.spring.service;import com.spring.Dao.UserDao;import com.spring.model.User;public class UserService {    public void insert(User user){        UserDao userDao = new UserDao();        userDao.insert(user);    }}

显然上述代码存在问题:在UserService中要想使用UserDao的实例,需要先new一个UserDao一个对象,因而UserService 和UserDao是紧耦合的,层与层之间存在严重的依赖关系。
如果使用了Spring以后,代码可以修改为松耦合的,修改UserService 如下:

package com.spring.service;import com.spring.Dao.UserDao;import com.spring.model.User;public class UserService {    private UserDao userDao;    public UserDao getUserDao() {        return userDao;    }    public void setUserDao(UserDao userDao) {        this.userDao = userDao;    }    public void insert(User user){        userDao.insert(user);    }}

编写spring-application.xml

<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-4.3.xsd">    <bean id="userDao" class="com.spring.Dao.UserDao">    </bean>    <bean id="userService" class="com.spring.service.UserService">          <property name="userDao" ref="userDao" >  </property>       </bean> </beans>

可以看到在UserService没有直接创建 UserDao实例,而是在XML中配置,由Spring框架去创建。

除了上述的Spring能够将组件及其协作的其他组件之间解耦,还能够提供如下功能:
(1)Spring能帮我们根据配置文件(注解方式可以转换为配置文件形式)创建及组装对象之间的依赖关系(IOC);
(2)Spring的面向切面编程(AOP)支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用;
(3)Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并对底层数据库的处理提供了很好的封装,比如JdbcTemplate,JPA等;
(4)编写一些业务类的代码的时候不需要继承Spring特定的类,通过配置完成依赖注入后就可以使用,因而Spring是非侵入式的。
(5)Spring默认对象的创建为单例的,我们不需要再使用单例的设计模式来开发单体类。

Spring给我们开发提供如此强大的支持,使得我们无须过多关注非业务相关代码的开发,学习Spring是有很大意义的。

3、Spring框架基本知识
介绍Spring基本知识之前,首先研究一下Spring的分层架构:
这里写图片描述

(1)核心容器(IOC)
Spring框架的核心部分,它提供了依赖注入(Dependency Injection)特征来实现IOC容器对Bean的管理。IOC(控制反转)容器的核心组件是BeanFactory,其是工厂模式的一个实现。BeanFactory使用IOC机制将应用配置和依赖说明从实际的应用代码中分离出来。

(2)Spring AOP
在AOP模块中,Spring提供了对面向切面编程功能。该模块提供了比如日志记录、性能统计,安全控制等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需要的代码中。

(3)Spring DAO
我们知道在使用JDBC时经常需要编写大量的重复代码代码,比如获得数据库连接、创建SQL语句、处理结果集,关闭数据库连接。Spring的DAO模块提取这些重复的代码,封装成一个统一的接口,使得开发过程中无须关注上述问题,不仅能够提高开发的速度,还能保证代码的质量。此外,还提供了Spring的事务管理服务。

(4)Spring上下文
程序的上下文就是程序运行的环境,在Spring中主要指Spring的配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。

(5)Spring ORM
Spring的ORM模块为几种流行的ORM框架提供了集成方案,包括Hibernate、JDO和iBATIS SQL映射

(6)Spring WEB
Web上下文模块建立于应用上下文模块之上,提供了一个适合于Web应用的上下文。

(7)Spring MVC
Spring MVC是构建在Spring理念之上的一个WEB框架,其基于模型-视图-控制器(Model-View-Controller)模式实现的,能够帮助我们构建像Spring框架那样灵活和松耦合的Web应用程序。

Spring是一个功能强大的开源框架,要想将其学好,要有持之以恒的毅力。

原创粉丝点击