1、 Spring是一个轻量级的开源的JavaEE框架
2、 Spring可以解决企业应用开发的复杂性
3、 Spring有两个核心部分:IoC和AoP
IoC:反转控制,把创建对象过程交给Spring进行管理
AoP:面向切面,不修改源代码进行功能增强
4、Spring特点
(1)方便解耦,简化开发
(2)AoP编程支持
(3)方便程序的测试
(4)方便集成各种优秀的框架
(5)方便进行事务的操作
(6)降低API的使用难度
二、入门案例
1、下载Spring5
2、打开eclipse工具,创建普通Java工程
3、导入Spring5相关jar包
4、创建普通类,在这个类创建普通方法
public class User {
publi void add(){
• System.out.println("add.........");
}
}
5、创建配置文件,在配置文件配置创建的对象
(1)Spring配置文件使用xml格式
6、进行测试代码编写
二、IoC(概念和原理)
1、什么是IoC
(1)控制反转,把对象的创建和对象之间的调用过程,交给Spring进行管理
(2)使用IOC目的:为了降低耦合度
(3)入门案例就是IOC实现
2、IOC底层原理
(1)xml解析、工厂模式、反射
IOC过程:
第一步:xml配置文件,配置创建的对象
<bean id="dao" class="com.atguigu.UserDao">
bean>
第二步 有service类和dao类,创建工厂类
Class UserFactory{
public static UserDao getDao(){
//xml解析,class属性值为com.atguigu.UserDao
String classValue = class属性值;
//通过反射创建对象
Class clazz = Class.forName(classValue);
// newInstance();方法创建对象
return (UserDao)clazz.newInstance();
}
}
三、IOC(接口)
1、IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
2、Spring提供IOC 容器实现两种方式:(两个接口)
• BeanFactory: IOC容器基本实现,是Spring内部的使用接口,不提供开发人员使用
特点:加载配置文件的时候不会创建对象,在获取(使用)对象才会创建对象
• ApplicationContext:BeanFactory接口的子接口,提供更多强大的功能,一般由开发人员进行使用
特点:加载配置文件的时候就会把在配置文件中的对象创建
ApplicationContext接口有两个主要的实现类
• FileSystemXmlApplicationContext
特点:电脑系统的位置,比如在电脑的C盘中的某个位置
• ClassPathXmlApplicationContext
特点:比如在src下面
四、IOC操作Bean管理
1、什么是Bean管理,Bean管理指的是两个操作
• Spring创建对象
• Spring注入属性
2、Bean管理操作有两种方式
(1)基于xml配置文件方式
(2)基于注解方式实现
(3)创建对象时候,默认也是执行无参数构造方法
IOC操作Bean管理(基于xml方式)
1、基于xml方式创建对象
• 在spring配置文件中,使用bean标签,标签里面添加对应属性,就可以实现对象创造
• 在bean标签里面有很多属性,介绍常用的属性
id属性:唯一标识
class属性:类全路径(包和类的路径,见上图)
name属性:和id属性作用一样,但是id中不可以加特殊 符号,而name中可以加特殊符号
2、基于xml方式注入属性
(1)DI:依赖注入,就是注入属性,有如下几种方法:
第一种注入方式:使用set方法进行注入
1)创建类,定义属性和对应的set方法
/**
* 演示使用set方法进行注入属性
*/
public class Book {
//创建属性
private String bNameString;
//创建属性对应的set方法
public void setbNameString(String bNameString) {
this.bNameString = bNameString;
}
}
2) 在Spring配置文件中配置对象创建,配置属性注入
进行测试:
第二种注入方式:使用有参数构造方法进行注入
1)创建一个类,创建类的带参数构造函数
2)在xml里面进行配置:
<bean id="books" class="com.test1.ioc.Book1">
<constructor-arg name="a" value="abc">constructor-arg>
<constructor-arg name="b" value="123">constructor-arg>
bean>
第三种注入方式:P名称空间注入(了解)
1)使用p名称空间注入,可以简化基于xml配置方式
2)进行属性注入,在bean标签里面进行操作
3、IOC操作Bean管理(xml注入其他类型属性)
1)字面量
(1)null值
(2)属性值包含特殊符号
2)注入属性-外部bean
(1)创建两个类service类和dao类
(2)在service调用dao里面的方法
(3)在spring配置文件中进行配置
-------------------------------------------------------------------图片分割线---------------------------------------------------------------------------
3)、注入属性-内部bean和级联赋值
(1)一对多关系:部门和员工,一个部门有多个员工,一个员工属于一个部门
(2)在实体类之间表示一对多关系,员工表示所属部门,使用对象类型属性进行表示
//部门类
public class Department {
private String dName;
public void setdName(String dName) {
this.dName = dName;
}
public String toString() {
return dName;
}
}
//员工类
public class Employee {
private String eName;
private String gender;
//员工属于某一个部门,使用对象形式表示
private Department dept;
public void setDept(Department dept) {
this.dept = dept;
}
public void seteName(String eName) {
this.eName = eName;
}
public void setGender(String gender) {
this.gender = gender;
}
}
(3)在spring配置文件中进行配置
4、注入属性-级联赋值
(1)第一种写法:
在3的基础上只改动spring配置文件
(2)第二种写法:
基于第一种写法中的Employee类和Department类,在Employee类中增加了dept对象的get方法
5、IOC操作Bean管理(xml注入集合属性)
1、 注入数组类型属性
2、 注入List集合类型属性
3、 注入Map集合类型属性
(1)创建类,定义数组、List、Map、Set类型属性,并且生成对应的set方法,Beans1.xml
public class Gather {
//1、数组类型属性
private String[] course;
//2、List集合类型属性
private List<String> list;
//3、Map集合类型属性
private Map<String, String> maps;
//4、Set集合类型属性
private Set<String> set;
public void setSet(Set<String> set) {
this.set = set;
}
public void setList(List<String> list) {
this.list = list;
}
public void setMaps(Map<String, String> maps) {
this.maps = maps;
}
public void setCourse(String[] course) {
this.course = course;
}
}
(2)在spring配置文件进行配置
<bean id="gather1" class="com.collection.type.Gather">
<property name="course">
<array>
<value>Java课程value>
<value>MySQL课程value>
<value>计算机组成原理value>
array>
property>
<property name="list">
<list>
<value>PHPvalue>
<value>JavaScriptvalue>
<value>HTMLvalue>
list>
property>
<property name="maps">
<map>
<entry key="张三" value="小三">entry>
<entry key="李四" value="小四">entry>
<entry key="王五" value="小五">entry>
map>
property>
<property name="set">
<set>
<value>SQLvalue>
<value