spring简介

  Spring 是一个开源框架,中文意思就是春天,也许是作者想让自己的这个框架给Java开发人员带来春天吧。其官方网站是 https://spring.io/ ,可以在官方网站下载到完整的类库,源代码以及文档。spring是一个高度灵活的轻量级框架,其目的是降低企业级应用开发的复杂度。

spring的特点

  轻量级:Spring 是非侵入性的 - 基于 Spring 开发的应用中的对象可以不依赖于 Spring 的 API
  容器:Spring 是一个容器, 因为它包含并且管理应用对象的生命周期
  框架:Spring 实现了使用简单的组件配置组合成一个复杂的应用,在 Spring 中可以使用 XML 和 Java 注解组合这些对象
  一站式:在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库 (实际上 Spring 自身也提供了展现层的 SpringMVC 和 持久层的 Spring JDBC)

  依赖注入(DI --- dependency injection、IOC)
  面向切面编程(AOP --- aspect oriented programming)

  (个人认为依赖注入和面向切面变成是spring的核心,也是spring应用时需要主要学习的东西,我是小白,刚接触框架部分,希望有问题大家指出来,欢迎指教。)

  (额,还有个声明式事务处理,这一块我还没有去学,学完再来改这个地方吧)

spring3.0和spring4.0的功能组建模块有所不同

  spring3.0的主要结构只是7块(摘抄自Java程序员面试宝典)

模块 描述
Spring AOP 切面编程的思想,使spring框架管理的对象支持AOP,同时这个模块也提供了事务管理,可以不依赖具体的EJB组建,就可以将事务管理集成到应用程序中
Spring ORM 提供了对现有ORM框架的支持,例如Hibernate、JDO等
Spring DAO 提供对数据库访问对象(DAO)模式和JDBC支持,DAO可以实现把业务逻辑与数据库访问的代码实现分离,降低代码耦合度。通过对JDBC的抽象,简化了开发工作,同时简化了对异常的处理(可以很好的针对不同数据库厂商抛出的异常)。
Spring Web 提供了Servlet监听器的Context和Web应用的上下文。同时还集成了一些现有的Web框架,例如Structs
Spring Context 扩展核心容器,提供了Spring上下文环境,给开发人员提供了很多非常有用的服务,例如国际化、E-mail和JNDI访问等
Spring Web MVC 提供了一个构建Web应用程序的MVC的实现
Spring Core Spring框架核心容器,提供了Spring框架的基本功能。这模块最主要的组件为BeanFactory,它使用工厂模式来创建所需的对象。同时BeanFactory使用IOC思想,通过读取XML文件的方式来实例化对象,可以说BeanFactroy提供了组件生命周期管理,组件的创建、装配、销毁等功能。

  spring4.0建立了灵活的可热插拔的组件结构,基础框架如下图

(原谅我会的真的很少,又在网上摘抄到的)

Spring核心容器
容器是Spring框架最核心的部分,它管理着Spring应用中bean的创建、配置和管理。在该模块中,包括了Spring bean工厂,它为Spring提供了DI(DI—Dependency Injection,即“依赖注入”)的功能。基于bean工厂,我们还会发现有多种Spring应用上下文的实现,每一种都提供了配置Spring的不同方式。除了bean工厂和应用上下文,该模块也提供了许多企业服务,例如E-mail、JNDI访问、EJB集成和调度。
所有的Spring模块都构建于核心容器之上。当你配置应用时,其实你隐式地使用了这些类。

Spring的AOP模块
在AOP模块中,Spring对面向切面编程提供了丰富的支持。这个模块是Spring应用系统中开发切面的基础。与DI一样,AOP可以帮助应用对象解耦。借助于AOP,可以将遍布系统的关注点(例如事务和安全)从它们所应用的对象中解耦出来。

数据访问与集成
使用JDBC编写代码通常会导致大量的样板式代码,例如获得数据库连接、创建语句、处理结果集到最后关闭数据库连接。Spring的JDBC和DAO(Data Access Object)模块抽象了这些样板式代码,使我们的数据库代码变得简单明了,还可以避免因为关闭数据库资源失败而引发的问题。该模块在多种数据库服务的错误信息之上构建了一个语义丰富的异常层,以后我们再也不需要解释那些隐晦专有的SQL错误信息了!
对于那些更喜欢ORM(Object-Relational Mapping)工具而不愿意直接使用JDBC的开发者,Spring提供了ORM模块。Spring的ORM模块建立在对DAO的支持之上,并为多个ORM框架提供了一种构建DAO的简便方式。Spring没有尝试去创建自己的ORM解决方案,而是对许多流行的ORM框架进行了集成,包括Hibernate、Java Persisternce API、Java Data Object和MyBatis。Spring的事务管理支持所有的ORM框架以及JDBC。

