首页 > 编程语言 > 详细

Spring框架学习总结一

时间:2021-03-29 17:35:04      阅读:25      评论:0      收藏:0      [点我收藏+]

Spring 框架的介绍

Spring框架是一个Java平台,为开发Java应用程序提供全面的基础架构支持。Spring处理基础结构,因此您可以专注于应用程序。Spring使您能够从“普通的Java对象”(POJO)构建应用程序,并将企业服务非侵入性地应用于POJO。此功能适用于Java SE编程模型以及全部和部分Java EE。Sping中文api文档

目的:解决企业应用开发的复制性。

功能:使用基本的JavaBean代替EJB(开发和部署多层结构的、分布式的、面向对象的Java应用系统的跨平台的构件体系结构),并提供了更多的企业应用功能。

Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架

IOC技术介绍:

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。最常见的方式是依赖注入(Dependency Injection,简称DI)。通过控制反转(Ioc)的技术达到松耦合的目的。

  • Ioc就是将对象的创建权交给Spring容器,在需要的时候直接得到对象。

  • Spring提供面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性开发。业务逻辑就是管理商品的入库与出库,系统逻辑就是对商品入库和出库的日志进行统一记录,以及事务管理。

  • Spring包含并管理应用对象的配置和生命周期,这个意义上是一种容器。

  • Spring将简单的组件配置,组合成为复制的应用,这个意义上是框架。

模块

Spring框架包含组织为约20个模块的功能。这些模块分为核心容器,数据访问/集成,Web,AOP(面向方面的编程),检测,消息传递和测试,如下图所示。

技术分享图片

需要的jar包的介绍

spring-core-4.1.6.RELEASE.jar

  • 核心模块提供了框架的基本组成部分,包含IOC和依赖注入功能。

spring-beans-4.1.6.RELEASE.jar

  • Bean模块提供BeanFactory,它是一个工厂模型的复杂实现。

spring-context-4.1.6.RELEASE.jar

  • 上下文模块建立在有核心和Bean模块提供的坚实的基础上,他是访问定义和配置的任何对象的媒介,AppliactionContext接口是上下文接口的重点。

spring-expression-4.1.6.RELEASE.jar

  • 模块提供了一种功能强大的表达式语言,用于在运行时查询和操作对象图。它是对JSP 2.1规范中指定的统一表达语言(统一EL)的扩展。该语言支持设置和获取属性值,属性分配,方法调用,访问数组,集合和索引器,逻辑和算术运算符,命名变量以及按名称从Spring的IoC容器中检索对象的内容。它还支持列表投影和选择以及常见的列表聚合。

需要引入的约束

在src目录下新建xml文件命名为官方推荐名字: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 definitions here -->
</beans>

Spring的运行原理

技术分享图片

Bean的作用域(单态模式singleton\原型模式prototype)

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">
    <beans>
        <!--下面等同于UserServiceImpl userServiceImpl = new UserServiceImpl(),把对象实例放入了Spring容器中-->
        <!--scope不写的话默认情况下是单态模式scope="singleton",声明scope="prototype",当前变成了原型模式-->
        <bean id="userServiceImpl" class="com.spring.service.impl.UserServiceImpl"scope="prototype" ></bean>
    </beans>
</beans>

Spring的五种作用域

当通过spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域。Spring支持如下5种作用域:

  • singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例
  • prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例
  • request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效
  • session:对于每次HTTP Session,使用session定义的Bean豆浆产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效
  • globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效

  其中比较常用的是singleton和prototype两种作用域。对于singleton作用域的Bean,每次请求该Bean都将获得相同的实例。容器负责跟踪Bean实例的状态,负责维护Bean实例的生命周期行为;如果一个Bean被设置成prototype作用域,程序每次请求该id的Bean,Spring都会新建一个Bean实例,然后返回给程序。在这种情况下,Spring容器仅仅使用new 关键字创建Bean实例,一旦创建成功,容器不在跟踪实例,也不会维护Bean实例的状态。

  如果不指定Bean的作用域,Spring默认使用singleton作用域。Java在创建Java实例时,需要进行内存申请;销毁实例时,需要完成垃圾回收,这些工作都会导致系统开销的增加。因此,prototype作用域Bean的创建、销毁代价比较大。而singleton作用域的Bean实例一旦创建成功,可以重复使用。因此,除非必要,否则尽量避免将Bean被设置成prototype作用域。

