一、什么是Spring框架
-
概述
Spring是分层的Java SE/EE应用一站式的轻量级开源框架,以IOC和AOP为内核,提供了展现层Spring MVC、持久层Spring JDBC及业务层事务管理等一站式的企业级应用技术,此外Spring还整合了开源世界里众多著名的第三方框架和类库,成为使用最多的轻量级Java EE企业应用开源框架。
-
解决分层的javaee应用
-
解决java经典三层架构问题
- dao层
- service层
- web层
-
具体解决什么问题
- Spring框架提供IOC容器,去管理三个层次的对象及依赖关系,实现真正的解耦。
-
-
轻量级开源框架
-
以IOC和AOP为核心
-
IOC:控制反转容器
- 控制反转
- 将创建对象的权力从调用者移除,交付给一个第三方组件去处理
- 控制反转
-
AOP
-
面向切面编程
- java的oop编程(面向对象编程:继承)称为纵向编程,横向编程
-
-
-
一站式的Web解决
- SpringMVC:解决Web应用问题
- SpringJDBC:解决持久化处理
- 事务管理
-
便于与第三方的优秀框架整合
- hibernate
- mybatis
-
二、Spring框架的组件框架
-
Core Container:IOC容器
- 加载beans.jar
- 加载core.jar
- 加载context.jar
- 加载Spel.jar
-
支持aop编程
- spring-aop-5.1.9.RELEASE.jar
- spring-aspects-5.1.9.RELEASE.jar
-
支持spring mvc应用
- spring-web-5.1.9.RELEASE.jar
- spring-webmvc-5.1.9.RELEASE.jar
-
支持数据库访问
- spring-jdbc-5.1.9.RELEASE.jar
- spring-orm-5.1.9.RELEASE.jar
-
支持事务管理
- spring-tx-5.1.9.RELEASE.jar
三、什么是IOC
- 控制反转
- 对象的管理本身是调用者处理,将控制权力交付给第三方容器,此容器就是IOC容器
四、编写第一个IOC应用程序
1、需求
- 就是IOC容器的使用
2、加载ioc容器的lib文件
- 注意要导入log库文件
3、编写一个bean类
- 编写一个Car.java类
package com.gec.bean;
/*
* 定义一类:配置bean
* */
public class Car {
private String name;
private String color;
private Double price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
@Override
public String toString() {
return "Car{" +
"name='" + name + '\'' +
", color='" + color + '\'' +
", price=" + price +
'}';
}
}
4、在src新建beans.xml文件
- xml文件就是定义ioc容器配置那些bean对象
<?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">
<!--car的bean对象-->
<!--
什么是bean对象?
受ioc容器所管理的对象
-->
<bean id="car" class="com.gec.bean.Car">
<!--注入属性值-->
<property name="name">
<value>宝马</value>
</property>
<property name="color">
<value>红色</value>
</property>
<property name="price">
<value>2000000.00</value>
</property>
</bean>
</beans>
5、获取IOC容器对象
-
ApplicationContext类对象描述IOC容器
-
如何创建IOC容器对象
-
根据bean.xml文件,创建IOC容器
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
-
-
获取bean对象
//根据bean id,从IOC容器获取bean对象, Car carObj= (Car) ctx.getBean("car"); System.out.println(carObj);
五、DI注入
1、简介
- 针对bean对象的属性进行数据值注入
2、注入方式
- 通过构造器赋值
- 通过set方法赋值
- 通过工厂方法赋值
3、通过构造器赋值
-
如何使用
- constructor-arg标签实现构造器赋值
-
举例
<bean id="car01Id" class="com.gec.bean.Car"> <!--针对构造器第一个参数赋值--> <constructor-arg name="name" index="0" type="java.lang.String"> <value>QQ跑车</value> </constructor-arg> <!--针对构造器第二个参数赋值--> <constructor-arg name="color" index="1" type="java.lang.String"> <value>绿色</value> </constructor-arg> <!--针对构造器第三个参数赋值--> <constructor-arg name="price" index="2" type="java.lang.Double"> <value>200000.00</value> </constructor-arg> </bean>
4、通过set注入
-
条件
- 要有缺省构造器
- 属性必须有对应的set方法
-
举例
<!--set方法注入数据--> <bean id="car02Id" class="com.gec.bean.Car"> <property name="name"> <value>小鹏汽车</value> </property> <property name="color"> <value>红色</value> </property> <property name="price"> <value>2000000.00</value> </property> </bean>
5、通过工厂方法注入
-
简介
- 工厂肯定就是产生对象的
-
非静态工厂方法
-
定义一个工厂类,定义行为方法创建Car对象
package com.gec.factory;import com.gec.bean.Car;/** 定义一个工厂类* */public class CarFactory { /* * 创建Car对象 * */ public Car createCar() { Car c=new Car(); c.setName("特斯拉"); c.setColor("红色"); c.setPrice(300000.00); return c; }}
-
在beans.xml文件,定义一个工厂bean
- factory-bean :要配置工厂bean id
- factory-method:调用此bean对象,此对象值就是工厂的方法的返回值决定的
<!--配置工厂类的bean对象--> <bean id="carFactory" class="com.gec.factory.CarFactory" /> <bean id="car3Id" factory-bean="carFactory" factory-method="createCar"/>
-
-
静态工厂方法
-
定义一个工厂类的静态方法,此静态方法创建Car对象
package com.gec.factory;import com.gec.bean.Car;/** 定义一个工厂类* */public class CarFactory { /* 定义静态方法 */ public static Car createCarStatic() { Car c=new Car(); c.setName("特斯拉Model three"); c.setColor("红色"); c.setPrice(400000.00); return c; }}
-
在beans.xml文件,配置bean对象
<bean id="car4Id" class="com.gec.factory.CarFactory" factory-method="createCarStatic" />
-