1,Spring5 框架
1,Spring5 框架概述
- Spring 是轻量级的开源的 JavaEE 框架
- Spring 可以解决企业应用开发的复杂性
- Spring 有两个核心部分:IOC 和 Aop
- IOC:控制反转,把创建对象过程交给 Spring 进行管理
- Aop:面向切面,不修改源代码进行功能增强
- Spring 特点
- 方便解耦,简化开发
- Aop 编程支持
- 方便程序测试
- 方便和其他框架进行整合
- 方便进行事务操作
- 降低 API 开发难度
2,测试通过spring创建一个类
-
导入spring需要的基础包
-
创建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"> <bean id="user" class="com.hanlin.User"></bean> </beans>
-
测试从xml配置文件中获取到配置的对象进行输出
@Test public void testAdd(){ //1,加载spring配置文件 ApplicationContext context = new ClassPathXmlApplicationContext("beandem1.xml"); //2,获取配置文件中创建的对象 User user = context.getBean("user", User.class); System.out.println(user); user.add(); }
#2,IOC容器
1,什么是IOC
- 控制反转:把对象的创建和对象之间的调用过程,交给spring容器进行管理
- 使用IOC的目的:降低代码的耦合度
###2,IOC容器底层原理
- 涉及到的技术:xml文件解析,工厂模式,反射技术
- IOC 思想基于 IOC 容器完成,IOC 容器底层就是对象工厂
###3,IOC容器接口(BeanFactory,ApplicationContext)
- BeanFactory:IOC 容器基本实现,是 Spring 内部的使用接口,不提供开发人员进行使用 加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象
- ApplicationContext:BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人 员进行使用
4,IOC三种注入方式
####1,第一种注入方式:使用 set 方法进行注入
//第一步,先创建一个需要注入到IOC容器中的对象
/**
* Bean 管理操作基于 xml 配置文件方式实现
* 1、基于 xml 方式创建对象
* (1)在 spring 配置文件中,使用 bean 标签,标签里面添加对应属性,就可以实现对象创建
* (2)在 bean 标签有很多属性,介绍常用的属性
* id 属性:唯一标识
* class 属性:类全路径(包类路径)
* (3)创建对象时候,默认也是执行无参数构造方法完成对象创建
* 2、基于 xml 方式注入属性
* 第一种注入方式:使用 set 方法进行注入
*/
public class Person {
private String id;
private String name;
public void setId(String id){
this.id=id;
}
public void setName(String name){
this.name=name;
}
public void testPerson(){
System.out.println(id+":"+name);
}
}
//第二步:在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="com.hanlin.java.User"></bean>
<bean id="person" class="com.hanlin.java.Person">
<property name="id" value="中国人"></property>
<property name="name" value="牛逼"></property>
</bean>
</beans>
//第三步:测试将注入到IOC容器的中对象和对象的属性获取打印
@Test
public void testPerson(){
//1,加载spring配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("beandem1.xml");
//2,获取配置文件中创建的对象
Person p1 = context.getBean("person", Person.class);
System.out.println(p1);
p1.testPerson();
}
####2,第二种注入方式:使用有参数构造进行注入
//第一步,先创建一个需要注入到IOC容器中的对象
/**
* 第二种注入方式:使用有参数构造进行注入
*/
public class Order {
private String id;
private String name;
public Order(String id, String name) {
this.id = id;
this.name = name;
}
public void testOrder(){
System.out.println(id+"::"+name);
}
}
//第二步:在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="com.hanlin.java.User"></bean>
<!--set方法注入-->
<bean id="person" class="com.hanlin.java.Person">
<property name="id" value="中国人"></property>
<property name="name" value="牛逼"></property>
</bean>
<!--有参构造方法注入-->
<bean id="order" class="com.hanlin.java.Order">
<constructor-arg name="id" value="11"></constructor-arg>
<constructor-arg name="name" value="222"></constructor-arg>
</bean>
</beans>
//第三步:测试将注入到IOC容器的中对象和对象的属性获取打印
@Test
public void testOrder(){
//1,加载spring配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("beandem1.xml");
//2,获取配置文件中创建的对象
Order order = context.getBean("order", Order.class);
System.out.println(order);
order.testOrder();
}
####3,p 名称空间注入(了解)
- 使用 p 名称空间注入,可以简化基于 xml 配置方式 第一步 添加 p 名称空间在配置文件中
###5,IOC 操作 Bean 管理
####1,普通 bean:在配置文件中定义 bean 类型就是返回类型
####2,工厂* bean:在配置文件定义 bean 类型可以和返回类型不一样
-
第一步 创建类,让这个类作为工厂 bean,实现接口 FactoryBean
-
第二步 实现接口里面的方法,在实现的方法中定义返回的 bean 类型
package com.hanlin.java; import org.springframework.beans.factory.FactoryBean; /** * 自定义工厂Bean * 工厂 bean:在配置文件定义 bean 类型可以和返回类型不一样 * 1,第一步 创建类,让这个类作为工厂 bean,实现接口 FactoryBean * 2,第二步 实现接口里面的方法,在实现的方法中定义返回的 bean 类型 */ public class MyFactoryBean implements FactoryBean { /** * 定义返回bean对象的类型 * @return * @throws Exception */