• Singleton and Prototype Bean Scope in Spring


    Scope描述的是Spring容器如何新建Bean的实例的。

    1> Singleton: 一个Spring容器只有一个Bean的实例,此为Spring的默认配置,全容器共享一个实例。

    2> Prototype: 每次调用都新建一个Bean的实例。

    3> Request: Web 项目中,给每一个 http request 新建一个Bean实例。

    4> Session: Web项目中,给每一个 http session 新建一个Bean实例。

    5> GlobalSession: 这个只在portal应用中有用,给每一个global http session 新建一个Bean实例。

    But ....这里要说的是Singleton 和 Prototype的区别:

    1.新建Spring Boot项目,有如下类:

    2. POM 文件

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.study</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>demo</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.8.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    
    </project>
    package com.sbia.ch2;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @ComponentScan("com.sbia.ch2")
    public class ConfigurationClass {
    
    }
    package com.sbia.ch2;
    
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Service;
    
    @Service
    @Scope("prototype")
    public class DemoPrototypeService {
    
    }
    package com.sbia.ch2;
    
    import org.springframework.stereotype.Service;
    
    @Service// 默认为 Singleton,相当于@Scope("singleton")
    public class DemoSingletonService {
    
    }
    package com.sbia.ch2;
    
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    public class Main {
    
        public static void main(String[] args) {
    
            AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
            context.register(ConfigurationClass.class);
            context.refresh();
            
            DemoSingletonService s1 = context.getBean(DemoSingletonService.class);
            DemoSingletonService s2 = context.getBean(DemoSingletonService.class);
            
            DemoPrototypeService p1 = context.getBean(DemoPrototypeService.class);
            DemoPrototypeService p2 = context.getBean(DemoPrototypeService.class);
            
            
            System.out.println("S1 与 S2是否相等: " + s1.equals(s2));
            System.out.println("P1 与P2是否相等: " + p1.equals(p2));
            
            
        }
    
    }

    Run Main.class as Java Application,get the result like below:

  • 相关阅读:
    Python自动化交易学习笔记(九)——将添加佣金数据,来使回测更逼近与真实交易。
    python自动化交易学习笔记五-Demo8-策略已经设置了买入条件-设置卖出条件
    python自动化交易学习笔记(四)第一个策略回测程序Demo7(添加买入条件-当股价连续下跌2天后买入)
    python量化交易学习笔记(三)——第一个策略回测程序Demo6
    取sql server 图片二进制流
    JDBC连接sql取数据
    量化交易学习笔记(二)-实例化Cerebro引擎-代理已经手握一笔资金准备进行交易
    maven本地化jbarcode-0.2.8.jar
    量化自动化交易python学习笔记之(一)BaoStock使用A股K线数据股票代码sh.60000,四年历史数据,用于后期追溯测试和策略可行性
    Angularjs插件ui-select的使用方法
  • 原文地址:https://www.cnblogs.com/luffystory/p/8870196.html
Copyright © 2020-2023  润新知