Spring框架 简介

本文详细介绍了Spring框架的核心功能及其发展历程,解释了IoC(控制反转)和DI(依赖注入)的概念与作用,展示了如何通过Spring框架实现松耦合、易于测试的程序设计,并探讨了其在不同应用场景中的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发工具STS--IDE的选择

              STS即Spring Tool Suite,下载地址: http://spring.io/tools。简单的说STS是基于eclipse开发环境的客制化用来开发Spring应用程序,建议使用。

           STS是基于Eclipse构建的,Eclipse有的功能它都有,并且集成了Spring以及一些常用的插件,例如Git,GitHub,Roo, Pivotal tc Server等,它不仅仅是简单的将插件集成进去,而是提供了一个Spring开发中的完整解决方案,可以在很大程度上简化Spring相关应用的开发。 推荐版本是2015年7月发布的3.7版本,主要更新:将eclipse版本更新至Eclipse Oxygen 4.7.3 GA、Spring Boot(JavaEE开发的颠覆者集大成者, 推荐大家学习)的配置语言YAML编辑器的支持(包含自动提示,鼠标悬停,代码导航以及错误和警告)、云平台Cloud Foundry支持的提升、Pivotal tc  Server(一款基于tomcat的servlet容器,内置在STS中)、Spring Roo支持

设计模式

       是指由专家总结出来的在某种情况下解决某类问题的最佳解决方案。是思想,是知识,抽象的

设计模式的六大原则:

       单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则

框架

       是用于处理某种问题的半成品软件,供开发人员通过定制进行高效开发.是工具

JavaSE的设计模式

       什么是GOF(四人帮,全拼 Gang of Four)?

         在1994年由四人合著出版了一本名为Design Patterns - Elements of Reusable Object-Oriented Software(设计模式 -

    可复用的面向对象软件元素)的书,该书首次提到了软件开发中设计模式的概念。

         GOF总结了JavaSE开发中常见的23种设计模式,可以分为3大类:创建型模式、结构型模式、行为型模式

XML的解析:

       常见的有2种解析模型:SAX和DOM

       常见的解析工具有:DOM4j/jdom/xpull...,SUN为了规范xml文件解析提出了JAXP规范(javax.xml.parsers)

<?xml version="1.0" encoding="UTF-8"?>

       <beans>

              <bean id="product" class="com.yan.test4.ProduceImpl"/>

       </beans>

       public class BeanFactory {

              private static final Map<String, Object> map = new HashMap<String, Object>();

              private BeanFactory() {

              }     

              static {

                     try {

                            parseXML();

                     } catch (Exception e) {

                            e.printStackTrace();

                     }

              }

              public static Object getBean(String key) {

                     if (map.containsKey(key))return map.get(key);  额外获取了单例的效果

                     return null;

              }

              private static void parseXML() throws Exception {

                     SAXParserFactory fac = SAXParserFactory.newInstance();

                     SAXParser parser = fac.newSAXParser();

                     parser.parse("beans.xml", new DefaultHandler() {

                            @Override

                            public void startElement(String uri, String localName,String qName, Attributes attributes) throws SAXException {

                                   if ("bean".equals(qName)) {

                                          try {

                                                 String id = attributes.getValue("id");

                                                 String className = attributes.getValue("class");

                                                 Object obj = Class.forName(className).newInstance();

                                                 map.put(id, obj);

                                          } catch (Exception e) {

                                                 throw new SAXException(e.getMessage());

                                          }

                                   }

                            }

                     }

                 );

              }

       }

 

 

Spring框架最重要是提供了以类似上面xml+BeanFactory的方式管理配置在xml文件中的受管Bean

Hello Spring

       Spring的IoC容器将面向接口的编程代价降到了最低

       1、添加jar包

       <dependency>

                     <groupId>org.springframework</groupId>

                     <artifactId>spring-context-support</artifactId>

                     <version>5.0.8.RELEASE</version>

              </dependency>

 

       2、定义核心配置文件,实际上文件名称没有规定,一般位于src根目录下,名称为applicationContext.xml

<?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">

             

                     <bean id="produce" class="com.yan.test4.ProduceImpl"/>

              </beans>

 

       3、通过Spring获取配置的bean对象

       Resource r = new ClassPathResource("applicationContext.xml");

              BeanFactory fac = new XmlBeanFactory(r);

              IProduce p=(IProduce) fac.getBean("produce");

              System.out.println(p);      

 

什么是Spring

Spring是一个轻量级的控制反转IoC/DI依赖注入和面向切面AOP的开源容器框架,是一个开源的Java/Java EE全功能栈full-stack的应用程序框架,以Apache许可证形式发布

它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的, 2002年Rod Johnson在他的Expert One-On-One Java EE Design and Development一书中首次发布了这个框架,并奠定了作者的大师地位。该框架也可以移植到.NET的环境下。

Spring框架本身并没有强制实行任何特别的编程模式。在Java社区里,Spring作为EJB模型之外的另外一个选择甚至是替代品而广为流行。从设计上看,Spring给予了Java程序员许多的自由度,但同时对业界常见的问题也提供了良好的文档和易于使用的方法。

Spring框架的核心功能在任何Java应用中都是适用的。在基于Java企业平台上的web应用中,大量的拓展和改进得以形成。为此,Spring获得了广泛的欢迎,并被许多公司认可为具有战略意义的重要框架。

 

Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情[声明式事务管理  SessionBean会话bean用于封装业务处理逻辑  EntityBean实体bean用于封装数据访问逻辑{BMP是bean管理的持久化,CMP容器管理的持久化} MessageDrivenBean消息驱动bean用于实现异步的逻辑处理]。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益

Spring的发展历程

       2000年Spring框架最开始的部分是由Rod Johnson于2000年为伦敦的金融界提供独立咨询业务时写出来的。在2002年编著的《Expert one on one J2EE design and development》一书中,对Java EE 系统框架臃肿、低效、脱离现实的种种现状提出了质疑,并积极寻求探索革新之道。发布了自己的代码(interface21)以阐述“如何让应用程序能以超出当时大众所惯于接受的易用性和稳定性与J2EE平台上的不同组件合作”的观点

       2003年2月,一批自愿拓展Spring框架的程序开发人员组成了团队,在Sourceforge上构建了一个项目。

       2003年6月,Spring的框架首次在Apache 2.0的使用许可中发布。

       2004年3月在Spring框架上工作了一年之后,这个团队发布了第一个版本(1.0)。

       2005年,Spring框架的开发人员成立了自己的公司,来提供对Spring的商业支持,其中最显著的就是与BEA的合作。

       2009年VMware以4.2亿美元收购SpringSource,Spring开始向云计算方向发展。通过与VMware的合作计划为数据中心、私有云及公共云创建一个独立、集成同时又融合了构建、运行及管理于一身的解决方案。

       Springboot  springdata springcloud

IoC是什么 ?

IoC -- Inversion of control, 控制反转。在Java开发中,IoC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。IoC是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则.

IoC能干什么?

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

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

DI是什么?

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

控制反转和依赖注入之间是同一个概念吗?

    它们不是同一个概念,但是它们是同一个概念的不同角度的描述。

    控制反转(IoC)从 IoC容器的角度来说

    依赖注入(DI) 从应用程序的角度来说

Ioc/DI的基本思想:   

1、把程序之间的依赖关系去掉

2、把程序对象设置到IoC/DI容器的配置中,作为Bean来统一管理

3、由IoC/DI容器来管理Bean的创建、实例化

4、由IoC/DI容器来把Bean之间的关系注入到需要这些关系的对象里面

 

 简而言之:就是把对象之间的依赖关系全部去掉,由IoC/DI容器来管理对象和对象之间的依赖关系,实现对象之间的松散耦合.

IoC容器:

    简单的理解就是,实现IoC思想,并提供对象创建、对象装配以及对象生命周期管理的软件就是IoC容器

IoC理解:

1、应用程序无需主动new对象;而是描述对象应该如何被创建即可,IoC容器帮你创建,即被动实例化;

2、应用程序不需要主动装配对象之间的依赖关系,而是描述需要哪个服务,IoC容器会帮你装配,被动接受装配;

3、主动变被动,以前创建对象、装配对象的依赖关系都是由应用程序主动完成,现在变成被动了由IoC容器来完成;

4、应用程序不知道依赖的具体实现,只知道需要提供某类服务的对象,达到并松散耦合;

5、是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则.

使用Ioc/DI容器开发需要改变思路: 

1、应用程序不主动创建对象,但是要描述创建它们的方法

2、在应用程序代码中不直接进行服务的装配,但是要描述哪一个组件需要哪一项服务,由容器负责将这些装配在一起

  也就是说:所有的组件都是被动的,组件初始化和装配都由容器负责,应用程序只是获取相应的组件后,实现应用的功能即可.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值