Spring IoC容器
Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想
Ioc 在开发中,无需自行实例对象,而是有 Spring Ioc容器 创建。Spring容器会负责控制程序之间的关系,而不是由代码直接控制,因此,控制权由 Spring容器 接管,控制权发生了反转,是Ioc设计思想
Spring 提供了两种 IoC 容器,分别为 BeanFactory 和 ApplicationContext.
BeanFactory
BeanFactory是一个管理Bean的工厂,根据xml配置文件中的定义Bean进行管理,主要负责初始化各种Bean,并调用他们的生命周期方法
加载xml配置文件,如下所示:(xml文件必须是绝对路径)
BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource("D:\applicationContext.xml"));
ApplicationContext
ApplicationContext 是 BeanFactory 的子接口,也是 应用上下文。BeanFactory 的所有功能,还添加了对 i18n(国际化)、资源访问、事件传播等方面的良好支持
ApplicationContext 接口有两个常用的实现类
ClassPathXmlApplicationContext
该类从类路径 ClassPath 中寻找指定的 XML 配置文件,找到指定xml文件加载实例化工作,如下所示
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(Spring配
置文件的名称);
FileSystemXmlApplicationContext
该类从指定系统路径的文件 进行寻找指定 XML 配置文件,找到指定xml文件加载实例化工作,如下所示
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(Spring配
置文件的路径和名称);
在读取 Spring 的配置文件时,FileSystemXmlApplicationContext 是通过参数指定配置文件的位置,它可以获取类路径之外的资源
Bean标签
XML 格式配置文件的根元素是 <beans>
,该元素包含了多个 <bean>
子元素,每一个 <bean>
子元素定义了一个 Bean,并描述了该 Bean 如何被装配到 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" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<!-- 使用id属性定义person1,其对应的实现类为com.mengma.person1 (类路径及包路径)-->
<bean id="person1" class="com.mengma.person1 " />
<!--使用name属性定义person2,其对应的实现类为com.mengma.domain.Person2 (类路径及包路径) -->
<bean name="Person2" class="com.mengma.domain.Person2"/>
</beans>
bean属性
属性名称 | 描述 |
---|---|
id | 是一个 Bean 的唯一标识符,Spring 容器对 Bean 的配置和管理都通过该属性完成 |
name | Spring 容器同样可以通过此属性对容器中的 Bean 进行配置和管理,name 属性中可以为 Bean 指定多个名称,每个名称之间用逗号或分号隔开 |
class | 该属性指定了 Bean 的具体实现类,它必须是一个完整的类名,使用类的全限定名 |
scope | 用于设定 Bean 实例的作用域,其属性值有 singleton(单例)、prototype(原型)、request、session 和 global Session。其默认值是 singleton |
lazy-init | 延迟加载(true/false 默认false)。通过getbean()方法获取对象时才会生效 |
init-method | 初始化对象方法 |
destroy-method | 销毁对象方法 |
list | 用于封装 List 或数组类型的依赖注入 |
set | 用于封装 Set 类型属性的依赖注入 |
map | 用于封装 Map 类型属性的依赖注入 |
实例Bean
实例Bean有三种方式,构造器实例化、静态工厂方式实例化、实例工厂方式实例化
-
创建实体对象
项目 src目录 下
com.People
package com; public class People { int id; String name; public People() { System.out.println("无参实例"); } public People(int id , String name) { System.out.println("有参实例"); this.id = id; this.name = name; } @Override public String toString() { return "People{" + "id=" + id + ", name='" + name + '\'' +