Spring

一、Spring的概述什么是SpringSpring是一个开源框架,Spring是于2003年兴起的一个轻量级的java开发框架,简单来说,Spring是一个分层的java SE/EE一站式轻量级开源框架。一站式框架:有EE开发的每一层解决方案web层:SpringMVCService层:Spring的Bean管理,Spring声明式事务Dao层:Spring的jdbc模板,Spri...
摘要由CSDN通过智能技术生成

一、Spring的概述

  1. 什么是Spring
    Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的java开发框架,简单来说,Spring是一个分层的java SE/EE一站式轻量级开源框架。
    一站式框架:有EE开发的每一层解决方案
    web层:SpringMVC
    Service层:Spring的Bean管理,Spring声明式事务
    Dao层:Spring的jdbc模板,Spring的ORM模板
  2. Spring的版本
    Spring3.X和Spring4.X

二、Spring的IOC

  1. Spring的入门(IOC)
    什么是IOC
    IOC:Inversion of Control(控制反转),将对象的创建权反转给Spring
    在这里插入图片描述
    Spring的开发包
    在这里插入图片描述
    解压后是如下目录
    在这里插入图片描述
    docs: Spring的开发规范和API
    libs: Spring的开发的jar和源码
    schema: Spring的配置文件的约束
  2. 创建web项目,引入jar包
    在这里插入图片描述
  3. 对于IOC的理解,我认为是在java中免去了实例化对象(new 类名)的步骤,把这一步转交给了一个xml配置文件(就是交给Spring),具体步骤如下。
  4. 创建一个接口UserDAO,并且创建类UserDAOImpl实现该接口。
    在这里插入图片描述

在这里插入图片描述

  1. 在src文件夹里面创建一个applicationContext.xml文件。这个文件就是要配置类对象。在Spring的解压路径下spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html导入下列代码。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       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">
</beans>

在这个xml文件中的中加入以下代码,注意这个userDAO的id,以及class属性中选中的是UserDAOImpl类。

<bean id="userDAO" class="com.zjw.spring.spring01.impl.UserDAOImpl"></bean>
  1. 编写测试类,注意测试类中的getBean函数的参数userDAO,对应的是xml中的id,所以创建的是UserDAOImpl的对象。

在这里插入图片描述

  1. 现在是有类的实例化对象了,但是对象的属性能不能也写在配置文件中?
    这就需要引入DI的概念,DI,依赖注入,前提是必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。
    现在在UserDAOImpl类中加入一个属性name,创建name属性的setName。

在这里插入图片描述在配置文件xml中还要加入属性,在原来的标签中加入标签,该标签是在对象中加入值为“郑经纬”的name属性。这样在测试类中创建UserDAOImpl的对象时,对象就会带有该name属性,执行结果如下。

<!--spring的入门配置-->
    <bean id="userDAO" class="com.zjw.spring.spring01.impl.UserDAOImpl">
        <property name="name" value="郑经纬"></property>
    </bean>

在这里插入图片描述

  1. Bean标签中有id和name的配置
    id:使用了约束中的唯一约束,里面不能出现特殊字符的。
    name:并非使用约束中的唯一约束。(理论上可以出现重复的,但是实际开发不能出现的)里面可以出现特殊字符。
  2. Bean的生命周期的配置
    init-method:Bean被初始化的时候执行的方法
    destroy-method:Bean被销毁的时候执行的方法
    在这里插入图片描述
<!--Spring的Bean生命周期的配置,其中的scope是作用范围,作用范围默认是单例模式-->
    <bean id="customerDAO" class="com.zjw.spring.spring01.impl.CustomerDAOImpl" scope="singleton" init-method="setup" destroy-method="destory"></bean>

在这里插入图片描述
在这里插入图片描述

  1. Bean的作用范围的配置
    scope:Bean的作用范围
  • singleton:默认的,Spring会采用单例模式创建这个对象,在单例模式下,创建的对象都是同一个,无论是创建几个对象,其地址都是相同的。创建多个对象只会触发一次init-method函数。
  • prototype:多例模式,创建的多个对象其地址都不一样,而且每创建一次对象,都会触发init-method函数。
  • request:应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。
  • session:应用在web项目中,Spring创建这个类以后,将这个类存入到session范围内。
  • globalsession :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于session。
  1. Spring的属性注入
    构造函数的方式的属性注入
    创建Car类,在Car类中有两个name和price属性,并且有构造函数
    在这里插入图片描述
    xml文件的配置,并不是使用set方法创建属性时的标签,而是使用标签,用法都差不多,只是标签不一样,set方法属性赋值使用,构造方法属性赋值使用。
<!--Spring的属性注入方式-->
    <!--构造方法方式-->
    <bean id="car" class="com.zjw.spring.spring01.domain.Car">
        <constructor-arg name="name" value="陆地巡洋舰"></constructor-arg>
        <constructor-arg name="price" value="800000"></constructor-arg>
    </bean>

set函数的方式的属性注入
普通属性注入:

<!--set方法的方式-->
    <bean id="car02" class="com.zjw.spring.spring01.domain.Car02">
        <property name="name" value="普拉多"/>
        <property name="price" value="700000"/>
    </bean>

对象类型属性的注入,注意ref属性:

<!--set方法注入对象类型的属性-->
    <bean id="employee" class="com.zjw.spring.spring01.domain.Employee">
        <!--value:设置普通类型的值, ref设置其他的类的id或name-->
        <property name="name" value="憨憨"/>
        <property name="car02" ref="car02"/>
    </bean>

P名称空间的属性注入(Spring2.5以后)
通过引入p名称空间完成属性的注入,在原来xml文件中加入这一句:
在这里插入图片描述

普通属性 p:属性名=“值”

<bean id="car02" class="com.zjw.spring.spring01.domain.Car02" p:name="帕拉梅拉" p:price="3000000"></bean>

对象属性 p:属性名-ref=“值”

<bean id="employee" class="com.zjw.spring.spring01.domain.Employee" p:name="信球" p:car02-ref="car02"></bean>

SqEL的属性注入(Spring3.0以后)
SpEL:Spring Expression Language,Spring的表达式语言。在中括号中可以添加字符串,表达式,对象,函数等
用法:#{SqEL}

<!--SpEL的注入方式-->
    <bean id="carInfo" class="com.zjw.spring.spring01.domain.CarInfo"></bean>

    <bean id="car02" class="com.zjw.spring.spring01.domain.Car02">
        <property name="name" value="#{carInfo.getName()}"/>
        <property name="price" value="#{carInfo.calculatorPrice()}"/>
    </bean>

    <bean id="employee" class="com.zjw.spring.spring01.domain.Employee">
        <property name="name" value="#{'一男'}"/>
        <property name="car02" value="#{car02}"/>
        <!--引用对象不加单引号-->
    </bean>

集合类型的属性注入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值