在学习Spring之前,需要回忆一下工厂模式。下面会演示一段代码,自己体会。之所以要工厂模式是因为他有一个好处,很像Spring的用法。在实际开发中,new对象对于一个开发人员来说是一件非常需要小心谨慎的事情,也很考验人。new对象需要考虑的因素比较多,所以不要轻易去new,最好去调用。在工厂模式中,它将一些功能类封装起来,开发者只需去调用。在Spring中有个控制反转(IOC)和这个很像,可以自己体会一下。

一、工厂模式回顾(代码实例)

public class Test {
public static void main(String[] args) {
//未用工厂模式 要在这里自己创建(如下一行)
//TV tv= new TV(100,50,"绿色","熊猫"); //我们负责创建这个对象的实例 ,产生了依赖 TV tv1 =TVFactory.createTV(); //使用工厂,可以解耦合
TV tv2 =TVFactory.createTV(); System.out.println(tv1==tv2); //false
tv1.play();
tv2.play();
}
}
class TV
{
private int height;
private int width;
private String color;
private String pinpai;
TV(int height,int width,String color,String pinpai){
this.height=height;
this.width=width;
this.color=color;
this.pinpai=pinpai;
}
void play(){
System.out.println("电视机外观:");
System.out.println(pinpai+" " +height + width+color );
System.out.println("--电视开始播放----");
System.out.println("播放美国的节目....");
}
}
class TVFactory {
//生产电视
public static TV createTV(){
TV tv= new TV(100,50,"绿色","熊猫");
return tv;
}
}

二、Spring 简介

Spring 是一个 开源的、控制反转 (inversion of control -> IOC ) 的面向切面( AOP ) 的容器框架,它主要的目的是简化企业开发。

使用Spring 的好处:

1.降低组件之间的耦合度,实现软件各层之间的解耦;

2.可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务.也不需处理复杂的事务传播;

3.容器提供单例模式支持,开发人员不再需要自己编写实现代码;

4.容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能;

5.容器提供的众多辅作类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate;

6.Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,这样更便于应用的开发;

Spring 负责管理容器中所有的组件, 这些组件统称为 Bean , 在Spring 的概念里,一切都是Bean,其实Spring就是面向Bean的编程(BOP,Bean Oriented Programming )。组成Spring的模块(组件)都可以单独存在 主要模块如下:

1)Spring Core (核心容器)

Supporting utlities

Bean container

核心容器: 提供Spring 框架的基本功能,核心容器的主要给件是BeanFactory,它是工厂模式的实现。BeanFactory 例用控制反转(IOC) 模式将应用程序的配置和依赖规范与实际的应用程序代码分开。

2)Spring Context  (上下文的一个配置文件)

Application Context

Ui Support

validation

JNDI EJB supprot and remodeling Mail

Spring 上下文是一个配置文件,向Spring框架提供上下文信息。Spring 上下文包括企业服务,例如

JNDI 、EJB、电子邮件、国际化、校验和调度功能。

3)Spring AOP

Source-level

metadata

AOP infrastructure

通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了Spring 框架中。所以,可以很容易地使Spring框架管理的任何对象支持AOP 。Spring AOP 模块为基于Spring的应用程序中的对象提供了事务管理服务。通过使用Spring AOP ,不用依赖EJB 组件,就可以将声明性事务管理集成到应用程序中。

4)Spring DAO

Transaction infrastructure

JDBC support

DAO support

DBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的DAO 异常层次结构。

5)Spring ORM

Hibernate Support

IBatis support

JDO Support

Spring 框架插入了若干个ORM 框架,从而提供了ORM的对象关系工具,其中包括JDO 、Hibernate 和iBatis SQLMap 。    所有这些都遵从Spring 的通用事务和DAO 异常层次结构。

6) Spring WEB

WebApplicationContext

Multipart resolver

Web Utilites

Web上下文模块建立于应用上下文模块之上,提供了一个适合于Web应用的上下文。另外,这个模块还提供了一些面向服务支持。例如:实现文件上传的multipart请求,它也提供了Spring和其它Web框架的集成,比如Struts、WebWork。

7) Spring MVC

Web Mvc

framework

JSP/velocity

PDF/Export

Spring为构建Web应用提供了一个功能全面的MVC框架。虽然Spring可以很容易地与其它MVC框架集成,例如Struts,但Spring的MVC框架使用IoC对控制逻辑和业务对象提供了完全的分离。它也允许你声明性地将请求参数绑定到你的业务对象中,此外,Spring的MVC框架还可以利用Spring的任何其它服务,例如国际化信息与验证。

Spring带来了复杂的J2EE开发的春天。它的核心是轻量级的IoC容器,它的目标是为J2EE应用提供了全方位的整合框架,在Spring框架下实现多个子框架的组合,这些子框架之间可以彼此独立,也可以使用其它的框架方案加以代替,Spring希望为企业应用提供一站式(one-stopshop)的解决方案

三、Spring 中的重要概念

1) IOC (控制反转)

应用本身不负责依赖对象的创建和维护,而是交给其他程序去创建, 这样,控制权就由应用转到了外部容器,控制权的转移, 就叫控制反转。

