Spring容器创建对象的三种方式

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: /** * spring容器做的事情: * 解析spring的配置文件,利用Java的反射机制创建对象 * */public class testHelloWorld { @Test public void testHe...
/**
 * spring容器做的事情:
 *    解析spring的配置文件,利用Java的反射机制创建对象
 *
 */
public class testHelloWorld {
    @Test
    public void testHelloWorld(){
        //启动sping容器
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        //从spring容器中把对象提取出来
        HelloWorld helloWorld=(HelloWorld)context.getBean("helloWorld");
        helloWorld.sayHello();
        HelloWorld alias=(HelloWorld)context.getBean("三毛");
        alias.sayHello();
    }
    /**
     * 静态工厂
     * 在spring 内部,调用了HelloWorldFactory 内部的   getInstance 内部方法
     * 而该方法的内容,就是创建对象的过程,是由程序员来完成的
     * 这就是静态工厂
     * */
    @Test
    public  void testHelloWorldFactory(){
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        HelloWorld helloWorld=(HelloWorld)context.getBean("helloWorldFactory");
        helloWorld.sayHello();
    }
    /**
     * 实例工厂
     *   1.spring容器(beans)创建了一个实例工厂的bean
     *   2.该bean 调用了工厂方法的getInstance 方法产生对象
     * */
    @Test
    public void testHelloWorldFactory2(){
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        HelloWorld helloWorld=(HelloWorld)context.getBean("helloWorld3");
        helloWorld.sayHello();
    }

public class HelloWorld {
    public  HelloWorld(){
        System.out.println("spring 在默认的情况下,使用默认的构造函数");
    }
    public void sayHello(){
        System.out.println("hello");
    }
}
public class HelloWorldFactory {
    public static  HelloWorld getInstance(){
        return new HelloWorld();
    }
}
public class HelloWorldFactory2 {
      public  HelloWorld getInstance(){
          return new HelloWorld();
      }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    <!-- 
        beans  存放了很多个类
            把一个类放入到spring容器中,该类就是bean
     -->
     <!-- 
        一个bean就是描述一个类
          id就是标示符
                命名规范:类的第一个字母变成小写,其他的字母保持不变
          class为类的全名
      -->
     <bean id="helloWorld" class="com.sanmao.spring.ioc.HelloWorld"></bean>
    <!--alias  别名-->
    <alias name="helloWorld" alias="三毛"></alias>
    <!--静态工厂-->

    <bean id="helloWorldFactory" class="com.sanmao.spring.ioc.HelloWorldFactory"
                 factory-method="getInstance"
    ></bean>

    <!--实例工厂-->
    <bean id="helloWorldFactory2" class="com.sanmao.spring.ioc.HelloWorldFactory2">
    </bean>
    <!--factory-bean  指向实例工厂的bean-->
    <!--factory-bean 实例工厂对象的方法-->
    <bean  id="helloWorld3" factory-bean="helloWorldFactory2" factory-method="getInstance"></bean>

</beans>
目录
相关文章
|
5天前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
|
5天前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
|
10天前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
45 6
|
26天前
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
32 1
|
18天前
|
XML 安全 Java
Spring Boot中使用MapStruct进行对象映射
本文介绍如何在Spring Boot项目中使用MapStruct进行对象映射,探讨其性能高效、类型安全及易于集成等优势,并详细说明添加MapStruct依赖的步骤。
|
1月前
|
Java Maven Spring
Spring 小案例体验创建对象的快感
本文介绍了如何在IDEA中创建一个Spring项目,包括项目创建、配置pom.xml文件以引入必要的依赖、编写实体类HelloSpring及其配置文件applicationContext.xml,最后通过测试类TestHelloSpring展示如何使用Spring的bean创建对象并调用方法。
37 0
|
1月前
|
前端开发 Java Docker
使用Docker容器化部署Spring Boot应用程序
使用Docker容器化部署Spring Boot应用程序
|
1月前
|
Java Docker 微服务
利用Docker容器化部署Spring Boot应用
利用Docker容器化部署Spring Boot应用
53 0
|
2月前
|
Java 测试技术 Windows
咦!Spring容器里为什么没有我需要的Bean?
【10月更文挑战第11天】项目经理给小菜分配了一个紧急需求,小菜迅速搭建了一个SpringBoot项目并完成了开发。然而,启动测试时发现接口404,原因是控制器包不在默认扫描路径下。通过配置`@ComponentScan`的`basePackages`字段,解决了问题。总结:`@SpringBootApplication`默认只扫描当前包下的组件,需要扫描其他包时需配置`@ComponentScan`。
|
2月前
|
Java Spring
获取spring工厂中bean对象的两种方式
获取spring工厂中bean对象的两种方式
53 1