spring框架的基本概述

1、Spring 是一个轻量级的开源的JavaEE框架。

2、Spring可以解决企业应用开发的复杂性。

3、Spring有两个核心部分:IOC 和 AOP
(1)IOC:控制反转,把创建对象过程交割Spring进行管理。
(2)AOP:面向切面,不修改源代码进行功能增强。

4、Spring特点
(1)方便解耦,简化开发
(2)AOP编程的支持
(3)方便测试
(4)方便集成各种优秀框架
(5)降低进行事务的操作
(6)降低Api的使用难度

入门案例

1、下载Spring5

spring 5 和 spring 6_spring 5 和 spring 6


注:GA是稳定版本

SNAPSHOT是快照版本

https://repo.spring.io/ui/native/release/org/springframework/spring 此路径列出了spring的所有版本

spring 5 和 spring 6_java-ee_02


2、打开idea工具,创建java工程3、将下载的核心依赖复制到项目中,创建一个lib文件夹,放入。

再将包导入到项目中

spring 5 和 spring 6_java_03


4.创建一个类,创建一个方法5、创建一个spring配置文件,在配置文件配置创建的对象

(1)spring配置文件时xml文件格式的

spring 5 和 spring 6_java-ee_04


6、编写测试代码

spring 5 和 spring 6_spring_05

Ioc容器

(1)IOC底层原理
(2)IOC接口(BeanFactory)
(3)IOC操作bean管理(基于xml)
(4)IOC操作bean管理(基于注解)

IOC(概念和原理)
1、什么是IOC
(1)控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理。
(2)使用IOC目的,为了耦合度降低

2、IOC底层原理

(1)xml的解析,工厂的设计模式,反射

spring 5 和 spring 6_spring 5 和 spring 6_06


IOC接口(BeanFactory)

1、IOC思想基于IOC容器完成,,,,,IOC容器底层就是对象工厂。
2、Spring提供IOC容器实现两种方式:(两个接口)
(1)BeanFactory:IOC容器基本实现,是Spring内部使用。
加载配置文件的时候不会去创建里面的对象,只有使用的时候才会创建里面的对象。

(2)ApplicationContext :BeanFactory接口的子接口,提供了更多更强大的功能,一般由开发人员使用。
加载配置文件时候就会把在配置文件中的对象进行创建。

3、ApplicationContext 的实现类

spring 5 和 spring 6_spring_07


ClassPathXmlxxx是类路径下的文件路径

FileSystemXmlxxx是磁盘路径下的文件路径


IOC操作bean管理
1、Bean管理
(1)Spring创建对象
(2)spring注入属性


Bean管理操作有两种方式
一、基于xml配置文件方式实现

基于xml方式创建对象
//1、在spring配置文件中,使用bean标签,标签里面添加对应属性,就可以实现对象创建
//2、bean标签中有很多属性
	id属性:给这个对象起一个标识,并不是对象的名字
	class属性:类全路径(包路径+类的名字)
	name属性:和id的作用一样的,不同的是name属性值中可以加特殊符号,id属性中不可以加特殊符号。
//3、创建对象时候,默认也是执行无参构造方法,完成对象的创建。
<bean id="user" class="com.ck.spring5.User"></bean>
基于xml方式注入属性

DI:依赖注入,就是注入属性(DI就是IOC的具体实现)

第一种注入方式:set方法注入
<!--  set方法注入属性,确定类中有set方法  -->
    <bean id="book" class="com.ck.spring5.Book">
		<!--    name:类中的属性名  value:属性的值    -->
        <property name="bname" value="abc"/>
    </bean>
第二种注入方式:使用有参数的构造进行注入
<!-- 构造方法的注入  要有有参构造方法-->
    <bean id="orders" class="com.ck.spring5.Orders">
		<!--    name:参数名称    value:参数值    -->
        <constructor-arg name="oname" value="abc"></constructor-arg>
    </bean>
p名称空间注入

(1)使用p名称空间注入,可以简化基于xml配置方式
第一步:首先添加xmlns:p约束

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

第二步进行属性注入(底层还是set注入,需要有set方法)

<bean id="book" class="com.ck.spring5.Book" p:bname="abc"></bean>

IOC操作bean管理(xml注入其他类型属性)
1、字面量(设置属性的固定值)
(1)null值

<!--  set方法注入属性  -->
    <bean id="book" class="com.ck.spring5.Book">
<!--    name:类中的属性名  value:属性的值    -->
        <property name="bname" value="abc"/>
        <property name="bauthor" >
        <!-- null值  -->
            <null></null>
        </property>
    </bean>

(2)属性值包含特殊符号

<!-- 属性值中有特殊符号 
		1、将<<>>进行转义 
		2把带特殊符号的内容写到CDATA中   -->
        <property name="bauthor" >
            <value><![CDATA[<<南京>>]]></value>
        </property>

2、注入属性-外部bean
(1)创建两个类service类和dao类
(2)在service调用dao里面的方法
(2)在spring配置文件进行配置

<bean id="userService" class="com.ck.spring5.service.UserService">
     <property name="userDao" ref="userDaoImpl"/>
 </bean>
 <bean id="userDaoImpl" class="com.ck.spring5.dao.UserDaoImpl"></bean>

3、注入属性-内部bean和级联赋值

(1)一对多关系:部门和员工

一个部门有多个员工,一个员工属于一个部门

部门是1,员工是多

(2)在实体类之间一对多关系,员工表示所属的部门,使用对象类型属性表示

spring 5 和 spring 6_xml_08


spring 5 和 spring 6_spring 5 和 spring 6_09


spring 5 和 spring 6_spring_10


测试:

spring 5 和 spring 6_java_11


4、注入属性-级联赋值

第一种写法

spring 5 和 spring 6_java-ee_12


第二种写法:

spring 5 和 spring 6_spring 5 和 spring 6_13


这样写需要在员工类中添加get方法,需要获取到这个对象

spring 5 和 spring 6_xml_14


IOC操作Bean管理(xml注入集合属性)
1、注入数组类型属性

2、注入List集合类型属性

3、注入Map集合类型属性

(1)创建类,定义数组、list、map、set类型属性,并生成他们的set属性。

spring 5 和 spring 6_spring 5 和 spring 6_15


(2)在spring配置文件进行配置

spring 5 和 spring 6_spring 5 和 spring 6_16


spring 5 和 spring 6_spring 5 和 spring 6_17

spring 5 和 spring 6_java_18

spring 5 和 spring 6_xml_19


4、在集合里面设置对象类型值

spring 5 和 spring 6_xml_20

5、把集合注入部分提取出来

(1)在spring配置文件中引入命名空间util

spring 5 和 spring 6_java-ee_21


有对象和字符串的例子:

spring 5 和 spring 6_spring 5 和 spring 6_22


实际中的写法:

spring 5 和 spring 6_java_23

(2)基于注解方式实现