初始Spring

Spring是一个轻量级开源框架.说到Spring的特性就不得不说IOC和AOP,那咱们就分别说明一下.

(一)IoC(Inversion of Control):控制反转

  众所周知,在学习Java基础的时候会讲到对象间的关系可以归为四种分别为:依赖、关联、聚合和组合.这里的依赖关系指的其实是类和类之间的关系.

  举个栗子:就像是人要吃饭喝水,但是人体本身是不生产食物和水源的,这就叫做人依赖于食物和水源.

  百度百科有一种说法是"可以把IoC模式看做是工厂模式的升华,可以把IoC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的,然后利用Java 的‘反射‘编程,根据XML中给出的类名生成相应的对象。从实现来看,IoC是把以前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性"。

  可见其实IoC的底层实现是"反射",反射是啥?其实就像是克隆人,给一个DNA,他给你造出来一个人。大概就这意思吧!

  可是为啥要使用XML配置文件呢?在实际开发中项目上线的时候往往不可能像咱们编程时候一样停止服务器修改代码再编译后运行,客户的机器上是没有装什么JDK、Tomcat的。XML的最大优点是修改后是不需要编译,设置可以实现“热插拔”,这样就大大降低了我们在实战中修改代码的难度。

  关于依赖注入还可以参考 http://blog.csdn.net/u011637069/article/details/51958918 ,他写的还是蛮全的。

(二)AOP(Aspect Oriented Programming):面向切面编程

  一提到Java大家最先想到的是“对象”,是的Java入门的时候学的就是“OOP(面向对象编程)”,而AOP实际上是OOP的升级版。

  为什么这么说呢?因为AOP是根据业务逻辑在OOP的基础上将部分业务根据切面进行抽取和封装,以便获取逻辑清晰、简洁的代码,并且实现了松耦合的目的。这里最具代表性的我觉得就是“日志记录”了。

  举个栗子:公司OA系统,A员工想要修改B表格,之后C员工发现表格资料有问题,怎么知道谁修改了表格呢?只要查看日志文件就好了啊!

  所以程序员在开发OA的时候在修改文件的方法上可以调用记录日志功能,可是很多地方都有需要这个功能,怎么办呢?此时我们就可以引入AOP的思想,将记录日志的功能提取出来与对象隔离开来封装成“log切面”,可是与对象隔离开了怎么调用呢?这就要引入“代理模式”啦!代理模式其实就是对目标类在功能上的扩充。也就是在执行到目标方法的时候代理对象说“等一下”我加点儿东西,把log切面加进去了,日志就记录上了“谁什么时间干了什么事儿!”,然后程序继续运行。

  可见AOP的底层实现是“动态代理”。代理模式分为:静态代理和动态代理,而动态代理又有JDK动态代理和CGLib代理等等。具体的在此暂不多说,之后有时间另开一章说说。

其实Spring除了IOC和AOP还有一个非常重要的特点就是“容器”的概念。

 (三)容器(Beans)

  容器的存在目的应该是跟JavaBean一起使用,是滴,容器可以给JavaBean初始化赋值(这里的话也要用到IoC的DI)。

  org.springframework.beans 包中有一个类叫做“BeanFactory”,顾名思义它是一个Bean工厂(静态工厂模式),可以生产出来Bean对象。这些个Bean产品默认是“单例”的(scope = singlton,容器加载的时候就被实例化了,这个工厂的产品可是限量版的),也可以设置为多例的(scope = prototype,延迟实例化)。

下图为Spring按照功能划分的示例图:

Data Access/Integration:数据集成,提供了如JDBC、ORM、事物管理等功能的支持。

Web:可以理解为Spring MVC,提供了如套接字、servlet、文件上传等功能的支持。

Messaging:是spring4新增加的功能,提供了message应用的实现。

Core Container:Spring核心功能,其中core和bean是整个框架的核心,core提供了基础的DI和IoC功能,bean实现了容器的支持。 Context建立在core和beans模块之上,beans模块继承它的功能同时增加了国际化支持,并且支持EJB等。SpEL是Spring EL表达式,暂时还没用过。

Test:就是测试用的,例如:Junit。

时间: 2024-10-14 13:36:25

初始Spring的相关文章

初始spring security(一)

第一次接触spring security,第一个例子是最简单,实现的功能也仅仅是权限控制一些最基本的功能: 首先是web.xml文件: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www

