首页 > 其他分享 >Spring:IOC容器创建Bean的方式有哪几种?

Spring:IOC容器创建Bean的方式有哪几种?

时间:2023-03-10 18:45:51浏览次数:40  
标签:applicationContext 容器 对象 Spring bean demoDao DemoDao Bean 哪几种

三种:直接使用构造器、从静态工厂中拿、从实例工厂中拿。

 


一、直接使用构造器

1、配置bean

    <bean class="com.lurenjia.dao.DemoDao" id="demoDao"></bean>

2、从容器中获取

        //获取到ioc容器对象
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        //获取到bean对象
        DemoDao demoDao = applicationContext.getBean("demoDao",DemoDao.class);

二、从静态工厂中拿

  静态工厂:生产对象的方法为静态方法。

1、配置bean

    <!--通过静态工厂获取一个demo对象-->
    <bean id="demoDao2" class="com.lurenjia.factory.DemoFactory" factory-method="getObject"></bean>

2、从容器中获取

        //获取到ioc容器对象
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        //获取到bean对象
        DemoDao demoDao = applicationContext.getBean("demoDao2",DemoDao.class);

三、从实例工厂中拿

  实例工厂,生产对象的方法不为静态方法,即必须通过工厂的实例对象调用。

1、配置bean

    <!--配置工厂对象-->
    <bean id="factory" class="com.lurenjia.factory.DemoFactory"></bean>
    <!--配置要拿的对象-->
    <bean id="demoDao" factory-bean="factory" factory-method="getObject"></bean>

2、从容器中获取

        //获取到ioc容器对象
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        //获取到bean对象
        DemoDao demoDao = applicationContext.getBean("demoDao",DemoDao.class);

针对实例工厂的配置繁琐,spring提供了一个FactoryBean接口,实例工厂类只要实现了这个接口就能够简化配置。


四、实例工厂实现FactoryBean接口

1、实现接口,重写方法

//泛型内为要创建的对象类型
public class DemoFactory implements FactoryBean<DemoDao> {
    //创建对象的方法
    public DemoDao getObject(){
        return new DemoDao();
    }

    //拿到对象类型的方法
    @Override
    public Class<?> getObjectType() {
        return null;
    }
    //是否为单例对象,可不重写此方法,默认为true
    @Override
    public boolean isSingleton() {
        return true;
    }
}

问题:如果我在实例工厂声明了我造的对象为原型对象,而在配置文件中配置为单例(scope="singleton"),那会如何?

答案:会造出原型对象,非单例。


2、配置bean

<bean id="demoDao" class="com.lurenjia.factory.DemoFactory"></bean>

3、从容器中获取对象

        //获取到ioc容器对象
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        //获取到bean对象
        DemoDao demoDao = applicationContext.getBean("demoDao",DemoDao.class);

 

标签:applicationContext,容器,对象,Spring,bean,demoDao,DemoDao,Bean,哪几种
From: https://www.cnblogs.com/lurenjia-bky/p/17204409.html

相关文章

  • Springcloud学习笔记56--SpringBoot之GET请求与Post请求参数偶发性丢失问题
    1.概述最近遇到一个偶现的问题,在向服务端请求的时候,偶尔会出现异常,在请求中的queryString传递了参数,却出现了异常MissingServletRequestParameterException如下所示:or......
  • Spring Bean Scope
    singleton默认情况,为每个SpringIoC容器将单个Bean定义的Scope扩大到单个对象实例。只有一个单例bean的共享实例被管理,所有对具有符合改bean定义的ID的bean的请求都会被s......
  • springboot 全局 Date参数接收 String格式 转换异常报错
    JSONparseerror:Cannotdeserializevalueoftype`java.util.Date`fromString\"2023-03-1010:00:00\":notavalidrepresentation(error:FailedtoparseDa......
  • Spring
    老版本的基础知识IoC:控制反转。类A引用类B,如果我们要更改类A引用类C,那么程序就要再测试,发布一次,浪费资源,因此我们可以不在类A中写上newB(),将对象放入Bean层中,需要的时候......
  • Spring-AOP工作流程
    Spring-AOP工作流程3,AOP工作流程3.1AOP工作流程由于AOP是基于Spring容器管理的bean做的增强,所以整个工作过程需要从Spring加载bean说起:流程1:Spring容器启动容器启......
  • IDEA利用maven配置Spring
    写在前面:此篇文章主要是记录IDEA利用maven配置Spring的全过程。由于本人也是慢慢探索出来的,所以有不全或者遗漏的地方,还请大家斧正。请耐心看完文章,前期工作做完后IDEA才可......
  • Spring-AOP简介&案例
    Spring-AOP简介&案例1,AOP简介Spring有两个核心的概念,一个是IOC/DI,一个是AOP。对于AOP,我们前面提过一句话是:AOP是在不改原有代码的前提下对其进行增强。1.1什么是AOP......
  • spring-boot-starter-* 和 *-spring-boot-starter的区别
    spring-boot-starter-*   和    *-spring-boot-starter的区别  答:一个是官方的命名,一个是非官方的命名,非官方的命名一般都是 第三方或者自己 开发的 start......
  • spring学习49-延迟加载
    pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchem......
  • spring学习48-属性注入注入数组和列表的说明
    pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchem......