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
注:GA是稳定版本
SNAPSHOT是快照版本
https://repo.spring.io/ui/native/release/org/springframework/spring 此路径列出了spring的所有版本
2、打开idea工具,创建java工程
3、将下载的核心依赖复制到项目中,创建一个lib文件夹,放入。
再将包导入到项目中
4.创建一个类,创建一个方法
5、创建一个spring配置文件,在配置文件配置创建的对象
(1)spring配置文件时xml文件格式的
6、编写测试代码
Ioc容器
(1)IOC底层原理
(2)IOC接口(BeanFactory)
(3)IOC操作bean管理(基于xml)
(4)IOC操作bean管理(基于注解)
IOC(概念和原理)
1、什么是IOC
(1)控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理。
(2)使用IOC目的,为了耦合度降低
2、IOC底层原理
(1)xml的解析,工厂的设计模式,反射
IOC接口(BeanFactory)
1、IOC思想基于IOC容器完成,,,,,IOC容器底层就是对象工厂。
2、Spring提供IOC容器实现两种方式:(两个接口)
(1)BeanFactory:IOC容器基本实现,是Spring内部使用。
加载配置文件的时候不会去创建里面的对象,只有使用的时候才会创建里面的对象。
(2)ApplicationContext :BeanFactory接口的子接口,提供了更多更强大的功能,一般由开发人员使用。
加载配置文件时候就会把在配置文件中的对象进行创建。
3、ApplicationContext 的实现类
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)在实体类之间一对多关系,员工表示所属的部门,使用对象类型属性表示
测试:
4、注入属性-级联赋值
第一种写法
第二种写法:
这样写需要在员工类中添加get方法,需要获取到这个对象
IOC操作Bean管理(xml注入集合属性)
1、注入数组类型属性
2、注入List集合类型属性
3、注入Map集合类型属性
(1)创建类,定义数组、list、map、set类型属性,并生成他们的set属性。
(2)在spring配置文件进行配置
4、在集合里面设置对象类型值
5、把集合注入部分提取出来
(1)在spring配置文件中引入命名空间util
有对象和字符串的例子:
实际中的写法:
(2)基于注解方式实现