org.springframework.beans.factory 这里是定义spring IOC容器接口的包,在这个包里有我们熟悉的BeanFactory
package org.springframework.beans.factory;
publicinterfaceBeanFactory {/**
*这里是对FactoryBean的转义定义,如果使用bean的名字检索FactoryBean,得到的是工厂生成的对象,
*如果需要得到工厂本身,需要转义。For example, if the bean named
* myJndiObject is a FactoryBean, getting &myJndiObject
* will return the factory
*/
String FACTORY_BEAN_PREFIX = "&";
/**
*这里根据bean的名字,在IOC容器中得到bean实例,这个IOC容器就是一个大的抽象工厂。
*/
Object getBean(String name) throws BeansException;
/**
*这里根据bean的名字和Class类型来得到bean实例,和上面的方法不同在于它会抛出异常:如果
*根据名字取得的bean实例的Class类型和需要的不同的话。
*/
Object getBean(String name, Class requiredType) throws BeansException;
/**
*这里提供对bean的检索,看看是否在IOC容器有这个名字的bean
*/boolean containsBean(String name);
/**
*这里根据bean名字得到bean实例,并同时判断这个bean是不是单例
*/boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
/**
*这里得到bean实例的Class类型
*/
Class getType(String name) throws NoSuchBeanDefinitionException;
/**
*这里得到bean的别名,如果根据别名检索,那么其原名也会被检索出来
*/
String[] getAliases(String name);
}
spring中BeanFactory和ApplicationContext的创建中都用到了典型的静态工厂模式。Bean 的创建采用了的工厂模式,他的顶级接口是 BeanFactory。BeanFactory 有三个子接口:ListableBeanFactory、HierarchicalBeanFactory 和 AutowireCapableBeanFactor。这三个接口主要是为了区分在 Spring 内部在操作过程中对象的传递和转化过程中,对对象的数据访问所做的限制。这三个子接口集成了顶级接口并对BeanFactory的功能进行了增强,称为二级接口;ConfigurableBeanFactory对二级接口HierarchicalBeanFactory进行了再次增强,它还继承了另一个外来的接口SingletonBeanRegistry,可以被称为三级接口;ConfigurableListableBeanFactory是一个更强大的接口,继承了上述的所有接口,称为四级接口。其余的为抽象类,实现了Spring Bean四级接口所定义的所有功能。
一般来说采用BeanFactory的子接口ApplicationContext来创建BeanFactory的实例。ApplicationContext通常使用如下两个实现类:
FileSystemXmlApplicationContext:以基于文件系统的XML配置文件创建ApplicationContext实例。
ClassPathXmlApplicationContext:以类加载路径下的XML配置文件创建的ApplicationContext实例
publicvoidtestAC() {
//1.在这里ApplicationContext接口继承了ListableBeanFactory, HierarchicalBeanFactory等二级接口
ApplicationContext ac = new ClassPathXmlApplicationContext("cn/xyf/a_hello/applicationContext.xml");
//2.从容器获取Bean
User user = (User) ac.getBean("user");
System.out.println(user);
}