基于XML的注入(di)

所谓注入,可理解为对象的属性赋值

  1. set注入(简单数据类型和引用数据类型注入)
<beans>
        <bean id="user" class="com.spring.pojo.User">
            <!--给属性注入值:name映射pojo类中的属性名,value:指定要注入的值-->
            <property name="sid" value="1"></property>
            <property name="uname" value="张翰"></property>
            <property name="pwd" value="123"></property>
            <property name="spower" value="1"></property>
        </bean>
    </beans>

  1. 通过构造器注入
<beans>
        <bean id="user" class="com.spring.pojo.User">
            <!--通过构造器注入-->
           <constructor-arg name="sid" value="11"></constructor-arg>
           <constructor-arg name="uname" value="张三"></constructor-arg>
           <constructor-arg name="pwd" value="321"></constructor-arg>
           <constructor-arg name="spower" value="1"></constructor-arg>
            <!--注入引用数据-->
            <constructor-arg name="account" ref="account"></constructor-arg>
        </bean>
        <bean id="account" class="com.spring.pojo.Account">
            <constructor-arg name="aid" value="1"></constructor-arg>
            <constructor-arg name="money" value="1200"></constructor-arg>
        </bean>
    </beans>
  1. 接口注入(知道有这种注入,现在很少使用)

  2. 扩展注入(c命名和p命名空间注入)

    需要导入依赖

    xmlns:c="http://www.springframework.org/schema/c"
    xmlns:p="http://www.springframework.org/schema/p"
    

    c命名空间注入就是构造器注入的快捷方式

    <bean id="user2" class="com.aop.demo01.pojo.User" c:_0="peter" c:_1="23"></bean>
    

    p命名空间注入就是set注入的快捷方式

        <bean id="user" class="com.aop.demo01.pojo.User" p:age="12"></bean>
    

注意:pojo实体类中必须含有对应的构造方法

  1. 域属性自动注入(byName\byType;局部和全局配置)

    autowire="byName"default-autowire="byType"

<!--<bean id="user" class="com.spring.pojo.User" autowire="byType">  局部根据类型自动注入-->
<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
        https://www.springframework.org/schema/beans/spring-beans.xsd"
       default-autowire="byName"<!--全局配置配置自动注入-->
>

基于注解的DI注入

  1. 环境搭建:导入aop包(spring-aop-4.1.6.RELEASE.jar), 添加context约束头信息(组件扫描器)

  2. 常用注解:@Component,表示当前修饰的类交给Spring容器管理

    修饰一个类,将这个类交给Spring管理。与@Component相同功能的还有三个衍生注解,都是用来修饰类:

    @Repository:添加在Dao实现类上。

    @Service:添加在Service实现类上。

    @Controller:添加在Controller类上。

@Value:给属性的基本数据类型赋值,可以放在属性上,页可以放在属性的set方法上。

@Scope:指定类是单态模式还是原型模式。

  1. 给属性的应用数据类型注值

@Autowired : 设置对象类型的属性的值。但它是按照对象的类型来注入,跟注解的名字无关。

@Resource : 完成对象类型值的注入,按照名字注入。

Spring整合Mybatis

再增加四个包:

mybatis-spring-1.2.3.jar (mybatis与spring的整合包)

spring-jdbc-4.1.6.RELEASE.jar

依赖于:

spring-aop-4.1.6.RELEASE.jar

spring-tx-4.1.6.RELEASE.jar 事务

Spring框架学习总结一

原文:https://www.cnblogs.com/fufengxi/p/14592670.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!