BeanFactory接口

/ Spring / 没有评论 / 331浏览

今天我们学习一下spring中的BeanFactory接口。BeanFactory接口也可以称之为spring框架的核心接口。其它技术的底层实现都依赖于此接口开发的。我们看BeanFactory接口的名字可以知道,它就是为了创建对象而存在的也就是为了对象实例化。但除此之外还提供了对象的实例缓存、对象代理、事件发布、资源加载等高级配置功能。在spring中也可以管BeanFactory接口直接叫IOC容器。在说的简单一点就是BeanFactory接口是spring框架的基础,也就是为spring框架服务的,我们正常开发时是基本不会直接使用BeanFactory接口的。这是因为spring为了我们方便的使用IOC容器的功能,于是在BeanFactory接口之上又实现了另一个接口叫做ApplicationContext接口。ApplicationContext接口继承了BeanFactory接口,也就是ApplicationContext接口默认实现了BeanFactory接口的全部功能,并又添加了很多自己独有的特性。例如提供了国际化的支持和框架事件体系等。说白了就是又添加了很多面向应用的功能,方便我们创建实际的应用。所以也可以理解为ApplicationContext接口就是为了使用spring框架的开发人员提供的。在这一篇文章中我们还是主要介绍BeanFactory接口的使用,在后续的文章中讲继续分享ApplicationContext接口。

下面我们看一下BeanFactory接口都包括哪些子接口。

该接口定义了访问IOC容器中对象基本信息的方法,例如查看IOC容器的对象个数、获取对象的配置信息、查看IOC容器中是否包含某一个对象等。

父子级IOC容器接口,子容器可以通过该接口访问父容器。

IOC容器的可定制性接口,也就是说通过此接口可以设置类加载器、属性编辑器、容器初始化后置处理器等。

定义IOC容器中对象的自动装配规则,也就是按名字匹配还是按类型匹配等。

定义了允许在运行期间内向IOC容器注册单实例的对象。

spring配置文件中的每一个<bean>节点元素都会在spring容器里通过一个BeanDefinition对象表示,用它来描述Bean的配置信息。

该接口提供了向IOC容器手工注册BeanDefinition对象的方法。

下面我们通过BeanFactory接口来启动IOC容器。

<?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.xsd">

<bean id="user" class="com.jilinwula.spring.User" p:username="admin" p:password="jilinwula"/>

</beans>
public class User {

private String username;
private String password;

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
/**
* BeanFactory测试
*
* @throws Exception
*/
@Test
public void beanFactory() throws Exception {
BeanFactory beanFactory = new ClassPathXmlApplicationContext("test.xml");
User user = beanFactory.getBean("user",User.class);
System.out.println(user);
}
User{username='admin', password='jilinwula'}