Web与远程调用
MVC(Model-View-Controller)模式是一种普遍被接受的构建Web应用的方法,它可以帮助用户将界面逻辑与应用逻辑分离。Java从来不缺少MVC框架,Apache的Struts、JSF、WebWork和Tapestry都是可选的最流行的MVC框架。
虽然Spring能够与多种流行的MVC框架进行集成,但它的Web和远程调用模块自带了一个强大的MVC框架,有助于在Web层提升应用的松耦合水平。
除了面向用户的Web应用,该模块还提供了多种构建与其他应用交互的远程调用方案。
Spring远程调用功能集成了RMI(Remote Method Invocation)、Hessian、Burlap、JAX-WS,
同时Spring还自带了一个远程调用框架:HTTP invoker。Spring还提供了暴露和使用REST API的良好支持。

Instrumentation
Spring的Instrumentation模块提供了为JVM添加代理(agent)的功能。具体来讲,它为Tomcat提供了一个织入代理,能够为Tomcat传递类文件,就像这些文件是被类加载器加载的一样。如果这听起来有点难以理解,不必对此过于担心。

测试
Spring提供了测试模块以致力于Spring应用的测试。
通过该模块,你会发现Spring为使用JNDI、Servlet和Portlet编写单元测试提供了一系列的mock对象实现。对于集成测试,该模块为加载Spring应用上下文中的bean集合以及与Spring上下文中的bean进行交互提供了支持。

控制反转与依赖注入
IOC (Inversion of Control) :控制反转,通过容器来控制对象的创建及维护,对象中成员变量的创建及维护。反转就是将对象的控制权转移给容器处理,目的是获得更好的扩展性和可维护性。用白话来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。

依赖注入,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中

官方下载spring4.x最新开发版本  https://repo.spring.io/release/org/springframework/spring/

控制反转需要导入的jar包

还需要下载commons-logging日志文件     commons-logging-1.1.1.jar

先写一个简单的类HelloService

  

package com.icss.spring.service.impl;

import com.icss.spring.service.HelloService;

public class HelloServiceImpl implements HelloService{

    @Override
public void sayHello() {
System.out.println("hello");
} }

然后我们新建一个xml文件(在src目录下),配置spring的框架,记得build path哦!

*  spring-framework-reference/html/目录下
*  找到xsd-config.html.引入beans约束

<?xml version="1.0" encoding="UTF-8"?>
<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.xsd">
<!-- 创建对象 id="对象名" class="类的完整路径"-->
<bean id="helloService" class="com.icss.spring.service.impl.HelloServiceImpl"></bean>
</beans>

写测试类测试一下我们写的代码吧

package com.icss.spring.test;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource; import com.icss.spring.service.HelloService; public class Test {
public static void main(String[] args) {
//获取容器
ApplicationContext application=new ClassPathXmlApplicationContext("applicationContest.xml");//填入xml文件名,路径在src下
//BeanFactory application=new XmlBeanFactory(new ClassPathResource("applicationContest.xml"));//从bean工厂里面获取对象,与上面获取的区别为 上面的是直接初始化所有bean对象,在执行getBean()之前就开始了初始化工作,而这个是在得到对象时候才进行初始化操作
//获取业务对象
HelloService helloService=(HelloService) application.getBean("helloService");//获得bean对象 需要强转 不再需要去new对象啦
                                                   // 已经交给容器去实现了,这就是控制反转的实例
//调用对象的方法
helloService.sayHello();
}
}

(这里编者自己认为是代码的一个更新过程,毕竟这是三种里面最简单的通过配置文件实例化对象的方法,其他两种都稍显复杂,如果不对请指出,积极学习改正。)

这个方法是通过配置文件导入bean,其实是上课有讲到三种方法的,后面两种分别需要用简单静态工厂与工厂方法来创建,只进行简单的说明不做举例。

1.使用类构造器实例化(默认无参数)
<bean id="bean1" class="com.chinasofti.spring.demo1.Bean1"></bean>

2.使用静态工厂方法实例化(简单工厂模式)
<bean id="bean2" class="com.chinasofti.spring.demo2.Bean2Factory" factory-method="getBean2"></bean>
public class Bean2Factory{
      public  static Bean2 getBean2(){
            return new Bean2();
      }
}

