• 使用SMM框架开发企业级应用-----Spring简介即Spring Ioc


    Spring框架简介

      Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

      spring的基本框架主要包含六大模块:DAO、ORM、AOP、JEE、WEB、CORE

        

      

      Spring DAO:Spring提供了对JDBC的操作支持:JdbcTemplate模板工具类 。

      Spring ORM:Spring可以与ORM框架整合。例如Spring整合Hibernate框架,其中Spring还提供HibernateDaoSupport工具类,简化了Hibernate的操作 。

      Spring WEB:Spring提供了对Struts、Springmvc的支持,支持WEB开发。与此同时Spring自身也提供了基于MVC的解决方案 。

      Spring  AOP:Spring提供面向切面的编程,可以给某一层提供事务管理,例如在Service层添加事物控制 。

      Spring   JEE:J2EE开发规范的支持,例如EJB 。

      Spring Core:提供IOC容器对象的创建和处理依赖对象关系 。

    Spring优点

      1.方便解耦,简化开发 (高内聚低耦合) 

        Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理 

        spring工厂是用于生成bean

      2.AOP编程的支持 

        Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能

      3.声明式事务的支持 

        只需要通过配置就可以完成对事务的管理,而无需手动编程

      4.方便程序的测试 

        Spring对Junit4支持,可以通过注解方便的测试Spring程序

      5.方便集成各种优秀框架 

        Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持

      6.降低JavaEE API的使用难度 

        Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低

    为什么要使用Spring

      Spring最根本的使命,简化java开发;

      为了降低java开发的复杂性,Spring采取了以下四种关键策略:

        1. 基于POJO的轻量级和最小侵入性编程;

        2. 通过依赖注入和面向接口编程实现松耦合;

        3. 基于切面和惯例进行声明式编程;

        4. 通过切面和模板减少样式代码;

    控制反转

      控制反转也称为依赖注入,是面向对象编程中的一种设计理念,用来降低程序代码之间的耦合度;

      IoC 不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是 松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。

      就是具有依赖注入功能的容器,是可以创建对象的容器,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。通常new一个实例,控制权由程序员控制,而"控制反转"是指new实例工作不由程序员来做而是交给Spring容器来做。在Spring中BeanFactory是IOC容器的实际代表者。

      其实IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。

      IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们,我们找你”;即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。

    依赖注入DI

       DI—Dependency Injection,即“依赖注入”组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

       理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”,那我们来深入分析一下:

         ●谁依赖于谁:当然是应用程序依赖于IoC容器

         ●为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源

         ●谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象

        ●注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)

      IoC和DI由什么关系呢?其实它们是同一个概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”

    Spring IOC例子

      步骤一:导依赖

        <dependency>

         <groupId>org.springframework</groupId>

          <artifactId>spring-beans</artifactId>

          <version>4.2.0.RELEASE</version>

        </dependency>

        <dependency>

          <groupId>org.springframework</groupId>

          <artifactId>spring-context</artifactId>

          <version>4.2.0.RELEASE</version>

        </dependency>

        <dependency>

          <groupId>org.springframework</groupId>

          <artifactId>spring-core</artifactId>

          <version>4.2.0.RELEASE</version>

        </dependency>

        <dependency>

          <groupId>org.springframework</groupId>

          <artifactId>spring-expression</artifactId>

          <version>4.2.0.RELEASE</version>

        </dependency>

        <dependency>

          <groupId>org.springframework</groupId>

          <artifactId>spring-jdbc</artifactId>

          <version>4.2.0.RELEASE</version>

        </dependency>

      步骤二:编写实体类

        

      步骤三:创建Spring核心配置文件--applicationContext.xml

        

      步骤四:测试

        

  • 相关阅读:
    Java连载63-异常处理try...catch...、方法getMessageyu printStackTrace
    Python连载58-http协议简介
    Java连载62-使用throws关键字处理异常
    HTML连载57-相对定位和绝对定位
    Java连载61-异常的机制与分类
    Python连载57- 邮件头和主题、解析邮件
    Java连载60-类之间的六种关系
    [Java] 数据库编程JDBC
    [bug] MySQL-Front连接MySQL 8.0失败
    [bug]mysql: The server time zone value '&#214;&#208;&#185;&#250;&#177;&#234;&#215;&#188;&#202;&#177;&#188;&#228;' is unrecognized or represents more than one time zone
  • 原文地址:https://www.cnblogs.com/haohanwuyin/p/11740354.html
Copyright © 2020-2023  润新知