Spring基于XML的IoC
Maven导入Spring依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.3</version>
</dependency>
Spring配置文件
<?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="account" class="com.ttpfx.domain.Account"/>
</beans>
BeanFactory 和 ApplicationContext 的区别
BeanFactory:在使用对象时创建对象
ApplicationContext:在加载配置文件时创建对象(默认情况下)
使用BeanFactory:
Resource resource = new ClassPathResource("Beans.xml");
BeanFactory beanFactory = new XmlBeanFactory(resource);
Account account = beanFactory.getBean(Account.class);
System.out.println(account);
使用ApplicationContext:
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("Beans.xml");
Account account = applicationContext.getBean("account", Account.class);
System.out.println(account);
创建Bean的三种方式
- 通过构造方法创建对象
<bean id="account" class="com.ttpfx.domain.Account"/>
- 通过普通工厂类的实例方法创建实例:
<bean id="instanceFactory" class="com.ttpfx.factory.InstanceFactory"/>
<bean id="account" factory-bean="instanceFactory" factory-method="getAccount"/>
- 通过静态工厂类的静态方法创建实例:
<bean id="account" class="com.ttpfx.factory.StaticFactory" factory-method="getAccount"/>
Bean的作用范围
通过bean标签的scope属性指定其作用域
<bean id="account" class="com.ttpfx.domain.Account" scope="prototype"/>
- singleton:在Spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,默认值
- prototype:每次调用getBean时创建一个新的实例
- request:每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境
- session:同一个HTTP Session共享一个Bean,不同Session使用不同的Bean,仅适用于WebApplicationContext环境
- global-session:一般用于Portlet应用环境,该作用域仅适用于WebApplicationContext环境