关于近日
之前听说博客园整改,于是便许久未更新博客园,最近偶然回来看了一下,发现整改接近完成,于是我决定将最近的学习笔记上传。
本次学习笔记全程参考B站尚硅谷idea版Spring5教程
一、Spring5概述
1、Spring是轻量级 的开源 的JavaEE框架
2、Spring可以解决企业应用开发的复杂性
3、Spring有两个核心部分:IOC和 Aop
(1)IOC:控制反转,把创建对象过程交给Spring管理(Bean管理、属性注入、各种管理)
(2)Aop:面向切面,不修改源代码进行功能增强
Spring的特点
(1)方便解耦,简化开发
(2)Aop编程支持
(3)方便程序测试
(4)方便和其他框架进行整合
(5)方便进行事务操作
(6)降低API开发难度
基本思路及实现
第一步:创建一个User类
public class User {
public void add(){
System.out.println("add");
}
}
第二步:创建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">
<bean id="user" class="day1.spring5.User"></bean>
</beans>
其中,id为自己为该类取的名字,class为类所在的路径
第三步:测试代码
@Test
public void testAdd(){
// 1 加载 Spring 配置文件
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("day1/spring5/bean1.xml");
// 2 获取配置创建的对象
User user = context.getBean("user", User.class);
//此处的参数应该和xml文件中的id相同
// 3 调用获取配置创建的对象的方法
user.add();
// 4 输出创建的对象
System.out.println(user);
}
IOC容器
(1)IOC底层原理
(2)IOC接口(BeanFactory)
(3)IOC操作Bean管理(基于xml)
(4)IOC操作Bean管理(基于注解)
1、什么是IOC
(1)控制反转,把对象创建和对象之间的调用过程,交给Spring管理
(2)使用IOC目的:为了耦合度降低
(3)做入门案例就是IOC实现
2、IOC底层原理
(1)xml解析,工厂模式,反射
3、来个例子
为了避免耦合度高的问题,避免一个类因为相关类的路径变化而无法使用。从而提出工厂模式:
class UserService{
execute(){
UserDao dao = Factory.getDao();
dao.add();
}
}
---
class UserDao{
add(){
......
}
}
---
//工厂类
class Factory{
public static UserDao getDao(){
return new UserDao();
}
}
通过引入工厂类,解耦,当UserDao变化时,UserService不会受到影响。
IOC解耦过程解析
- 第一步:xml配置文件,配置创建对象的类
<bean id="dao" class="day1.spring5.UserDao"></bean>
- 第二步 基于Service类和Dao类, 创建工厂类
class UserFactory{
public static UserDao getDao(){
String classValue = class属性值; //1 xml解析
Class clazz = Class.forName(classValue); //2 通过反射创建对象
return (UserDao)clazz.newInstance();
}
}
IOC接口
1、IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
2、Spring提供IOC容器两种实现方式:(两个接口)
(1)BeanFactory:IOC容器的基本实现,是Spring内部的使用接口,不提供开发人员进行使用。
*加载配置文件时,不会创建对象,只有在获取(使用)对象才去创建对象
(2)ApplicationContext:BeanFactory接口的子接口,提供更多强大的功能,一般由开发人员使用
*加载配置文件时候就会把配置文件中所有对象进行创建(下列代码第一步,就是加载配置文件)
@Test
public void testAdd(){
// 1 加载 Spring 配置文件
// ********ApplicationContext可以替换为BeanFactory********
ApplicationContext context =
new ClassPathXmlApplicationContext("com/qy/spring5/bean1.xml");
// 2 获取配置创建的对象
User user = context.getBean("user", User.class);
// 3 调用获取配置创建的对象的方法
user.add();
// 4 输出创建的对象
System.out.println(user);
}
IOC操作管理(xml方式)
(1)使用bean标签,向里面添加对应属性
<bean id="user" class="day1.spring5.User"></bean>
- id:唯一标识
- class:类的路径
(2)创建对象时默认执行无参数的构造方法。
注入属性依赖
- 第一种注入:set方法注入
Book类
public class Book {
private String bname;
private String bauthor;
public void setBname(String bname) {
this.bname = bname;
}
public void setBauthor(String bauthor) {
this.bauthor = bauthor;
}
public String getBname() {
return bname;
}
public String getBauthor() {
return bauthor;
}
}
xml配置文件
<bean id="book" class="com.day1.spring5.Book">
<property name="bname" value="易经"></property>
<property name="bauthor" value="达摩老祖"></property>
</bean>
测试类
@Test
public void testBook(){
// 1 加载Spring配置文件
ApplicationContext context =
new ClassPathXmlApplicationContext("com/day1/spring5/bean1.xml");
// 2 获取配置创建的对象
Book book = context.getBean("book",Book.class);
// 3 输出配置创建的对象的属性
System.out.println("书名:"+book.getBname()+"作者:"+book.getBauthor());
}
/***************/
输出:书名:易经作者:达摩老祖