其他分享
首页 > 其他分享> > Spring创建bean的四种方式

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接口,BeanFactory是spring容器的顶层接口,而这里要说的是
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,接口,工厂,bean,创建,四种
来源: https://www.cnblogs.com/pengshuai1014/p/16654076.html