1.spring简介
1.1spring是什么
Spring是分层的Java SE/EE应用full=stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核。
提供了展现出Spring MVC和持久层Spring JDBCTemplate以及业务层事务管理等众多企业级应用技术,还能整合开源世界众多著名的第三方框架和类库逐渐成为使用最多的JavaEES企业应用开源框架。
2.spring的配置文件
2.1bean标签的基本配置
用于配置对象交于spring来创建
默认情况下他调用的是类中的无参构造函数
基本属性
id:Bean在spring容器中的唯一标识
class:Bean的全限定名称(类名)
2.1Bean标签的范围配置
scope:指对象的作用范围,取值如下
取值范围 | 说明 |
singleton | 默认值,单例的 |
prototype | 多例的 |
request | WEB项目中,Spring创建一个Bean对象,将对象存入Request |
session | WEB项目中,Spring创建一个Bean对象,将对象存入session |
global session | WEB项目中,应用在Protlet环境,如何没有Protlet环境global session相当于session |
2.1.1当scope取值为singleton时
Bean的实例化个数:1
Bean的实例化时机:当spring的核心文件被加载时,实例化配置文件Bean实例
Bean的生命周期:
- 对象创建:当应用加载,创建容器时,对象就被创建
- 对象运行:只要容器在,对象一只活着
- 对象销毁:当应用卸载,销毁容器时,对象就被卸载
2.1.2当scope取值为prototype时
Bean的实例化个数:多个
Bean的实例化时机:当调用个体与getBean()方法时实例化Bean
Bean的生命周期:
- 对象创建:当使用对象时创建新的对象实例
- 对象运行:只要对象在使用中就一直活着
- 对象销毁:当对象想时间不用时,被java的垃圾回收器回收了
2.1.3Bean的生命周期配置
init-method:指定类中的初始化方法的名称
destroy-method:指定类中的销毁方法的名称
Bean实例化的三种方法
- 无参构造实例化
- 工厂静态方法实例化
- 工厂实例方法实例化
实例展示
<!--无参构造实例化 -->
<!-- <bean id="UserDao" class="com.blb.Impl.UserImpl" ></bean>-->
<!--工厂静态方法实例化 -->
<!-- <bean id="UserDao" class="com.blb.factoy.UserFactory" factory-method="getUserFactory"></bean>-->
<!--工厂实例方法实例化 -->
<!-- <bean id="User" class="com.blb.factoy.UserFa"></bean>-->
Bean的依赖注入概念
依赖注入:它是Spring框架核心IOC的具体实现
在编写程序时,通过反转控制,把创建的对象交给了spring,但代码中不可能出现没有依赖的情况,IOC解耦只是降低他们的依赖关系,但不会消除。例如:业务层仍会调持久层的方法
那这种业务层和持久层的业务关系,在使用spring之后,就让spring来维护。简单来说就是等spring框架把持久层的对象传入业务层,而不用我们自己去获取
Bean的注入方式
- set方法注入
先用set方法引入对象
public void setUserDaolmpl(UserDaoImpl userDaoImpl) {
this.userDaoImpl = userDaoImpl;
}
配置
<bean id="UserDaoImpl" class="com.blb.Impl.UserDaoImpl"></bean>
<bean id="UserSeriver" class="com.blb.seriver.UserSeriver">
<property name="userDaolmpl" ref="UserDaoImpl"></property>
p命名空间注入:本质也是set注入但比set注入更简单主要配置如下
<bean id="UserDaoImpl" class="com.blb.Impl.UserDaoImpl"></bean>
<bean id="UserSeriver" class="com.blb.seriver.UserSeriver" p:userDaolmpl-ref="UserDaoImpl"></bean>
- bean方法注入
分别写含参和不含参的构造函数
public UserSeriver(UserDaoImpl userDaoImpl) {
this.userDaoImpl = userDaoImpl;
}
public UserSeriver() {
}
注入代码
<!-- bean方法注入-->
<bean id="UserDaoImpl" class="com.blb.Impl.UserDaoImpl"></bean>
<bean id="UserSeriver" class="com.blb.seriver.UserSeriver">
<constructor-arg name="userDaoImpl" ref="UserDaoImpl"></constructor-arg>
</bean>
Bean的依赖注入数据类型
- 普通数据类型
生成set方法
注入代码
<!-- 参数注入-->
<bean id="UserDaoImpl" class="com.blb.Impl.UserDaoImpl">
<property name="age" value="19"></property>
<property name="name" value="张三"></property>
</bean>
<bean id="UserSeriver" class="com.blb.seriver.UserSeriver">
<constructor-arg name="userDaoImpl" ref="UserDaoImpl"></constructor-arg>
</bean>
- 引用数据类型
- 集合数据类型
Spring中使用Map、Set、List、数组、属性集合的注入方法配置文件可以参考:具体参考引入其他配置文件(分模块开发)
实际开发中,spring的配置内容非常多,这就导致spring配置很繁杂且体积很大,所以,可以将部分配置裁解到其他配置文件中,而在spring主配置文件中通过import标签进行加载
<import resource=".xml"></import>
3.spring相关的API
applicationContext:接口类型,代表应用上下文,可以通过其实例获取Spring中的bean对象
applicationContext的实现类
ClassPathXmlApplicationContext:它是从类的根路径下加载配置文件(推荐使用这种)
FileSystemXmlApplicationContext:它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置
AnnotationConfigXmlApplicationContext:当使用注解配置容器对象时,需要使用此类来创建spring容器。他用来读取注解
getBean()获取的参数
1.通过id获取
2.通过字节码文件 .class