//例子:
public class UserAcrion{
private IUserDao dao =new UserDaoImpl(); //创建一个dao对象 //业务方法
public String execute(){
dao.addUser(user);
} }
//反转形式的 

        public class UserAcrion{
UserAcrion(IUserDao dao){
this.dao=dao;
}
private IUserDao dao; //业务方法
public String execute(){
dao.addUser(user);
}
} //其他程序调用的时候
IUserDao dao=new UserDaoMysqlImpl(); //其他程序控制这个对象的创建
new UserAcrion(dao);

2) DI (依赖注入)

当我们把依赖对象交给外部容器负责创建, 上面的程序可以改成

public class UserAcrion{
private IUserDao dao; //依赖对象
...要生成 set 方法 public String execute(){
dao.addUser(user);
}
}

在程序运行期,动态的由外部容器(Srping),将依赖对象注进来,称为依赖注入。

3) AOP (Aspect Oriented Programming) 面向切面编程

例如:Struts2 中拦截器

可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。

Java框架之Spring(一)的更多相关文章

  1. java框架篇---spring AOP 实现原理

    什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入 ...

  2. java框架之Spring(2)-注解配置IOC&AOP配置

    注解配置IoC 准备 1.要使用注解方式配置 IoC,除了之前引入的基础 jar 包,还需要引入 spring-aop 支持包,如下: 2.在 applicationContext.xml 中引入 c ...

  3. java框架篇---spring IOC 实现原理

    IOC(DI):其实这个Spring架构核心的概念没有这么复杂,更不像有些书上描述的那样晦涩.java程序员都知道:java程序中的每个业务逻辑至少需要两个或以上的对象来协作完成,通常,每个对象在使用 ...

  4. Java框架之Spring(四)

    本文主要讲述在Spring中 1 注解方式装配 2 以自动扫描把组件纳入spring容器中管理 3 面象切面编程-代理的jdk 版实现 4 使用 Cglib 生成代理 5 aop编程的一些概念 6 使 ...

  5. java框架之Spring(1)-入门

    介绍 概述 Spring 是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.Spring 是于 2003 年兴起的一个轻量级的 J ...

  6. java框架之Spring(4)-Spring整合Hibernate和Struts2

    准备 导包 Struts2 导入 Struts2 zip 包解压目录下 'apps/struts-blank.war' 中所有 jar 包,如下: asm-3.3.jar asm-commons-3. ...

  7. Java - 框架之 Spring

    一. IOC 和 DI IOC : 控制反转,将对象的创建权反转给了 Spring.DI  : 依赖注入,前提是必须要有 IOC 的环境,Spring 管理这个类的时候将类的依赖的属性注入(设置)进来 ...

  8. java框架篇---spring hibernate整合

    在会使用hibernate 和spring框架后 两个框架的整合就变的相当容易了, 为什么要整合Hibernate?1.使用Spring的IOC功能管理SessionFactory对象 LocalSe ...

  9. java框架篇---spring aop两种配置方式

    第一种:注解配置AOP 注解配置AOP(使用 AspectJ 类库实现的),大致分为三步: 1. 使用注解@Aspect来定义一个切面,在切面中定义切入点(@Pointcut),通知类型(@Befor ...

  10. java框架篇---spring IOC依赖注入

    spring依赖注入的方式有4种 构造方法注入 属性注入 工厂注入 注解注入 下面通过一个实例统一讲解: User.java package com.bjsxt.model; public class ...

随机推荐

  1. linux服务器时间同步失败解决方法

    linux服务器时间同步失败解决方法 1.为什么会时间不同步: ①计算机的时间是根据电脑晶振以固定频率震荡而产生的,由于晶振的不同或者老化,会导致电脑时间积累误差的产 (什么是电脑晶振:http:// ...

  2. subarray sum

    public class Solution { /* * @param nums: A list of integers * @return: A list of integers includes ...

  3. 关于java集合的一些操作

    1.数组转集合 java提供了一个方法:Arrays.asList(T... a)的方法. 测试: String[] arr = {"Lida","huanda" ...

  4. java之ArrayList详细介绍

    1  ArrayList介绍 ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List ...

  5. linux下编写C++程序播放音频

    参考: https://blog.csdn.net/zlyaxixuexi/article/details/79014441 格式转换: https://www.media.io/zh/

  6. InnoDB体系架构(三)Checkpoint技术

    Checkpoint技术 前篇 InnoDB体系架构(二)内存 从缓冲池.缓冲池的管理.重做日志缓冲.额外内存缓冲这四个点介绍了InnoDB存储引擎的内存结构,而在将缓冲池的数据刷新到磁盘的过程中使用 ...

  7. Shell-8--数值运算及处理

    RANDOM 默认范围是 0~32767

  8. PHP-1安装配置

    php-fpm启动 /usr/local/php/sbin/php-fpm start

  9. Java的组合排列问题

    从4个人中选2个人参加活动,一共有6种选法. 从n个人中选m个人参加活动,一共有多少种选法?C(m/n)=C((m-1)/(n-1))+C(m/(n-1))数学算法 public class Main ...

  10. 在word 2010中采用EndNote X7插入引用

    本文只供入门操作,记于此以防自己忘记,或帮助走过路过的你解决一时之需,即便是只能帮助到一个人,我的辛苦也就没有白费. 用EndNote向Word中直接插入参考文献能极大的提高论文写作的速度.在此以En ...