这是我参与2022首次更文挑战的第9天,活动详情查看2022首次更文挑战
BeanFactory和Bean
在Spring中,bean用于引用由容器管理的任何组件,bean配置由实现BeanDefinition接口的类的实例表示。Bean配置不仅存储有关Bean本身的信息,还存储有关它所依赖的bean信息。对于任何实现了BeanDefinitionReader接口的BeanFactory实现类来说,都可以通过使用PropertiesBeanDefinitionReader或XmlBeanDefinitionReader从配置文件中读取BeanDefinition数据。PropertiesBeanDefinitionReader从属性文件读取bean定义,而XmlBeanDefinitionReader则从XML文件中读取相关信息。
因此,在BeanFactory中识别自己的Bean,为每个Bean分别一个ID,一个名称或者两者都有。一个Bean也可以在没有任何ID或名称(匿名Bean)情况下被实例化。或者作为另一个Bean的内部Bean被实例化,每个Bean至少有一个名称,但也可以有任意数量的名称(名称用逗号分隔),第一个名称后面的任何名称都认为是同一个Bean的别名。可使用BeanID或名称从BeanFactory检索一个Bean,并简历依赖关系(Bean X依赖于Bean Y)。
BeanFactory实现
//interface
public interface Mysql{
String defineMeaningOfLife();
}
public class BookwormMysql implements Mysql{
private Encyclopedia encyclopedia;
public void setEncyclopedia(Encyclopedia encyclopedia){
this.Encyclopedia=encyclopedia;
}
@Override
public String defineMeaningOfLife(){
return "encyclopedias";
}
}
Spring的BeanFactory初始化并获得用于处理的MySQL Bean,代码如下所示
public class XmlConfigWithBeanFactory{
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader();
reader.loadBeanDefinitions(new ClassPathResource("spring/xml-bean-factory-config.xml"));
Mysql mysql = factory.getBean("mysql");
sql.defineMeaningOfLife();
}
使用DefaultListableBeanFactory,它是Spring提供的两个主要BeanFactory实现之一,并且使用XmlBeanDefinitionReader从XML文件读取BeanDefinition信息,一旦创建并配置了BeanFactory实现,就可以通过使用在XML配置文件中配置的名称mysql来检索mysql bean。
<?xml version="1.0" encoding="UTF-8">
<beans xmlns="http://www.springframework.org/shema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="mysql" name="wiseworm" class="com.ozx.BookwormMysql">
</beans>