Spring创建bean的四种方式

获取bean对象代码
ApplicationContext app=new ClasspathXmlApplicationContext("applicationContext.xml");
app.getBean("userDao");----通过配置文件里bean的id值获得bean对象

1:通过反射调用构造方法创建bean对象:
--单例
无参构造:
<bean id="userDao" class="com...UserDaoImpl" scope="singleton"></bean>
有参构造(静态工厂方法和实例工厂方法同理):
<bean id="userDao" class="com...UserDaoImpl" scope="singleton">
<constructor-arg index="0" value="小明"/>
<constructor-arg index="1" value="男"/>
</bean>
--多例
<bean id="userDao" class="com...UserDaoImpl" scope="prototype"></bean>

constructor-arg:用于指定构造方法的参数值
index:构造方法中参数的位置,从0开始,依次递增
value:指定参数的值
ref:当插入的值为容器内其他bean的时候,这个值为容器中对应bean的名称
2:通过静态工厂方法创建bean对象:
<bean id="userDao" class="com...StaticFactory" factory-method="getUserDao" ></bean>

class:指定静态工厂完整的类名
factory-method:静态工厂中的静态方法,返回需要的对象

3:通过实例工厂方法创建bean对象:
<bean id="factory" class="com...DynamicFactory" ></bean>
<bean id="userDao" factory-bean="factory" factory-method="getUserDao" ></bean>

class:指定实例工厂完整的类名
factory-method:实例工厂中的方法,返回需要的对象
factory-bean:实例工厂bean对象,然后调用该对象中factory-method


4:通过factorybean来创建bean对象
前面我们学过了beanfactory接口,beanfactoryspring容器的顶层接口,而这里要说的是
factorybean,也是一个接口,这两个接口很容易搞混淆,factorybean可以让spring容器通过这个接口
的实现来创建我们需要的bean对象。
源码如下

public interface factorybean<T> {
/*** 返回创建好的对象 */
@Nullable T getobject() throws Exception;

/*** 返回需要创建的对象的类型 */
@Nullable Class<?> getobjectType();

/** * bean是否是单例的 **/
default boolean isSingleton() {
return true;
}
}

接口中有3个方法,前面2个方法需要我们去实现,getobject方法内部由开发者自己去实现对象的创
建,然后将创建好的对象返回给spring容器,getobjectType需要指定我们创建的bean的类型;最后一
方法isSingleton表示通过这个接口创建的对象是否是单例的,如果返回false,那么每次从容器中获取
对象的时候都会调用这个接口的getobject() 去生成bean对象。
最后一种方式因平常不怎么用,所以没有贴代码,感兴趣的可以实现接口试试。

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...