1 BeanFactory与ApplicationContext区别
BeanFactory是Spring框架中IoC容器的顶层接?,它只是?来定义?些基础功能,定义?些基础规范,?ApplicationContext是它的?个?接?,所以ApplicationContext是具备BeanFactory提供的全部功能的。
通常,我们称BeanFactory为SpringIOC的基础容器,ApplicationContext是容器的?级接?,?BeanFactory要拥有更多的功能,?如说国际化?持和资源访问(xml,java配置类)等等
启动 IoC 容器的?式:
* Java环境下启动IoC容器
①ClassPathXmlApplicationContext:从类的根路径下加载配置?件(推荐使?)
②FileSystemXmlApplicationContext:从磁盘路径上加载配置?件
③AnnotationConfigApplicationContext:纯注解模式下启动Spring容器
* Web环境下启动IoC容器
①从xml启动容器
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--配置Spring ioc容器的配置?件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--使?监听器启动Spring的IOC容器-->
<listener>
<listener-
class>org.springframework.web.context.ContextLoaderListener</listener-
class>
</listener>
</web-app>
②从配置类启动容器
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--告诉ContextloaderListener知道我们使?注解的?式启动ioc容器-->
<context-param>
<param-name>contextClass</param-name>
<param-
value>org.springframework.web.context.support.AnnotationConfigWebAppli
cationContext</param-value>
</context-param>
<!--配置启动类的全限定类名-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.lagou.edu.SpringConfig</param-value>
</context-param>
<!--使?监听器启动Spring的IOC容器-->
<listener>
<listener-
class>org.springframework.web.context.ContextLoaderListener</listener-
class>
</listener>
</web-app>
2 纯xml模式
xml ?件头
<?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">
实例化Bean的三种?式
?式?:使??参构造函数
在默认情况下,它会通过反射调??参构造函数来创建对象。如果类中没有?参构造函数,将创建失败。
?式?:使?静态?法创建
在实际开发中,我们使?的对象有些时候并不是直接通过构造函数就可以创建出来的,它可能在创建的过程 中会做很多额外的操作。此时会提供?个创建对象的?法,恰好这个?法是static修饰的?法,即是此种情 况。
例如,我们在做Jdbc操作时,会?到java.sql.Connection接?的实现类,如果是mysql数据库,那么?的就 是JDBC4Connection,但是我们不会去写 JDBC4Connection connection = new JDBC4Connection() ,因 为我们要注册驱动,还要提供URL和凭证信息,? DriverManager.getConnection ?法来获取连接。
?式三:使?实例化?法创建
此种?式和上?静态?法创建其实类似,区别是?于获取对象的?法不再是static修饰的了,?是类中的? 个普通?法。此种?式?静态?法创建的使??率要??些。
在早期开发的项?中,??类中的?法有可能是静态的,也有可能是?静态?法,当是?静态?法时,即可 采?下?的配置?式:
<!--使?实例?法创建对象的配置?式-->
<bean id="beanFactory"
class="com.lagou.factory.instancemethod.BeanFactory"></bean>
<bean id="transferService" factory-bean="beanFactory" factory-
method="getTransferService"></bean>
3.Bean的X及?命周期
作?范围的改变
在spring框架管理Bean对象的创建时,Bean对象默认都是单例的,但是它?持配置的?式改
变作?范围。作?范围官?提供的说明如下图:
在上图中提供的这些选项中,我们实际开发中?到最多的作?范围就是singleton(单例模式)和prototype(原型模式,也叫多例模式)。配置?式参考下?的代码:
<!--使?静态?法创建对象的配置?式-->
<bean id="userService" class="com.lagou.factory.BeanFactory"
factory-method="getTransferService"></bean>
<!--使?实例?法创建对象的配置?式-->
<bean id="beanFactory"
class="com.lagou.factory.instancemethod.BeanFactory"></bean>
<bean id="transferService" factory-bean="beanFactory" factory-
method="getTransferService"></bean>
<!--配置service对象-->
<bean id="transferService"
class="com.lagou.service.impl.TransferServiceImpl" scope="singleton">
</bean>
不同作?范围的?命周期
单例模式:singleton
对象出?:当创建容器时,对象就被创建了。
对象活着:只要容器在,对象?直活着。
对象死亡:当销毁容器时,对象就被销毁了。
?句话总结:单例模式的bean对象?命周期与容器相同。
多例模式:prototype
对象出?:当使?对象时,创建新的对象实例。
对象活着:只要对象在使?中,就?直活着。
对象死亡:当对象?时间不?时,被java的垃圾回收器回收了。
?句话总结:多例模式的bean对象,spring框架只负责创建,不负责销毁。
Bean标签属性
在基于xml的IoC配置中,bean标签是最基础的标签。它表示了IoC容器中的?个对象。换句话说,如果?个对象想让spring管理,在XML的配置中都需要使?此标签配置,Bean标签的属性如下:
id属性: ?于给bean提供?个唯?标识。在?个标签内部,标识必须唯?。
class属性:?于指定创建Bean对象的全限定类名。
name属性:?于给bean提供?个或多个名称。多个名称?空格分隔。
factory-bean属性:?于指定创建当前bean对象的??bean的唯?标识。当指定了此属性之后,class属性失效。
factory-method属性:?于指定创建当前bean对象的???法,如配合factory-bean属性使?,则class属性失效。如配合class属性使?,则?法必须是static的。
scope属性:?于指定bean对象的作?范围。通常情况下就是singleton。当要?到多例模式时,可以配置为prototype。 init-method属性:?于指定bean对象的初始化?法,此?法会在bean对象装配后调?。必须是?个?参?法。
destory-method属性:?于指定bean对象的销毁?法,此?法会在bean对象销毁前执?。它只能为scope是singleton时起作?。
4.DI 依赖注?的xml配置
依赖注?分类
- 按照注?的?式分类
构造函数注?:顾名思义,就是利?带参构造函数实现对类成员的数据赋值。
set?法注?:它是通过类成员的set?法实现数据的注?。(使?最多的) - 按照注?的数据类型分类
基本类型和String
注?的数据类型是基本类型或者是字符串类型的数据。
其他Bean类型
注?的数据类型是对象类型,称为其他Bean的原因是,这个对象是要求出现在IoC容器
中的。那么针对当前Bean来说,就是其他Bean了。
复杂类型(集合类型)
注?的数据类型是Aarry,List,Set,Map,Properties中的?种类型。
依赖注?的配置实现之构造函数注? 顾名思义,就是利?构造函数实现对类成员的赋值。它的使?要求是,类中提供的构造函数参数个数必须和配置的参数个数?致,且数据类型匹配。同时需要注意的是,当没有?参构造时,则必须提供构造函数参数的注?,否则Spring框架会报错。
原文地址:https://blog.51cto.com/13225344/2473820