获取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对象。
最后一种方式因平常不怎么用,所以没有贴代码,感兴趣的可以实现接口试试。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。