Spring是分层的JavaSE/EE应用full-stack轻量级开源框架
IoC
-
IoC(Inversion Of Control)控制反转,Spring反向控制应用程序所需要使用的外部资源
-
Spring控制的资源全部放置在Spring容器中,该容器称为IoC容器
入门案例
模拟三层架构中表现层调用业务层功能
-
表现层:UserApp模拟UserServlet(使用main方法模拟)
-
业务层:UserService
-
IoC入门案例制作步骤
1.导入spring坐标(5.1.9.release)
2.编写业务层与表现层(模拟)接口与实现类
3.建立spring配置文件
4.配置所需资源(Service)为spring控制的资源
5.表现层(App)通过spring获取资源(Service实例)
-
IoC入门案例制作步骤-1
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.9.RELEASE</version> </dependency>
IoC入门案例制作步骤-2
public interface UserService {
//业务方法
void save();
}
)IoC入门案例制作步骤-3
public class UserServiceImpl implements UserService {
public void save() {
System.out.println("user service running...");
}
}
IoC入门案例制作步骤-4
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 1.创建spring控制的资源-->
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl"/>
</beans>
)IoC入门案例制作步骤-5
public class UserApp {
public static void main(String[] args) {
//2.加载配置文件
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//3.获取资源
UserService userService = (UserService) ctx.getBean("userService");
userService.save();
}
}
4)IoC配置(XML格式)
4.1)bean
-
名称:bean
-
类型:标签
-
归属:beans标签
-
作用:定义spring中的资源,受此标签定义的资源将受到spring控制
-
格式:
-
<beans> <bean /> </beans>
基本属性:
-
<bean id="beanId" name="beanName1,beanName2" class="ClassName"></bean>
id:bean的名称,通过id值获取bean
class:bean的类型
name:bean的名称,可以通过name值获取bean,用于多人配合时给bean起别名
-
bean属性scope
-
名称:scope
-
类型:属性
-
归属:bean标签
-
作用:定义bean的作用范围
-
格式:
-
<bean scope="singleton"></bean>
取值:
-
singleton:设定创建出的对象保存在spring容器中,是一个单例的对象
-
prototype:设定创建出的对象保存在spring容器中,是一个非单例的对象
-
request、session、application、 websocket :设定创建出的对象放置在web容器对应的位置
bean生命周期
-
-
名称:init-method,destroy-method
-
类型:属性
-
归属:bean标签
-
作用:定义bean对象在初始化或销毁时完成的工作
-
格式:
-
<bean init-method="init" destroy-method="destroy></bean>
-
取值:bean对应的类中对应的具体方法名
-
注意事项:
-
当scope=“singleton”时,spring容器中有且仅有一个对象,init方法在创建容器时仅执行一次
-
当scope=“prototype”时,spring容器要创建同一类型的多个对象,init方法在每个对象创建时均执行一次
-
当scope=“singleton”时,关闭容器会导致bean实例的销毁,调用destroy方法一次
-
当scope=“prototype”时,对象的销毁由垃圾回收机制gc()控制,destroy方法将不会被执行
-
bean对象创建方式(了解)
(1)factory-bean
-
名称:factory-bean
-
类型:属性
-
归属:bean标签
-
作用:定义bean对象创建方式,使用静态工厂的形式创建bean,兼容早期遗留系统的升级工作
-
格式:
<bean class="FactoryClassName" factory-method="factoryMethodName"></bean>
-
取值:工厂bean中用于获取对象的静态方法名
-
注意事项:
-
class属性必须配置成静态工厂的类名
-
-
(2)factory-bean,factory-method
-
名称:factory-bean,factory-method
-
类型:属性
-
归属:bean标签
-
作用:定义bean对象创建方式,使用实例工厂的形式创建bean,兼容早期遗留系统的升级工作
-
格式:
-
<bean factory-bean="factoryBeanId" factory-method="factoryMethodName"></bean>
-
取值:工厂bean中用于获取对象的实例方法名
-
注意事项:
-
使用实例工厂创建bean首先需要将实例工厂配置bean,交由spring进行管理
-
factory-bean是实例工厂的beanId
-
set注入(主流)
-
名称:property
-
类型:标签
-
归属:bean标签
-
作用:使用set方法的形式为bean提供资源
-
格式:
-
<bean> <property /> </bean>
基本属性:
-
<property name="propertyName" value="propertyValue" ref="beanId"/>
name:对应bean中的属性名,要求该属性必须提供可访问的set方法(严格规范为此名称是set方法对应名称)
value:设定非引用类型属性对应的值,不能与ref同时使用
ref:设定引用类型属性对应bean的id ,不能与value同时使用
-
注意:一个bean可以有多个property标签
-
)构造器注入(了解)
-
名称:constructor-arg
-
类型:标签
-
归属:bean标签
-
作用:使用构造方法的形式为bean提供资源,兼容早期遗留系统的升级工作
-
格式:
-
-
<bean> <constructor-arg /> </bean>
基本属性:
-
<constructor-arg name="argsName" value="argsValue />
集合类型数据注入
-
名称:array,list,set,map,props
-
类型:标签
-
归属:property标签 或 constructor-arg标签
-
作用:注入集合数据类型属性
-
格式:
<property> <list></list> </property>
(1)集合类型数据注入——list
-
<property name="al"> <list> <value>itheima</value> <value>66666</value> </list> </property>
(2)集合类型数据注入——props
-
<property name="properties"> <props> <prop key="name">itheima666</prop> <prop key="value">666666</prop> </props> </property>
)使用p命名空间简化配置(了解)
-
名称:p:propertyName,p:propertyName-ref
-
类型:属性
-
归属:bean标签
-
作用:为bean注入属性值
-
格式:
-
<bean p:propertyName="propertyValue" p:propertyName-ref="beanId"/>
properties文件
-
Spring提供了读取外部properties文件的机制,使用读取到的数据为bean的属性赋值
-
操作步骤
1.准备外部properties文件
2.开启context命名空间支持
-
xmlns:context="http://www.springframework.org/schema/context"
3.加载指定的properties文件
-
<context:property-placeholder location="classpath:filename.properties">
4.使用加载的数据
-
<property name="propertyName" value="${propertiesName}"/>
-
注意:如果需要加载所有的properties文件,可以使用
*.properties
表示加载所有的properties文件 -
注意:读取数据使用${propertiesName}格式进行,其中propertiesName指properties文件中的属性名
-
ApplicationContext
1.ApplicationContext是一个接口,提供了访问spring容器的API
2.ClassPathXmlApplicationContext是一个类,实现了上述功能
3.ApplicationContext的顶层接口是BeanFactory
4.BeanFactory定义了bean相关的最基本操作
5.ApplicationContext在BeanFactory基础上追加了若干新功能
对比BeanFactory
1.BeanFactory创建的bean采用延迟加载形式,使用才创建
2.ApplicationContext创建的bean默认采用立即加载形式
FileSystemXmlApplicationContext
可以加载文件系统中任意位置的配置文件,而ClassPathXmlApplicationContext只能加载类路径下的配置文件
-
第三方资源配置
-
阿里数据源方案Druid
-
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/spring_ioc"></property> <property name="username" value="root"></property> <property name="password" value="root"></property> </bean>
-
-