Spring知识概括

Spring概述

Spring概述:

  • Spring 是轻量级的开源的 JavaEE 框架
  • Spring 可以解决企业应用开发的复杂性
  • Spring 有两个核心部分:IOC 和 Aop
    ①IOC:控制反转,把创建对象过程交给 Spring 进行管理
    ②Aop:面向切面,不修改源代码进行功能增强
  • Spring 特点:
    ①方便解耦,简化开发
    ②Aop 编程支持
    ③方便程序测试
    ④方便和其他框架进行整合
    ⑤方便进行事务操作
    ⑥降低 API 开发难度

IOC 容器

IOC简述:

  • 控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理
  • 使用 IOC 目的:为了耦合度降低
  • IOC 底层原理:
    ①xml 解析
    ②工厂模式
    ③反射
  • 图解 IOC 底层原理:
    在这里插入图片描述

BeanFactory 接口:

  • IOC 思想基于 IOC 容器完成,IOC 容器底层就是对象工厂

  • Spring 提供 IOC 容器实现两种方式:(两个接口)
    BeanFactory:IOC 容器基本实现,是 Spring 内部的使用接口,不提供开发人员进行使用,加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象。
    ApplicationContext:BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人员进行使用,加载配置文件时候就会把在配置文件对象进行创建。
    BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身;ApplicationContext 面向使用 Spring 框架的开发者,几乎所有的应用场合都直接使用 ApplicationContext 而非底层的 BeanFactory

  • ApplicationContext 接口有实现类:
    在这里插入图片描述

IOC 操作 Bean 管理:

  • Bean 管理指的是两个操作
    Spring 创建对象
    Spirng 注入属性

  • Bean 管理操作有两种方式
    基于 xml 配置文件方式实现
    基于注解方式实现

基于 xml 方式:

  • 基于 xml 方式创建对象
    ①在 spring 配置文件中,使用 bean 标签,标签里面添加对应属性,就可以实现对象创建
    ②在 bean 标签有很多属性,介绍常用的属性:
    <1>id 属性:唯一标识
    <2>class 属性:类全路径(包类路径)
    ③创建对象时候,默认也是执行无参数构造方法完成对象创建
  • 基于 xml 方式注入属性,DI就是依赖注入,也就是注入属性。
    使用 set 方法进行注入
    <1>创建类,定义属性和对应的 set 方法
    使用有参数构造进行注入
    <1>创建类,定义属性,创建属性对应有参数构造方法
    <2>在 spring 配置文件中进行配置
    p 名称空间注入(了解):使用 p 名称空间注入,可以简化基于 xml 配置方式
    <1>添加 p 名称空间在配置文件中
    <2>进行属性注入,在 bean 标签里面进行操作
<!-- 第1种: 通过set 方法进行赋值,属性必须有对应的set+属性名,第一个字母大写的方法,才可以赋值 -->
<bean id="teacher1" class="com.hex.first.Teacher">
    <property name="teacherName" value="hex"></property>
    <property name="teacherAge" value="20"></property>
</bean>
<!--
    如果是常规的数据类型,采用property name value进行赋值
    如果是对象类型,采用property name ref 进行赋值
 -->
<bean id="course1" class="com.hex.first.Course">
    <property name="courseName" value="Java"></property>
    <property name="courseHour" value="120"></property>
    <property name="teacher" ref="teacher1"></property>
</bean>


<!--第2种: 采用构造函数,进行赋值 -->
<!--
    如果构造参数的顺序,和构造函数中的参数顺序是一样的,则name(参数名称),index(参数顺序号),type(参数数据类型)均可以省略
    如果不一样,则需要用name,index的其中一个来标识,如果参数的type不同,则也可以用type来区分
 -->
<bean id="teacher2" class="com.hex.first.Teacher">
    <constructor-arg name="teacherName" value="hex" index="0" type="String"></constructor-arg>
    <constructor-arg name="teacherAge" value="22" index="1" type="int"></constructor-arg>
</bean>
<!--
    如果是常规的数据类型,采用constructor-arg name value进行赋值
    如果是对象类型,采用constructor-arg name ref 进行赋值
 -->
<bean id="course2" class="com.hex.first.Course">
    <constructor-arg name="courseName" value=".Net C#" index="0" type="String"></constructor-arg>
    <constructor-arg name="courseHour" value="110" index="1" type="int"></constructor-arg>
    <constructor-arg name="teacher"  ref="teacher2" index="2" type="com.hex.first.Teacher"></constructor-arg>
</bean>

<!-- 第3种:通过P标签实现 ,需要引入命名空间-->
<!--
    如果就常规数据类型,采用p:属性名="value"的方式进行赋值
    如果是对象数据类型,采用p:属性名-ref=""的方式赋值
 -->
<bean id="teacher3" class="com.hex.first.Teacher" p:teacherName="zs" p:teacherAge="21">
</bean>
<bean id="course3" class="com.hex.first.Course" p:courseName="C++" p:courseHour="100" p:teacher-ref="teacher3">
</bean>

xml 注入其他类型属性:

  • 字面量:
    null 值
    空串
    属性值包含特殊符号
    <1>如果遇到特殊字符则需要进行转义
    <2>进行CDATA封装
注入空字符串值:
<property name="emptyValue">
	<value></value>
</property>

注入null值:
<property name="nullValue">  
	<null/>
</property>

</bean>

CDATA封装:
<![CDATA[<hex>]]>

转义:
&lt;	>	大于
&gt;	<	小于
&amp;	&	和号
&apos;	.	省略号
&quot;	"	引号
  • 注入属性-外部 bean
    ①创建两个类 service 类和 dao 类
    ②在 service 调用 dao 里面的方法
    ③在 spring 配置文件中进行配置
<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-->
<!--1 service 和 dao的对象创建-->
<bean id="userService" class="com.Keafmd.spring5.service.UserService">
    <!--注入userDao对象
        name属性:类里面的属性名称
        ref属性:创建UserDao对象bean标签id值
    -->
    <property name="userDao" ref="userDaoImpl"></property>
</bean>

<bean id="userDaoImpl" class="com.Keafmd.spring5.dao.UserDaoImpl"></bean>
</beans>
  • 注入属性-内部 bean
    简介:
    <1>内部bean可以在 <property/>或 <constructor-arg/> 元素内使用<bean/> 元素
    <2>内部bbean不管是否指定id或者name,该bean都有一个唯一的匿名标识符,且不能被指定别名。
    <3>内部bean通常是匿名的,也就是内部bean对其它外部的bean不可见。
    <4>内部bean的Scope一般是prototype。
    ②关系梳理:
    <1>一对多关系:部门和员工
    <2>一个部门有多个员工,一个员工属于一个部门
    <3>部门是一,员工是多
    <4>在实体类之间表示一对多关系,员工表示所属部门,使用对象类型属性进行表示
    ③步骤:
    <1>创建实体类
    <2>在 spring 配置文件中进行配置
<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-->
<bean id="emp" class="com.Keafmd.spring5.bean.Emp">
    <!--先设置两个普通的属性-->
    <property name="ename" value="小明"></property>
    <property name="gender" value=""></property>

    <!--对象类型的属性-->
    <property name="dept">
        <bean id="dept" class="com.Keafmd.spring5.bean.Dept">
            <property name="dname" 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值