spring5学习笔记
- 1. Spring概述
- 2.入门案例
- 3. IOC
-
- 3.1 什么是IOC?
- 3.2 IOC的底层原理
- 3.3 IOC操作 Bean管理
-
- 3.3.1 什么是Bean管理
- 3.3.2 Bean管理操作有两种方式
- 3.3.3 基于XML创建对象
- 3.3.3 基于XML注入属性
- 3.3.4 基于有参构造注入属性
- 3.3.5 p 名称空间注入
- 3.3.6 XML注入其他类型属性
- 3.3.7 注入属性-外部 bean
- 3.3.8 注入属性-内部 bean
- 3.3.9 注入属性-级联赋值
- 3.3.10 IOC 操作 Bean 管理(xml 注入集合属性)
- 3.3.11 IOC 操作 Bean 管理(FactoryBean)
- 3.3.12 IOC 操作 Bean 管理(bean 作用域)
- 3.3.13 IOC 操作 Bean 管理(bean 生命周期)
- 3.3.14 IOC 操作 Bean 管理(xml 自动装配)
- 3.3.15 IOC 操作 Bean 管理 (外部属性文件)
- 3.3.16 IOC 操作 Bean 管理(基于注解方式)
- 4. AOP(概念)
1. Spring概述
Spring是轻量级的开源的JavaEE框架,
Spring可以解决企业应用开发的复杂性
Spring有两个核心的部分:IOC和AOP
- IOC: 控制反转,把创建对象过程交给Spring进行管理
- AOP:面向切面,不修改源代码进行功能增强
特点:
- 方便解耦,简化开发
- Aop编程支持
- 方便程序的测试
- 方便和其他框架进行整合
- 方便进行事务操作
- 降低API的开发难度
2.入门案例
https://repo.spring.io/ui/native/release/org/springframework/spring/
创建java工程,导入相关jar包
创建普通类,在这个类创建普通方法
package com.atguigu.spring5;
public class User {
public void add(){
System.out.println("add...");
}
}
创建 Spring 配置文件,在配置文件配置创建的对象
<?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.atguigu.spring5.User"></bean>
</beans>
进行测试代码编写
public class TestSpring5 {
@Test
public void testAdd(){
// 1. 加载spring配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
// 2. 获取配置创建的对象
User user = context.getBean("user", User.class);
System.out.println(user);
user.add();
}
}
3. IOC
3.1 什么是IOC?
控制反转,把对象的创建和对象之间的调用过程,交给Spring进行管理
使用IOC的目的:为了降低耦合度
做入门案例就是IOC实现
3.2 IOC的底层原理
通过 xml解析、工程模式、反射 做到的
工厂模式:
IOC解耦过程:
IOC(接口):
IOC思想基于IOC容器完成,IOC容器底层就是对象工厂;
Spring提供了IOC容器的两种实现方式:(两个接口)
-
BeanFactory:IOC容器最基本实现,是Spring内部的使用接口,不提供开发人员进行使用
-
ApplicationContext:BeanFactory接口的子接口,提供了更多更强大的功能,一般由开发人员使用
BeanFactory加载配置文件的时候不会创建对象,在获取对象(使用)采取创建对象
ApplicationContext加载配置文件的时候就会创建对象
ApplicationContext接口有实现类:
3.3 IOC操作 Bean管理
3.3.1 什么是Bean管理
Bean管理指的是两个操作:
1.Spring创建对象
2.Spring注入属性
3.3.2 Bean管理操作有两种方式
- 基于XML配置文件方式实现
- 基于注解方式实现
3.3.3 基于XML创建对象
在spring配置文件中,使用bean标签,标签里添加对应属性,就可以实现对象创建
在bean标签有很对属性,介绍常用的属性
id
属性:唯一标识
class
属性:类全路径
name
属性:和id作用相同,name可以加特殊字符
创建对象的时候,默认执行无参构造方法
3.3.3 基于XML注入属性
DI:依赖注入,就是注入属性
第一种注入的方式:set方式
/**
* 演示使用 set 方法进行注入属性
*/
public class Book {
//创建属性
private String bname;
private String bauthor;
//创建属性对应的 set 方法
public void setBname(String bname) {
this.bname = bname;
}
public void setBauthor(String bauthor) {
this.bauthor = bauthor;
}
}
在spring配置文件中配置对象创建,配置属性注入
<!--2 set 方法注入属性-->
<bean id="book" class="com.atguigu.spring5.Book">
<!--使用 property 完成属性注入
name:类里面属性名称
value:向属性注入的值
-->
<property name="bname" value="易筋经"></property>
<property name="bauthor" value="达摩老祖"></property>
</bean>
3.3.4 基于有参构造注入属性
第二种注入的方式:有参构造的方式
创建类,定义属性,创建属性对应有参数构造方法
/**
* 使用有参数构造注入
*/
public class Orders {
//属性
private String oname;
private String address;
//有参数构造
public Orders(String oname,String address) {
this.oname = oname;
this.address = address;
}
}
)在 spring 配置文件中进行配置
<!--3 有参数构造注入属性-->
<bean id="orders" class="com.atguigu.spring5.Orders">
<constructor-arg name="oname" value="电脑"></constructor-arg>
<constructor-arg name="address" value="China"></constructor-arg>
</bean>
3.3.5 p 名称空间注入
使用 p 名称空间注入,可以简化基于 xml 配置方式
第一步 添加 p 名称空间在配置文件中
第二步 进行属性注入,在 bean 标签里面进行操作
<!--2 set 方法注入属性-->
<bean id="book" class="com.atguigu.spring5.Book" p:bname="九阳神功"
p:bauthor="无名氏"></bean>
3.3.6 XML注入其他类型属性
1、字面量
(1)null 值
<!--null 值-->
<property name="address">
<null/>
</property>
(2)属性值包含特殊符号
<!--属性值包含特殊符号
1 把<>进行转义 < >
2 把带特殊符号内容写到 CDATA
-->
<property name="address">
<value><![CDATA[<<南京>>]]></value>
</property>
3.3.7 注入属性-外部 bean
(1)创建两个类 service 类和 dao 类
(2)在 service 调用 dao 里面的方法
(3)在 spring 配置文件中进行配置
public class UserService {
//创建 UserDao 类型属性,生成 set 方法
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void add() {
System.out.println("service add...............");
userDao.update();
}
}
配置文件
<!--1 service 和 dao 对象创建-->
<bean id="userService" class="com.atguigu.spring5.service.UserService">
<!--注入 userDao 对象
name 属性:类里面属性名称
ref 属性:创建 userDao 对象 bean 标签 id 值
-->
<property name="userDao" ref="userDaoImpl"></property>
</bean>
<bean id="userDaoImpl" class="com.atguigu.spring5.dao.UserDaoImpl"></bean>
3.3.8 注入属性-内部 bean
(1)一对多关系:部门和员工
一个部门有多个员工,一个员工属于一个部门
部门是一,员工是多
(2)在实体类之间表示一对多关系,员工表示所属部门,使用对象类型属性进行表示
//部门类
public class Dept {
private String dname;
public void setDname(String dname) {
this.dname = dname;
}
}
//员工类
public class Emp {
private String ename;
private String gender;
//员工属于某一个部门,使用对象形式表示
private Dept dept;
public void setDept(Dept dept) {
this.dept = dept;
}
public void setEname(String ename) {
this.ename = ename;
}
public void setGender(String gender) {
this.gender = gender;
}
}
(3)在 spring 配置文件中进行配置
<!--内部 bean-->
<bean id="emp" class="com.atguigu.spring5.bean.Emp">
<!--设置两个普通属性-->
<property name="ename" value