Spring5学习
Spring5学习
1、Spring的概念:
1.1Spring框架的概述:
1、Spring 是轻量级的开源的JavaEE框架
2、Spring 可以解决企业应用开发的复杂性
3、Spring 有两个核心部分:
3.1 IOC:控制反转,把创建对象的过程交给Spring进行管理
3.2 AOP:面向切面,不修改源代码进行功能增强
4、Spring特点:
4.1:方便解耦,简化开发
4.2:Aop编程支持
4.3:方便程序测试
4.4:方便和其他框架进行整合
4.5:方便进行事务操作
4.6:降低API开发
5、基于Spring5.x的学习
5.1: Spring下载地址:https://repo.spring.io/ui/native/release/org/springframework/spring/
6、创建普通类,在这个类中创建普通方法
public class User {
void add(){
System.out.println("add ...");
}
}
7、创建Spring配置文件,在配置文件中配置对创建的对象
7.1 Spring配置文件使用xml格式:
<?xml version="1.0" encoding="UTF-8"?>
<!--配置User对象的创建-->
<bean id="user" class="com.tank.spring5.User"/>
7.2 通过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.tank.spring5.User"/>
</beans>
7.3 进行测试代码的编写:
public class TestAdd {
@Test
public void testAdds() {
//1、加载Spring配置文件
ApplicationContext contexts = new ClassPathXmlApplicationContext("bean1.xml");
//2、获取配置创建的对象
User user = contexts.getBean("user", User.class);
System.out.println(user);
user.add();
}
}
2、IOC容器
1、什么是IOC
1.1 控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理
1.2 使用IOC的目的:为了耦合度降低
1.3 做入门案例就是IOC实现
2、IOC底层原理
2.1 xml解析、工厂模式、反射
3、画图了解IOC底层原理
IOC过程
4、IOC(BeanFactory 接口)
4.1 IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
4.2 Spring提供IOC容器实现两种方式:(两个接口)
4.2.1 BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提供开发人员直接使用
*加载配置文件的时候并不会创建对象,而是在获取对象(调用)才去创建对象
4.2.2 ApplicationContext:BeanFactory接口的子类,提供更多更强大的功能,一般由开发人员使用
*加载配置文件时候就会把在配置文件对象进行创建
5 、ApplicationContext接口对应有的实现类
6 、IOC操作Bean管理(概念)
Bean管理指的是两个操作:1、Spring创建对象 2、Spring注入属性
Bean管理操作的实现方式:1、基于XML配置文件实现 2、基于注解方式实现
6.1 、IOC操作Bean的管理(基于XML方式)
<!--配置User对象的创建-->
<bean id="user" class="com.tank.spring5.User"/>
1、在Spring的配置文件中,使用bean标签,bean标签里边添加对应的属性,就能完成对象的创建
2、在bean标签中有很多的属性,常用的属性方式有:*1 id属性:唯一标识 *2 class属性:类包的全路径
3、在Spring创建对象的时候默认调用的也是无参构造方法完成对象的创建
6.2 、基于XML的方式注入属性
1、DI:依赖注入,就是注入属性
*1、第一种创建方式,基于set方法进行注入、创建类、完成属性的定义和set方法的书写
/**
* @program: spring5_demo1
* @description: 测试属性的set方式注入
* @packagename: com.tank.spring5.demo
* @author: showcase
* @date: 2022-03-11 11:53
**/
public class Book {
// 创建属性
private String bookId;
private String bookNmae;
// 属性的set方法
public void setBookId(String bookId) {
this.bookId = bookId;
}
public void setBookNmae(String bookNmae) {
this.bookNmae = bookNmae;
}
}
也可在Spring配置文件中配置对象的创建、配置属性的注入
<!--配置User对象的创建-->
<bean id="book" class="com.tank.spring5.demo.Book">
<!--使用property完成对象的创建-->
<property name="bookId" value="001"></property>
<property name="bookNmae" value="云边有个小卖部"></property>
</bean>
*2、第二种注入方式:使用有参构造进行注入
(1) 创建类、定义属性、创建属性对应有参数构造方法
/**
* @program: spring5_demo1
* @description: 测试有参构造注入的方式
* @packagename: com.tank.spring5
* @author: showcase
* @date: 2022-03-11 13:43
**/
public class Orders {
// 属性
private String orderId;
private String orderName;
// 有参构造
public Orders(String orderId, String orderName) {
this.orderId = orderId;
this.orderName = orderName;
}
public void orderDemo(){
System.out.println(orderId + "< >" + orderName);
}
}
(2) 在Spring配置文件中进行配置
<!--配置orders对象的创建-->
<bean id="order" class="com.tank.spring5.Orders">
<!--使用property完成对象的创建-->
<constructor-arg name="orderId" value="001电脑"></constructor-arg>
<constructor-arg name="orderName" value="China"></constructor-arg>
</bean>
(3) demo测试
@Test
public void testOrders() {
//1、加载Spring配置文件
ApplicationContext contexts = new ClassPathXmlApplicationContext("bean1.xml");
//2、获取配置创建的对象
Orders orders = contexts.getBean("order", Orders.class);
orders.orderDemo();
}
(4) 执行结果为:001电脑< >China
6.2、IOC操作Bean的管理(XML注入其他类型属性)
1、字面量
(1) null值
<!--null值-->
<constructor-arg name="address">
<null/>
</constructor-arg>
(2) 属性值包含特殊符号
<!--属性值包含特殊符号 1、把<>进行转义 <> 2、把特殊符号内容写到CDATA-->
<!--null值-->
<constructor-arg name="address">
<value><![CDATA[<<北京>]]></value>
</constructor-arg>
2、注入属性- 外部 bean