一.Spring框架概述
1,Spring是一个 开源的 轻量级的 JavaEE框架。
轻量级:体积小,jar独立使用不需要依赖其他jar包,
开源:免费,可以提供源代码
框架:解决开发的复杂性,简化企业开发。
2,spring的两个核心部分:IOC,Aop
IOC:控制反转,把创建对象的过程交给spring进行管理。
Aop:面向切面,在不修改源代码的情况下,进行功能的添加或增强。
3,spring框架的特点:
1),方便解耦,简化开发:对象与对象之间的关系依赖spring。
2),Aop编程支持:不改变源代码,增强功能
3),方便测试;
4),方便集成各种优秀框架。
5),方便进行食物管理,降低API的使用难度
6),java源码经典学习范例。
4,入门案例:
1),下载Spring5:
spring网址 : spring.io
直接下载地址: https://repo.spring.io/artifa...
还要下载一个日志jar包,spring5依赖于这个jar包commons-login这个jar
下载链接:commons-logging-1.1.1.jar下载及Maven、Gradle引入代码,pom文件及包内class -时代Java (nowjava.com)
我个人下载5.2.6
2),下载完成以后,参加一个普通的java项目,将jar导入项目
3),使用spring
(1),创建普通类,在类中创建普通方法
public class User { public void add(){ System.out.println("add......."); } }
(2),创建spring配置文件,在配置文件中配置文件配置创建的对象
a,Spring配置文件使用xml文件配置
<?xml version="1.0" encoding="UTF-8" ?> <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"> <!--配置User对象创建--> <bean id = "user" class = "com.yuge.User"></bean> </beans>
b,创建测试类Test
public class Tset { @Test public void testAdd(){ //1.读入上下文配置文件 ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml"); //2.获取配置对象 User user = context.getBean("user", User.class); System.out.println(user); user.add(); } }
c,测试结果,成功创建对象,并调用方法
二,IOC容器
1.IOC底层原理
1),什么是IOC:
控制反转,将对象的创建和对象之间的交互作用,都交给spring进行管理。
2),使用IOC的目的
为了降低耦合
3)IOC入门案例
2,IOC底层原理
1),xml解析,工厂模式,反射
2)图解IOC底层原理
传统方式:
工厂模式:
IOC模式:
3.IOC接口(BeanFactory)
IOC基于容器完成,IOC容器的底层就是对象工厂
1),BeanFactory接口:
IOC容器的最基本实现,是spring内部的使用接口,不提倡给开发人员使用。
2),ApplicationContext接口:
是BeanFactory的子接口,提供比BeanFactory更强大的功能,一般为开发人员使用
3),两接口的区别
因为我们在使用Spring框架时,一般都是配合网页使用,使用BeanFactory创建对象时,不会创建对象,而加载配置文件的时候,是在服务器启动的时候,使用tomcat,都是将系统加载文件等费事非空间的事放在tomcat启动时完成,以提供更好的用户体验,所以采用ApplicationContext接口
4),applicationContext的实现类
3.IOC操作Bean管理(基于xml)
1),什么是bean管理:
A,bean管理包括两个步骤:Spring创建对象和Spring属性注入
2),bean管理的实现方式:
a,基于xml配置文件的实现方式
1.基于XML方式创建对象
id属性:给class类路径取个别名
class属性:创建对象类的全路径
XML方式创建默认对象默认使用空参构造器
2.基于XML方式的属性注入(1),DI:依赖注入,就是注入属性。
DI与IOC的区别:DI是IOC的一种实现。
方式一:使用set方式注入
(a),创建类的对象,创建set方法
(b),在配置文件中配置对象创建,配置属性注入
方式二:使用有参构造方法注入
方式三:p名称空间注入:
第一步:
第二步:
3.注入空值和特殊字符
一,注入空值
二,注入特殊符号
4,注入bean
1),注入外部bean
引入外部bean,用service调用Dao层,就是引入外部bean的过程。
2)注入内部bean 和 级联赋值
级联赋值方式1:不需要dept的get方法。
级联赋值方式2:第二种方法需要创建dept的get方法。
5.注入集合属性
0),创建Stu类,User类
package com.yuge; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; public class Stu { //数组类型 private String course[]; //List类型 private List<String> name; //Map类型 private Map<String,String> map; //Set类型 private Set<String> set; //List类型中存入多个对象 private List<User> userList; public void setUserList(List<User> userList) { this.userList = userList; } public void setCourse(String[] course) { this.course = course; } public void setName(List<String> name)