【温故而知新】Spring容器
1、 容器是spring框架的核心,使用IOC管理所有组件
2、 Spring容器的分类
2.1 Bean工厂,简单,提供基础DI:Beanfactory
2.2 应用上下文:ApplicationContext
BeanFactory与ApplicationContext的区别?
BeanFacotry是spring中比较原始的Factory。如XMLBeanFactory就是一种典型的BeanFactory。原始的BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。
ApplicationContext接口,它由BeanFactory接口派生而来,因而提供BeanFactory所有的功能。ApplicationContext以一种更向面向框架的方式工作以及对上下文进行分层和实现继承,ApplicationContext包还提供了以下的功能:
• MessageSource, 提供国际化的消息访问
• 资源访问,如URL和文件
• 事件传播
• 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层
简单区别:
-
BeanFactory在启动的时候不会去实例化Bean,中有从容器中拿Bean的时候才会去实例化;
-
ApplicationContext在启动的时候就把所有的Bean全部实例化了。它还可以为Bean配置lazy-init=true来让Bean延迟实例化;
3、Spring容器ApplicationContext应用上下文的实现类
常用实现:
1从类路径中加载配置文件
2从文件系统中加载配置文件
3从web上下文加载配置文件(需要导入spring-web-4.0.2.RELESE.jar)
4、Spring容器中的Bean的生命周期
a. 实例化bean对象(通过构造方法或者工厂方法)
b. 设置对象属性(setter等)(依赖注入)
c. 如果Bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的ID。(和下面的一条均属于检查Aware接口)
d. 如果Bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身
e. 将Bean实例传递给Bean的前置处理器的postProcessBeforeInitialization(Object bean, String beanname)方法
f. 调用Bean的初始化方法
g. 将Bean实例传递给Bean的后置处理器的postProcessAfterInitialization(Object bean, String beanname)方法
h. 使用Bean
i. 容器关闭之前,调用Bean的销毁方法
5、Spring容器对Bean的装配(DI)
1、 什么是bean的装配?
指由spring容器创建注入组件对象的过程,即被称为bean的装配
2、 Spring容器bean的装配方式
2-1:spring2.5的基于xml的装配
2-2:spring3.0的基于注解的装配(常用)
2-3:spring4.0提出的基于groovy的装配
3、 Bean元素在容器中的基本语法为(基于xml)
<bean id=’’ class=’’ ‘’>
<bean id=’’ class=’’ ‘’/>
id:用于设置bean组件对象在容器中的名称
class:用于设置bean组件的类名称(完整名称)
4、 Spring容器中的Bean默认状态下都是单态模式
如果要改变bean的单态模式,可以通过改变完成
Spring3.0版本中,使用singleton属性<bean id="person" class="com.wangjie.po.Person" singleton ="true"/>
Spring4.0版本中,使用scope属性<bean id="person" class="com.wangjie.po.Person" scope="singleton"/>
5、 Bean的初始化行为和销毁行为设置方式
5-1:通过在配置文件中进行配置
步骤:1、在Bean的组件类上自定义初始化方法和销毁方法
2、在配置中添加如下配置:<bean id="" class="" init-method="自定义初始化行为" destroy-method="自定义销毁行为"/>
5-2:通过实现spring框架提供的接口
步骤:在bean组件类上添加接口并重写方法
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
6、 bean的注入
<1> 基本数据类型的注入:
<2> 组件对象的注入:(常用)
<bean id="person" class="com.wangjie.po.Person">
<property name="pid" value="1001"></property>
<property name="pname" value="张三"></property>
<property name="dog" ref="dog"></property>```
</bean>
ref=”dog”表示引用其它bean,这个bean是已经创建的
<3> 数组数据的注入:
<bean id="person" class="com.wangjie.po.Person">
<property name="pid" value="1001"></property>
<property name="pname" value="张三"></property>
<property name="dog" ref="dog"></property>
<property name="houses">
<array>
<value>房子1</value>
<value>房子2</value>
<value>房子3</value>
<value>房子4</value>
</array>
</property>
<4>集合数据的注入:(set list)
<5>Map注入:
8 使用注解装配bean
8-1 在项目中添加spring-aop和spring-context的对应JAR包
8-2 在spring的配置文件中添加AOP和context的命名空间引用,例如:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
//*****//
</beans>
8-3 在spring配置文件中增加注解扫描配置:
例如:
<context:component-scan base-package="com.huibo">
<context:include-filter type="annotation" expression="com\.wangjie\.po.*"/>
<context:exclude-filter type="annotation" expression="com\.huibo\.test.*"/>
</context:component-scan>
简写:
<context:component-scan base-package="com.wangjie"/>
备注:
base-package:设置当前项目中要扫描注解的基础包
context:inlude-filter:用于设置注解扫描时基础包中要包涵的包和类
context:exclude-filter:用于设置注解扫描时基础包中不扫描的包和类
type:用于设置扫描过滤器匹配的类型
expressions:用于设置扫描过滤器匹配类型对应的表达式
8-4:在组件bean的类上添加对应的组件注解标识,常用注解如下:
**@Component:通用组件bean
@Controller:控制器组件bean
@Service:模型组件bean
@Repository:持久化组件bean**
.8-5:在具有依赖关系的组件类中使用@Autowired注解自动注入组件bean
例如:
@Component
Public class Person {
@Autowired
Private Dog dgo;
9、value注解的使用
作用:读取properties文件中的配置信息并注入到组件对象的属性中
使用步骤:
9-1:在项目中添加属性文件(properties文件),并将这个文件放在src目录下
9-2:在属性文件中,加入对应的key=value
9-3:在spring配置文件中配置容器加载属性文件
配置spring加载自定义
备注:需要使用util命名空间
9-4:在需要注入数据的组件类中,使用@Value完成注入
public class XXX{
@Value("#{configProperties['key']}")
private String xxx;
public void setParam(String param){
this.param = param;
}
}
备注:key代表的是属性文件中数据的名称
要注入的属性必须提供setter方法
在@Value注解使用${}写法:
1、 在9-3配置中补充一个bean的配置
2、 在类的属性上按如下写法进行书写
上一篇: 砍树枝 冲刺noip