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

Spring创建bean的四种方式

时间:2022-09-04 00:22:55浏览次数:59  
标签:容器 对象 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,创建,四种
From: https://www.cnblogs.com/pengshuai1014/p/16654076.html

相关文章

  • Spring 创建bean的几种方式
    Spring创建bean的几种方式 在XML配置文件中,通过bean标签创建bean,然后再通过spring容器进行管理创建xml配置文件定义bean一、通过构造函数创建1<?xmlversion="......
  • SpringCloud简介
    一、SpringCloud是什么?SpringCloud最擅长的就是集成,把其他框架拿过来集成到自己的项目中。SpringCloud也是一样,它将现在非常流行的一些技术融合到了一起,实现了诸如:服务发......
  • SpringCloud 使用 Hystrix 实现【服务端】降级
    Hystrix是Netflix公司提供的一个开源免费组件,主要用于降级熔断服务调用,防止系统出现级联失败(也就是通常所说的雪崩)。我们在实际开发中,需要在服务端和客户端都有降级措施......
  • spring坐标
    <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.5.RELEAS......
  • SpringMVC学习笔记(四)——REST风格
    1.什么是REST RESTful(REST风格)是一种当前比较流行的互联网软件架构模式,它充分并正确地利用HTTP协议的特性,为我们规定了一套统一的资源获取方式,以实现不同终端之间(客......
  • SpringMVC学习笔记(三)——请求转发与重定向
    1.请求转发 我们可以在控制器方法指定逻辑视图名(ViewName)时,使用“forward:”关键字进行请求转发操作。当控制器方法中所设置的逻辑视图名称以“forward:”为前缀时,该逻......
  • IDEA设置springBoot启动类快捷键
    publicstaticvoidmain(String[]args){SpringApplication.run($name$.class,args);}......
  • spring中@Transactional注解的作用,使用场景举例
    一,spring中管理事务一般使用@Transactional注解,下面对@Transactional使用的各个场景做一个列举,尽可能的将所有场景罗列出来1,场景一,最常见的用法,在方法上使用@Transactio......
  • Springboot2.x 使用 nacos 实现配置管理
    参考https://nacos.io/zh-cn/https://blog.csdn.net/weixin_43871678/article/details/121628460环境环境版本操作windows10JDK11Springboot2.......
  • 自学Spring(二)
    注解开发:  注解开发之中的依赖注入——自动装配     @Autowired   直接取消注入的入口。一个注解搞定。    在@Autowired下面加一个 ......