Java框架之Spring(一)
在学习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(一)的更多相关文章
- java框架篇---spring AOP 实现原理
什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入 ...
- java框架之Spring(2)-注解配置IOC&AOP配置
注解配置IoC 准备 1.要使用注解方式配置 IoC,除了之前引入的基础 jar 包,还需要引入 spring-aop 支持包,如下: 2.在 applicationContext.xml 中引入 c ...
- java框架篇---spring IOC 实现原理
IOC(DI):其实这个Spring架构核心的概念没有这么复杂,更不像有些书上描述的那样晦涩.java程序员都知道:java程序中的每个业务逻辑至少需要两个或以上的对象来协作完成,通常,每个对象在使用 ...
- Java框架之Spring(四)
本文主要讲述在Spring中 1 注解方式装配 2 以自动扫描把组件纳入spring容器中管理 3 面象切面编程-代理的jdk 版实现 4 使用 Cglib 生成代理 5 aop编程的一些概念 6 使 ...
- java框架之Spring(1)-入门
介绍 概述 Spring 是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.Spring 是于 2003 年兴起的一个轻量级的 J ...
- java框架之Spring(4)-Spring整合Hibernate和Struts2
准备 导包 Struts2 导入 Struts2 zip 包解压目录下 'apps/struts-blank.war' 中所有 jar 包,如下: asm-3.3.jar asm-commons-3. ...
- Java - 框架之 Spring
一. IOC 和 DI IOC : 控制反转,将对象的创建权反转给了 Spring.DI : 依赖注入,前提是必须要有 IOC 的环境,Spring 管理这个类的时候将类的依赖的属性注入(设置)进来 ...
- java框架篇---spring hibernate整合
在会使用hibernate 和spring框架后 两个框架的整合就变的相当容易了, 为什么要整合Hibernate?1.使用Spring的IOC功能管理SessionFactory对象 LocalSe ...
- java框架篇---spring aop两种配置方式
第一种:注解配置AOP 注解配置AOP(使用 AspectJ 类库实现的),大致分为三步: 1. 使用注解@Aspect来定义一个切面,在切面中定义切入点(@Pointcut),通知类型(@Befor ...
- java框架篇---spring IOC依赖注入
spring依赖注入的方式有4种 构造方法注入 属性注入 工厂注入 注解注入 下面通过一个实例统一讲解: User.java package com.bjsxt.model; public class ...
随机推荐
- Python开发——5.函数
一.函数的定义 def test(x) "The Function definitions" x += return x def:定义函数的关键字 test:函数名 ():定义形参 ...
- C++顺序容器之list初探
C++顺序容器之list初探 双向链表,支持双向顺序访问.在list中任何位置进行插入和删除速度都很快. list不支持随机访问,为了访问一个元素,必须遍历整个容器. #include<iost ...
- mac中启动jmeter方法
1.mac中安装了jdk后,不需要去配置环境变量 2.现在jmeter包,解压缩后.打开terminal 3.在terminal中输入命令:sh jmeter.sh 打开Terminnal的方法: T ...
- Kaldi单音素模型 训练部分
在Kaldi中,单音素GMM的训练用的是Viterbi training,而不是Baum-Welch training.因此就不是用HMM Baum-Welch那几个公式去更新参数,也就不用计算前向概 ...
- c# 多线程实现ping 多线程控制控件
这个备份器放在项目目录下面,每次使用就双击一下,因为便捷性,就不采用xml等等储存信息,全部在面板内做,这样可以保证一个exe就运行了. 我发现运行起来还蛮快的,唯一没有实现的是ping通的电脑如果出 ...
- MySQL [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause
MySQL[Err]1055 上次MySQL5.7.19主从建立完成之后,所有的测试都是在MySQL命令行下进行的,最近用Navicat Premium进行MySQL的连接,然后在插入数据的时候MyS ...
- 在虚拟机上安装redis集群,redis使用版本为4.0.5,本机通过命令客户端可以连接访问,外部主机一直访问不了
在虚拟机上安装了redis 4 ,启动后本机客户端可以连接访问,但是外部主机一直访问不了,在使用java代码连接redis集群时报:no reachable node in cluster,原因:在r ...
- IDEA搭建SSM实现登录、注册,数据增删改查功能
本博文的源代码:百度云盘/java/java实例/SSM实例/SSM实现登录注册,增删改查/IDEA搭建SSM实现登录,注册,增删改查功能.zip 搭建空的Maven项目 使用Intellij id ...
- Liferay7 BPM门户开发之23: 了解内置工作流(Kaleo Workflow)
Liferay内置的工作流是企业版的功能,虽然简单粗糙,但依然不支持社区版.既然要用更强大的Activiti来替代它,那就非常有必要学习一下内置工作流的一些思想,以便借鉴. 它的特点: 实体的工作流操 ...
- 没有安装hiredis
在redis的发行包中的deps目录中就包含hiredis的源码,手动编译安装,或者自行下载一份.地址:hiredis的地址 cd /deps/hiredis make make install 然后 ...