spring基于XML的IOC环境搭建和入门
1.使用maven添加依赖关系
pom.xml依赖关系添加如下
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
</dependencies>
2.创建可重用组件(bean)的xml配置文件
在resource目录下创建bean.xml文件,并添加配置文件头部和可重用组件(bean)的反射关系 --> <bean id=".." class=" ..">
<?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
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="accountService" class="com.leon.service.impl.AccountServiceImpl"></bean>
<bean id="accountDao" class="com.leon.Dao.impl.AccountDao"></bean>
</beans>
3.在表现层Client中获取spring的IOC核心容器,并根据id获取对象
使用
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml"); 通过指定xml配置文件的位置获取IOC核心容器的对象,接下来在核心容器中根据key==<bean id> 获取可重用组件的对象并强制转型
public class Client {
public static void main(String[] args) {
//获取spring的IOC核心容器,并根据id获取对象
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//根据id获取bean对象
IAccountService accountService = (AccountServiceImpl)ac.getBean("accountService");
IAccountDao accountDao = ac.getBean("accountDao",AccountDao.class);
}
}
ApplicationContext 是什么?
Spring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口。他们都可代表Spring容器,Spring容器是生成Bean实例的工厂,并且管理容器中的Bean。
BeanFactory接口包含以下几个基本方法:
Ø Boolean containBean(String name):判断Spring容器是否包含id为name的Bean实例。
Ø <T> getBean(Class<T> requiredTypr):获取Spring容器中属于requiredType类型的唯一的Bean实例。
Ø Object getBean(String name):返回Sprin容器中id为name的Bean实例。
Ø <T> T getBean(String name,Class requiredType):返回容器中id为name,并且类型为requiredType的Bean
Ø Class <?> getType(String name):返回容器中指定Bean实例的类型。
调用者只需使用getBean()方法即可获得指定Bean的引用,无须关心Bean的实例化过程。即Bean实例的创建过程完全透明。
ApplicationContext 和 BeanFacroty 的区别
/** * ApplicationContext: * 他在构建核心容器时,创建对象采取的策略是立即加载的方式(只要一读取完配置文件就马上创建配置文件中的配置对象) * BeanFactory: * 他在构建核心容器时,创建对象采用的是延迟加载的方式(当调用getBean()方法传一个id时才创建这个ID的对象) */
ApplicationContext 的三个常用实现类的区别
/** * ClassPathXmlApplicationContext:它可以加载类路径下的配置文件,要求配置文件必须在类路径下,不在的话加载不了 * FileSystemXmlApplicationContext:它可以加载磁盘任意路径下的配置文件(必须有访问权限) * AnnotationConfigApplicationContext:它适用于读取注解创建容器 */
ApplicationContext 接口的关系图
拓展:bean的三种创建方式
第一种方式:使用默认构造函数创建,在spring配置文件中使用bean标签,声明id和class属性之后,且没有其他属性和标签时,采用的就是默认构造函数函数创建方式,如果类中没有默认构造函数,则对象无法创建。
<bean id="accountService" class="com.leon.service.impl.AccountServiceImpl"></bean>
第二种方式:使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器)
<bean id="instanceFactory" class="com.leon.factory.InstanceFactory"></bean>
<bean id="accountService2" factory-bean="instanceFactory" factory-method="getAccountService"></bean>
第三种方式:使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入spring容器)
<bean id="accountService3" class="com.leon.factory.staticFactory" factory-method="getAccountService"></bean>
拓展:bean的作用范围
bean标签的作用范围调整
bean标签的scope属性:用于指定bean标签的作用范围
: singleton 单例(默认值)
: prototype 多例
: request 作用于web应用的请求范围
: session 作用于web应用的会话范围
: global-session 作用于集群环境的会话范围,不是集群环境时,它就是session
拓展:bean对象的生命周期
bean对象的生命周期 单例 出生:容器创建时对象出生 活着:容器还在就一直存活 死亡:容器销毁,对象死亡 总结:单例对象的生命周期和容器相连 多例 出生:当我们使用对象时spring为我们创建 活着:对象只要在使用过程中就一直活着。 死亡:当对象长时间不用,且没有别的对象引用时,由Java垃圾回收器回收
拓展:依赖注入
Dependency Injection 当前类需要用到其他类的对象,由spring提供,我们只需要在配置文件中说明 依赖注入能注入的数据有三类: 基本类型和String 其他bean类型(在配置文件中或者注解配置过的bean) 复杂类型/集合类型 注入方式:三种 第一种:使用构造函数提供 第二种:使用set方法提供 第三种:使用注解提供
set方法注入(常用):
<bean id="accountService" class="com.leon.service.impl.AccountServiceImpl">
<property name="name" value="程锐"></property>
<property name="age" value="24"></property>
<property name="date" ref="time"></property>
</bean>
<bean id="time" class="java.util.Date"></bean>