3.使用实例工厂方法实例化(工厂方法模式):
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
<bean id="bean3Factory" class="com.chinasofti.spring.demo2.Bean3Factory"/>
public class Bean3Factory{
      public  Bean3  getBean3(){
                return new Bean3();

这里插入一张图   配置Eclipse中spring框架的xml的快捷提示  window-->xml catalog-->add-->spring-framework4.3.22.RELEASE\schema\beans\

这是我的第一篇博客,排版什么的都还不会,见证我的成长吧!!!

spring框架篇(一)-------spring简介与配置文件使用控制反转事例的更多相关文章

  1. Spring框架快速入门之简介

    Spring是java平台上的一个开源应用框架.它的第一个版本是由Rod Johnson写出来的.Rod在他的Expert One-On- One Java EE Design and Develop ...

  2. Spring框架系列(6) - Spring IOC实现原理详解之IOC体系结构设计

    在对IoC有了初步的认知后,我们开始对IOC的实现原理进行深入理解.本文将帮助你站在设计者的角度去看IOC最顶层的结构设计.@pdai Spring框架系列(6) - Spring IOC实现原理详解 ...

  3. Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程

    上文,我们看了IOC设计要点和设计结构:紧接着这篇,我们可以看下源码的实现了:Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的. ...

  4. Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等)

    上文,我们看了IOC设计要点和设计结构:以及Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的:容器中存放的是Bean的定义即Be ...

  5. Spring框架系列(11) - Spring AOP实现原理详解之Cglib代理实现

    我们在前文中已经介绍了SpringAOP的切面实现和创建动态代理的过程,那么动态代理是如何工作的呢?本文主要介绍Cglib动态代理的案例和SpringAOP实现的原理.@pdai Spring框架系列 ...

  6. Spring框架学习03——Spring Bean 的详解

    1.Bean 的配置 Spring可以看做一个大型工厂,用于生产和管理Spring容器中的Bean,Spring框架支持XML和Properties两种格式的配置文件,在实际开发中常用XML格式的配置 ...

  7. Spring框架系列(2) - Spring简单例子引入Spring要点

    上文中我们简单介绍了Spring和Spring Framework的组件,那么这些Spring Framework组件是如何配合工作的呢?本文主要承接上文,向你展示Spring Framework组件 ...

  8. Spring框架系列(9) - Spring AOP实现原理详解之AOP切面的实现

    前文,我们分析了Spring IOC的初始化过程和Bean的生命周期等,而Spring AOP也是基于IOC的Bean加载来实现的.本文主要介绍Spring AOP原理解析的切面实现过程(将切面类的所 ...

  9. Spring框架系列(10) - Spring AOP实现原理详解之AOP代理的创建

    上文我们介绍了Spring AOP原理解析的切面实现过程(将切面类的所有切面方法根据使用的注解生成对应Advice,并将Advice连同切入点匹配器和切面类等信息一并封装到Advisor).本文在此基 ...

随机推荐

  1. Codeforces Hello 2018 E题Logical Expression dp+最短路 好题

    j题目链接: http://codeforces.com/contest/913/problem/E 题意: 给你x,y,z三个变量,与&   或|  非!  括号()   四种运算符,规定括 ...

  2. windows安装oracle-odbc驱动错误原因

    在windows7上准备使用powerdesigner16连接oracle逆向生成表结构,确发现一直无法连接oracle,其原因是本机没有ODBC驱动. 第一步 安装oracle11g客户端,这里是具 ...

  3. Ubuntu如何使用Vscode写C++代码

    (一). 下载Vscode (1). 打开Ubuntu软件 (2). 搜索Vscode,下载并运行. (二). 安装C++ (1). 看到右边的列表,点击最下面的 (2). 然后我们搜索和下载 C++ ...

  4. ckeditor_配置 修改工具栏段落的标签和在文中的格式

    在默认的工具栏中自带一个格式的选项,可以编辑文字的段落属性,将文字转换为标题.ckeditor中提供了方法可以对这个标签进行修改. 正在做的项目中不叫标题1标题2,叫章.节.条... . 需要进行配置 ...

  5. C语言权威指南和书单 - 初学者

    注:点击标题免费下载电子书 1. C Primer Plus (5th Edition) 2. A Book on C C Programming: A Modern Approach (2nd Ed ...

  6. Python全栈之路----常用模块----hashlib加密模块

    加密算法介绍 HASH       Python全栈之路----hash函数 Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列 ...

  7. CSS Sprites ——雪碧图的使用方法

    首先解释下CSS Sprites是什么:有称CSS精灵,有称CSS雪碧的,无论叫什么,他的作用就是把网页上很多小图标放到一张图片里面,然后通过CSS里面的background-position来控制每 ...

  8. 20155219付颖卓《网络攻防》Exp4 恶意代码分析

    一.基础问题回答 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控. 可以用window7自带的schtasks ...

  9. linux配置服务器

    梳理一下这次配置服务器的思路. 1,挂载磁盘 Java和neigx上传到根目录下,tomcat放在data目录下,数据库新建文件夹也在data下, 2,配置环境变量 3,nginx修改域名 4,数据库 ...

  10. 2019年4月zstu月赛A: 我不会做

    问题 A: 我不会做 时间限制: 1 Sec  内存限制: 128 MB 题目描述 众所周知,duxing201606就是plw. 然而已经9102年了,plw仍旧没有npy.plw非常难过,于是他打 ...