Spring boot+Mysql+Spring data JPA一个Web的Demo

1.概述 因为要用spring boot,最近刚刚学习.这是一个web项目的配合mysq+Hibernate+tomcat的简单示例demo,很容易在此基础上扩展成自己的项目. 2.创建初始spring demo 作者用的IDE是IDEA,新建一个工程,选择Spring Initalizer.下一步的话由于作者需要部署到服务器上面,选择了war.不需要的话可以选择jar.选择spring web+spring Data JPA+Mysql Driver. 然后完成即可,首次运行的话配置依赖需要一

单元测试(三)

前言:前面讲了java的junit,这里讲一下spring+junit.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9419224.html Spring Test介绍 当应用使用了Spring时,编写单测时需要每次手动的初始化Spring上下文,这种方式不仅繁琐,而且不能复用Spring上下文,导致单测执行时间变长,为此,Spring提供了对单测的支持,也就是Spring Test模块 Spring和JUnit的整合,提供了对应的Runner和Rule

单元测试基础知识(三)

9.单测工具简介 JUnit Java用的最多的单测框架,使用非常简单,主流IDE基本都集成了JUnit,具体用法就不介绍了,可以花十分钟看看官方文档http://junit.org/junit4/ TestNg 是一款基于junit框架上的加强版单元测试框架,具备更多更强大的功能,能够执行比较复杂的程序代码,具体用法这里也不介绍了,可以花十分钟看看官方文档http://testng.org/doc/documentation-main.html Runner JUnit的Runner是指继承了

Spring Boot:简化Spring应用初始搭建以及开发过程(转)

Spring Boot专注于Spring平台和第三方开发库,简化了基于Spring的产品开发.让你在开始Spring应用开发时,不会被各种繁杂的事务困扰.通过Spring Boot,开发时只需少量的Spring配置就可以完成项目结构的初始搭建. 功能特性 创建独立的Spring应用程序. 直接嵌入Tomcat.Jetty和Undertow(无需部署WAR文件). 使用特定的POM文件,简化Maven配置. 尽可能自动化配置Spring. 提供产品级特性,比如指标测量.健康检查.外部配置等. 绝对

Spring.NET 配置错误【Spring.Context.Support.ContextRegistry”的类型初始值设定项引发异常。】

用VS 2013 ,配置Spring后,运行时出现如下错误: Spring.Context.Support.ContextRegistry”的类型初始值设定项引发异常. 原因:App.config配置文件,startup放到文件前了. 解决方法:将startup放到最后,问题没有了. <?xml version="1.0" encoding="utf-8"?><configuration> <configSections> <

8、spring注解学习(bean的生命周期)——让Bean实现InitializingBean,DisposableBean这两个接口进而实现初始和销毁方法

1.创建Tiger类实现InitializingBean,DisposableBean接口,并通过@Component将该组件注入 @Component public class Tiger implements InitializingBean,DisposableBean{ public Tiger() { System.out.println("Tiger的构造方法执行了..."); } /** * 此方法就是在调用构造方法之后属性都赋完值就执行 */ @Override pub

框架-------(二)Spring和SpringMVC框架(序列一初始原理概念)

1.什么是Spring? Spring是个java企业级应用的开源框架.Spring主要目标就是简化开发,并通过pojo为基础的编程模型促进良好的编程习惯. 2.为什么要使用Spring框架 它是轻量级的开源框架,基本的版本大约2MB. 控制反转IOC:Spring通过控制反转实现了松散耦合,对象们给出他们的依赖,而不是直接创建或者查找依赖的对象. 面向切面编程:AOP,Spring支持面向切面编程,应用业务逻辑和系统服务分开. 容器:Spring包含并管理应用中对象的生命周期和配置 MVC框架

spring boot 初始及快速搭建

spring boot 的核心功能 1.spring boot 可以以jar包的形式独立运行项目,通过java -jar xx.jar来运行 2.内嵌tomcat,jetty或者undertow 3.简化maven的配置  使用spring-boot-starter-web,会自动加载所需要的依赖包 4.自动配置 spring 5.准生产的应用监控 提供http.ssh.telnet对运行时的项目进行监控 6无代码生成和xml配置 spring boot 的优点 1.快速构建项目 2.对主流开发