Bean 实例化(Instantiation)
常规方式
- 通过构造器(配置元信息:XML、Java 注解和 Java API )
- 通过静态工厂方法(配置元信息:XML 和 Java API )
- 通过 Bean 工厂方法(配置元信息:XML和 Java API )
- 通过 FactoryBean(配置元信息:XML、Java 注解和 Java API )
特殊方式
- 通过 ServiceLoaderFactoryBean(配置元信息:XML、Java 注解和 Java API )
- 通过 AutowireCapableBeanFactory#createBean(java.lang.Class, int, boolean)
- 通过 BeanDefinitionRegistry#registerBeanDefinition(String,BeanDefinition)
通过 FactoryBean方式
xml配置 spring-bean-instantiation-context.xml
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="cat-factory-bean"
class="com.demo.beans.definition.factory.CatFactoryBean"/>
</beans>
获取Cat bean对象:
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:META-INF/spring-bean-instantiation-context.xml");
Object cat01 = ctx.getBean("cat-factory-bean");
System.out.println(cat01);
ctx.close();
spring容器在getBean时若解析到bean是工厂bean(FactoryBean)那么会继续调用其getObject方法.
ServiceLoaderFactoryBean方式
xml配置 spring-bean-instantiation-context.xml
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="catFac" class="org.springframework.beans.factory.serviceloader.ServiceLoaderFactoryBean">
<property name="serviceType" value="com.demo.beans.definition.factory.CatFactory"/>
</bean>
</beans>
同时需要在META-INF/services/下添加如下:

内容为CatFactory的实现类:
com.demo.beans.definition.factory.DefaultCatFactory
本文详细介绍了Spring框架中Bean的多种实例化方式,包括常规的构造器、静态工厂方法、Bean工厂方法以及FactoryBean。特别讨论了通过ServiceLoaderFactoryBean和AutowireCapableBeanFactory创建Bean的方法,并给出了具体的XML配置示例。同时,展示了如何利用META-INF/services目录下的配置来加载服务。通过对这些实例化方式的理解,读者能更好地掌握Spring容器的内部工作原理。
4373

被折叠的 条评论
为什么被折叠?



