Spring
1.Spring框架简介
Spring 是轻量级的容器框架。
主要开发者:Rod Johnson ,他是轮子理论的推崇者。
轮子理论:不重复发明轮子。
IT: 直接使用写好的代码
Spring框架宗旨:不开发新的技术,可以让你原有的技术使用起来更方便。
SsM spring+spring mvc +mybatis SpringBoot SpringCloud
2.Spring框架核心功能
- IOC/DI 控制反转和依赖注入
- AOP 面向切面编程
- 声明式事务
3.Spring 框架的运行环境
解释:
1.Test: 单元测试功能
2.Core Container: 核心容器 (Spring启动的基本条件)
Beans: 负责创建类对象并管理对象。
Core: 核心类
Context: 获取外部资源以及管理注解。
SpEL: b表达式语言
3.AOP Aspects : AOP相关的依赖包
4.Data Access :Spring对数据访问层的封装
Jdbc: Spring对jdbc代码封装
ORM: Spring 对持久层框架的封装。如:hibernate框架
Transactions: 声明式事务
5. Web : spring对javaee web的支持
如:tomcate启动加载配置文件,需要引入spring-web.jar.
Springmvc框架,引入spring-webmvc.jar
4.Spring框架重要概念
1、spring是一个大容器
2、ApplicationContext 接口。将Spring管理所有的内容放入到ApplicationContext容器中。
3、Spring3 以后将spring功能拆成多个jar包。
以前的版本只有一个jar包。
5.IOC
- IOC 控制反转 inversion of control
- IOC原先由程序员主动通过new关键字创建对象事情,转交给Spring负责。
控制反转中控制:控制类的对象
控制反转中反转:转交给Spring负责 - 作用: 解耦合
程序员不需要管理对象。解除程序员和对象管理之间的耦合。
6.Spring框架环境搭建
6.1:创建一个java|web项目
6.2:引入spring相关的jar包
注意:需要引入日志记录jar包,以及日志配置文件
6.3:创建spring配置文件
src–>xml–>applicationContext.xml (名字和路径可以自定义)
注意:采用Schmea约束。
<?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">
</beans>
6.4:编写一个实体类
public class Student {
private int sno;
private String sname;
private int age;
}
6.5:配置文件中配置标签
注意:当加载配置文件时,马上创建所有的对象,并存储到ApplicationContext容器中。
<!–
spring创建对象 配置bean标签
class:指定需要创建对象的类的权限定名
id: 指定对象的标识(唯一)
–>
6.6:测试类。 加载配置文件获取ApplicationContext对象,获取想要的对象。
//1.加载配置文件,获取ApplicationContext容器对象
ApplicationContext ac=new ClassPathXmlApplicationContext(“applicationContext.xml”);
//2.获取对象 id标识
Student stu=ac.getBean(“stu”,Student.class);
System.out.println(stu);
6.7:注意总结
- 默认情况下,调用无参构造创建对象。
- 默认情况下,配置文件加载时,就马上创建所有的对象。
设置延迟创建,获取对象时才创建。设置属性
方式一:在标签中加上default-lazy-init="true"属性。(对所有的bean有效)
方式二:在标签中加上lazy-init="true"属性。(只对当前bean有效)
3.默认情况下,对象创建使用单例模式。(不管获取多少次,都是同一个)
设置scope属性:
singleton:单例模式。默认值(bean标签只会创建一次)
prototype:多例模式。每获取一次,创建一个对象。
7.创建对象的三种方式
7.1:调用构造方法创建
7.1.1.调用无参构造方法(默认)
<bean id="stu" class="pojo.Student"></bean>
7.1.2.调用有参构造方法
需要在<bean>标签中加<constructor-arg>子标签
1.提供有参构造方法
2.配置有参构造方法的子标签
注意:如果匹配多个构造方法,执行最后一个。
属性: index :下标 name:参数名称 type:类型
value: 给基本类型和String赋值
ref: 属性值引用另一个对象
<bean id="stu2" class="pojo.Student">
<!--
<constructor-arg index="0" value="1007"></constructor-arg>
<constructor-arg index="1" value="小黑"></constructor-arg>
<constructor-arg index="2" value="38"></constructor-arg>
-->
<!-- <constructor-arg name="sno" index="0" value="1007"></constructor-arg>
<constructor-arg name="sname" index="1" value="小黑"></constructor-arg>
<constructor-arg name="age" index="2" value="38"></constructor-arg> -->
<constructor-arg type="int" value="1007"></constructor-arg>
<constructor-arg type="java.lang.String" value="小黑"></constructor-arg>
<constructor-arg type="int" value="38"></constructor-arg>
</bean>
7.2:实例工厂创建对象
工厂设计模式:帮助创建类对象(频繁创建对象)
实例工厂: 先工厂对象,才能生产对象。
实现步骤:
1.编写一个工厂类,提供生产对象的方法
public class PersonFactory {
/**
* 创建人类对象的方法
*/
public Person createPerson() {
return new Person();
}
}
2.配置文件中配置工厂对象
<!--创建实例工厂对象-->
<bean id="factory" class="util.PersonFactory"></bean>
<!-- 创建人类的对象 -->
<bean id="p1" factory-bean="factory" factory-method="createPerson"></bean>
7.3:静态工厂创建对象
静态工厂: 不需要创建工厂对象,直接生产对象。
实现步骤:
1.编写一个工厂类,提供生产对象的方法
public class PersonFactory {
/**
* 创建人类对象的方法
*/
public static Person createPerson() {
return new Person();
}
}
2.配置文件
<!-- 创建人类的对象 -->
<bean id="p2" class= factory-method="createPerson"></bean>