Spring——Spring容器创建对象的特点

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Spring——Spring容器创建对象的特点

文章目录:


1.Spring容器创建对象的特点

1.1 Spring是在什么时候创建的对象? 

1.2 Spring容器创建对象,一次创建几个?

1.3 获取Spring容器中定义的对象数量、名称

1.4 Spring创建非自定义类对象、没有接口的类对象

1.Spring容器创建对象的特点


1.    容器对象ApplicationContext:接口,通过ApplicationContext对象获取要使用的其他Java对象,执行getBean("<bean>id")

2.    spring默认的是调用类的无参构造方法,创建对象。

3.    spring读取配置文件,一次创建好所有的Java对象,都放到map中。

ApplicationContext容器,会在容器对象初始化时,将其中的所有对象一次性全部装配好。以后代码中若要使用到这些对象,只需从内存中直接获取即可。 


1.1 Spring是在什么时候创建的对象? 

首先,我们在spring配置文件(beans.xml)中加入下面这行代码:👇👇👇

<bean id="someService" class="com.bjpowernode.service.impl.SomeServiceImpl" />

对应的接口和接口的实现类如下: 👇👇👇

package com.bjpowernode.service;
/**
 *
 */
public interface SomeService {
    void doSome();
}
package com.bjpowernode.service.impl;
import com.bjpowernode.service.SomeService;
public class SomeServiceImpl implements SomeService {
    /**
     * spring默认使用的是无参构造方法来创建对象
     * 如果定义了有参构造方法,应该再定义一个无参构造方法
     */
    public SomeServiceImpl() {
        System.out.println("SomeServiceImpl的无参构造方法");
    }
    @Override
    public void doSome() {
        System.out.println("执行了业务方法doSome()");
    }
}

编写相应的测试方法:👇👇👇

    /*
     * spring是在什么时候创建的对象
     * 创建spring容器对象的时候,会读取配置文件,创建文件中声明的Java对象
     */
    @Test
    public void test02() {
        String config="beans.xml";
        //执行此行代码,会创建配置文件中的所有对象,调用了无参构造方法
        ApplicationContext ctx=new ClassPathXmlApplicationContext(config);
        SomeService service=ctx.getBean(SomeService.class);
        service.doSome();
    }

1.2 Spring容器创建对象,一次创建几个?

spring配置文件(beans.xml)中加入下面这行代码:👇👇👇

  <bean id="someService" class="com.bjpowernode.service.impl.SomeServiceImpl" />
  <bean id="someService1" class="com.bjpowernode.service.impl.SomeServiceImpl" />

接口和实现类与上面的例子相同。

编写相应的测试方法:👇👇👇

    /**
     * spring容器创建对象,一次创建几个
     * 在创建容器对象时,会把配置文件中的所有对象都创建出来(spring的默认规则)
     */
    @Test
    public void test03() {
        String config="beans.xml";
        ApplicationContext ctx=new ClassPathXmlApplicationContext(config);
//        SomeService service=ctx.getBean(SomeService.class);
//        service.doSome();
    }

1.3 获取Spring容器中定义的对象数量、名称

<bean id="someService" class="com.bjpowernode.service.impl.SomeServiceImpl" />
<bean id="someService1" class="com.bjpowernode.service.impl.SomeServiceImpl" />
    @Test
    public void test04() {
        String config="beans.xml";
        //执行此行代码,会创建配置文件中的所有对象,调用了无参构造方法
        ApplicationContext ctx=new ClassPathXmlApplicationContext(config);
        //获取容器中定义对象的数量
        int nums=ctx.getBeanDefinitionCount();
        System.out.println("容器中定义对象的数量===" + nums);
        //获取容器中定义的对象名称
        String names[]=ctx.getBeanDefinitionNames();
        for(String name : names) {
            System.out.println("容器中定义的对象名称===" + name);
        }
    }


1.4 Spring创建非自定义类对象、没有接口的类对象

<bean id="someService" class="com.bjpowernode.service.impl.SomeServiceImpl" />
<bean id="someService1" class="com.bjpowernode.service.impl.SomeServiceImpl" />
<!-- 创建非自定义对象 -->
<bean id="mydate" class="java.util.Date" />
<!-- 通过没有接口的类来创建对象 -->
<bean id="otherService" class="com.bjpowernode.service.OtherService" />

其中Date类是Java中日期处理相关的类,之后我们又自定义了一个OtherService类,代码如下:👇👇👇

package com.bjpowernode.service;
/**
 *
 */
public class OtherService {
    public void doOther() {
        System.out.println("执行OtherService的doOther()方法");
    }
}
    //让spring创建非自定义对象
    //有class就能让spring创建对象
    @Test
    public void test05() {
        String config="beans.xml";
        ApplicationContext ctx=new ClassPathXmlApplicationContext(config);
        Date date= (Date) ctx.getBean("mydate");
        System.out.println("date===" + date);
        OtherService service= (OtherService) ctx.getBean("otherService");
        service.doOther();
    }

相关文章
|
1月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
1月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
354 2
|
XML Java 数据格式
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
|
6月前
|
XML Java 数据格式
Spring IoC容器的设计与实现
Spring 是一个功能强大且模块化的 Java 开发框架,其核心架构围绕 IoC 容器、AOP、数据访问与集成、Web 层支持等展开。其中,`BeanFactory` 和 `ApplicationContext` 是 Spring 容器的核心组件,分别定位为基础容器和高级容器,前者提供轻量级的 Bean 管理,后者扩展了事件发布、国际化等功能。
|
9月前
|
XML Java 数据格式
Spring容器的本质
本文主要讨论Spring容器最核心的机制,用最少的代码讲清楚Spring容器的本质。
|
11月前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
355 6
|
11月前
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
277 1
|
Java Maven Spring
Spring 小案例体验创建对象的快感
本文介绍了如何在IDEA中创建一个Spring项目,包括项目创建、配置pom.xml文件以引入必要的依赖、编写实体类HelloSpring及其配置文件applicationContext.xml,最后通过测试类TestHelloSpring展示如何使用Spring的bean创建对象并调用方法。
108 0
|
前端开发 Java Docker
使用Docker容器化部署Spring Boot应用程序
使用Docker容器化部署Spring Boot应用程序
|
Java Docker 微服务
利用Docker容器化部署Spring Boot应用
利用Docker容器化部署Spring Boot应用
270 0
下一篇
oss云网关配置