Spring到底是什么?

    xiaoxiao2021-03-25  101

    一、Spring最根本的使命    Spring框架的目标就是简化Java企业级应用开发,并通过以POJO为基础的编程模型促成良好的编程习惯。那么Spring是如何简化Java开发的呢?,为了降低java开发的复杂性,Spring采用了以下四种关键策略:   1. 基于POJO的轻量级和最小侵入性编程;   (注:POJO(Plain Old Java Object)也叫“简单的Java对象”,是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象;既有无参构造函数,每个字段都有getter和setter的java类)   2. 通过依赖注入DI(Dependency Injection)和面向切面编程AOP(Aspect-Oriented Programming)实现松耦合;   3. 基于切面和惯例进行声明式编程;   4. 通过切面和模板减少样板式代码。   几乎Spring所做的任何事情都可以追溯到上述的一条或多条核心策略。 二、使用Spring框架的好处:   (1)轻量:Spring 是轻量的,基本的版本大约2MB。   (2)控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。   (3)面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。   (4)容器:Spring 包含并管理应用中对象的生命周期和配置。   (5)MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。   (6)事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。   (7)异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。 三、Spring容器   在基于Spring的应用中,应用对象生存于Spring容器中,容器负责创建对象、装配他们、配置他们以及管理他们的整个生命周期。   常用的Spring容器:Bean工厂(BeanFactory)应用上下文(ApplicationContext),下面列出三种常用的应用上下文:   1. ClassPathXmlApplicationContext——从类路径下的xml配置文件中加载应用上下文定义,把应用上下文定义文件当做类资源。   2. FileSystemXmlAapplicationContext——读取文件系统下的Xml配置文件并加载上下文定义。   3. XmlWebApplicationContext——读取Web应用下的Xml配置文件并加载上下文定义。 三、装配Bean(即创建应用对象之间的协作关系) 首先,要声明一个Bean,然后注入属性,必要的时候还需对Bean进行初始化和销毁 1、声明Bean

    <bean id = "duke" class = "com.springinaction.springido1.Juggler"> </bean>

    2、注入属性 (1)通过构造函数注入

    <bean id = "duke" class = "com.springinaction.springido1.Juggler"> <constructor-arg name="beanBags" value="15" /> <constructor-arg name="poem" ref="sonnet29" /> </bean>

    (2)通过set注入

    <bean id = "duke" class = "com.springinaction.springido1.Juggler"> <property name="song" value="Jingle Bells" /> <property name="instrument" ref="saxophone" /> </bean>

    3、装配集合 Spring提供了4种类型的集合配置元素,

    装配list类型的值,允许重复装配set类型的值,不允许重复装配map类型的值,名称和值可以是任何类型装配properties类型的值,名称和值必须都是String型

    4、初始化和销毁Bean (1)对每一个bean单独进行初始化和销毁

    <bean id = "duke" class = "com.springinaction.springido1.Juggler" init-method="turnOnLights" destory-method="turnOffLights" />

    (2)定义上下文所有bean的初始化和销毁

    <?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-3.0.xsd default-init-method="turnOnLights" default-destroy-method="turnOffLights" />

    四、自动装配和自动检测 上面已经讲了如何装配Bean,这个过程全程都是使用xml文件进行配置,但是随着应用的不断发展,我们不得不编写越来越复杂的xml配置,这时,我们就可以使用自动装配和自动检测来减少Xml的配置数量。 1、Spring提供4种自动装配策略 byName——把与bean属性名字相同的bean自动装配到bean的对应属性中,如果没有与属性相匹配的bean,则该属性不进行装配。 byType——把与bean的属性具有相同类型的bean自动装配到bean对应的属性中,如果没有跟属性的类型相匹配的bean,则该属性不被匹配 constructor——把与bean的构造器入参具有相同类型的bean自动装配到bean构造器对应的入参中。 autodetect——首先尝试使用constructor进行自动装配,如果失败,再尝试使用byType进行自动装配 举例:如果使用byName自动装配可见,关于Juggler的instrument属性就被自动注入了,

    <bean id = "duke" class = "com.springinaction.springido1.Juggler" autowire="byName"> <property name="song" value="Jingle Bells" /> </bean> <bean id = "instrument" class="com.springinaction.springido1.Saxophone">

    2、使用注解装配 (1)自动装配 需要配置元素 @autowired (2)自动检测 需要配置base-package=”包名”来代替 @Component/@Controller/@Repository/@Service

    转载请注明原文地址: https://ju.6miu.com/read-9292.html

    最新回复(0)