今日内容
spring概述
两大核心功能
- IOC
- AOP(后面学习)
IOC
- bean标签
DI
- set注入方式
- 构造方法注入方式
1. spring的概述
1.1 框架
是一个半成品软件。提高开发效率。简化代码的编写。
1.2 spring概述
spring是轻量级的一站式框架。
1.3 体系结构
2,IOC
2.1 概述
控制反转。spring反向控制应用程序所需要的资源。
-
之前的做法: 在应用程序中创建资源对象。
-
使用spring的做法: 将类的对象交给spring管理,而spring会将这些对象存储在核心容器中
应用程序需要哪儿个资源,不需要创建了,只需要从核心容器中获取即可。
作用: 解除应用程序和资源间的耦合。
2.2 入门案例
-
引入jar包的坐标
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.9.RELEASE</version> </dependency>
-
定义资源所属类
public interface UserService { public void save(); } public class UserServiceImpl implements UserService { public void save() { System.out.println("user service running..."); } }
-
编写spring的配置文件
applicationContext.xml
注意:
- 配置文件的名称不是必须叫applicationContext.xml,建议这样命名
- 配合文件的路径必须在类路径下。resources下面
<?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>
-
编写应用程序
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(); } }
2.3 bean标签
作用: 将类的对象的创建交由spring完成
属性:
-
id属性 : bean(对象)的名称。可以通过该名称获取对象。
-
class属性: 配置类的全类名。spring会通过该类名创建对象。
-
scope属性: bean的作用范围
-
singleton(单个对象): 在我们创建核心容器对象时,会创建配置文件中bean标签配置的类的对象,并存储在核心容器中。
默认值,也是以后经常使用的取值。
-
prototype(多个对象): 创建容器时并不会创建bean对象,在获取bean对象的时候创建。
-
2.4 bean的生命周期
scope=“singleton”,bean是在创建核心容器的时候创建,核心容器关闭的时候销毁。
scope=“prototype”,bean是在获取bean对象额时候创建
-
init-method属性 : 在bean创建后进行初始化的操作
-
destory-method属性: 在bean销毁的时候需要进行销毁操作
2.5 使用工厂获取bean对象
-
静态工厂
public class UserServiceFactory { public static UserService getService(){ System.out.println("factory create object..."); return new UserServiceImpl(); } }
-
实例工厂
public class UserServiceFactory1 { public UserService getService(){ System.out.println("factory create object..."); return new UserServiceImpl(); } }
注意: 上面两种方式获取到的UserService实现类对象,spring也会将给bean对象存放在核心容器中。
3,DI
3.1 概述
依赖注入。spring将应用程序依赖的资源赋值应用程序。
3.2 set注入(重点掌握)
准备环境:
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
所谓的注入其实就是给成员变量赋值。
-
以前的做法
//1,创建dao类的对象 UserDao userDao = new UserDaoImpl(); //2,创建service类的对象 UserService userService = new UserServiceImpl(); //3,给userDao成员赋值 userService.setUserDao(userDao);
-
spring配置的做法
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/> <bean id="userService" class="com.itheima.service.impl.UserServiceImpl"> <!-- set注入 name属性: 属性名 ref属性 : 引用另一个对象 --> <property name="userDao" ref="userDao"></property> </bean>
property标签:
-
name属性: 属性名
-
ref属性 : 对象类型
-
value属性 : 普通类型(基本数据类型,基本数据类型的包装类型,String类型)
3.3 构造方法注入(了解)
环境准备:
public class UserServiceImpl implements UserService {
private UserDao userDao;
private String username;
public UserServiceImpl(UserDao userDao,String username) {
this.userDao = userDao;
this.username = username;
}
}
-
以前的做法:
//1,创建dao类的对象 UserDao userDao = new UserDaoImpl(); //2,创建service类的对象 UserService userService = new UserServiceImpl(userDao,"robin");
-
spring配置的做法:
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/> <bean id="userService" class="com.itheima.service.impl.UserServiceImpl"> <construtor-arg name="userDao" ref="userDao"></construtor-arg> <construtor-arg name="username" value="robin"></construtor-arg> </bean>
4,集合数据注入
4.1 list集合
4.2 properties双列集合
5,引入外部配置文件
-
引入properties配置文件
<!--2.加载配置文件--> <context:property-placeholder location="classpath:*.properties"/>
注意: classpath:起到的作用是标识。表示配置文件是在类路径下。
使用配置文件中的数据用 ${keyName}
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"> <property name="userName" value="${user}"/> <property name="password" value="${pwd}"/> </bean>
-
引入xml配置文件
<import resource="xml配置文件的名称"/>
6,BeanFactory体系结构
BeanFactory(接口)
|-- ApplicationContext(接口)
|-- ClasspathXmlApplicationContext : 从类路径加载配置文件
|-- FileSystemXmlApplicationContext : 从文件系统中加载配置文件
|-- AnnotationConfigApplicationContext : 加载配置类
|-- XmlBeanFactory
spring配置文件头信息,方便大家配合模板:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
</beans>
重点小结:
- IOC
- bean标签
- id属性
- class属性
- scope属性
- bean标签
- DI
- 注入的方式
- set注入
- property标签
- name属性: 属性名
- value属性|ref属性
- property标签
- 构造方法注入(了解)
- set注入
- 给集合注入数据
- list集合
- properties集合
- 注入的方式
- 引入外部的配置文件
- properties配置文件
- xml配置文件