We have the following example:

@SpringBootApplication
public class In28minutesScopeApplication { private static Logger LOGGER = LoggerFactory.getLogger(In28minutesScopeApplication.class); public static void main(String[] args) {
// Application Context
ApplicationContext applicationContext =
SpringApplication.run(In28minutesScopeApplication.class, args);
PersonDAO personDAO = applicationContext.getBean(PersonDAO.class);
PersonDAO personDAO1 = applicationContext.getBean(PersonDAO.class); LOGGER.info("{}", personDAO);
LOGGER.info("{}", personDAO.getJdbcConnection()); LOGGER.info("{}", personDAO1);
LOGGER.info("{}", personDAO1.getJdbcConnection()); }
}
@Component
public class PersonDAO { @Autowired
JDBCConnection jdbcConnection; public JDBCConnection getJdbcConnection() {
return jdbcConnection;
} public void setJdbcConnection(JDBCConnection jdbcConnection) {
this.jdbcConnection = jdbcConnection;
}
} @Component
public class JDBCConnection {
public JDBCConnection () {
System.out.println("JDBC Connection");
}
}

The idea is to understand in different cases, how those instanse are created.

Currently when running the application, we got:

com.example.in28minutes.scope.PersonDAO@6c61a903
com.example.in28minutes.scope.JDBCConnection@59d4cd39
com.example.in28minutes.scope.PersonDAO@6c61a903
com.example.in28minutes.scope.JDBCConnection@59d4cd39

Each class share the same instanse.

What if we want that 'PersonDAO' using Singleton but JDBCConnection use 'Prototype'?

@Component
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
public class PersonDAO { @Autowired
JDBCConnection jdbcConnection; public JDBCConnection getJdbcConnection() {
return jdbcConnection;
} public void setJdbcConnection(JDBCConnection jdbcConnection) {
this.jdbcConnection = jdbcConnection;
}
} @Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class JDBCConnection {
public JDBCConnection () {
System.out.println("JDBC Connection");
}
}

In the end, we got the same result:

com.example.in28minutes.scope.PersonDAO@14008db3
com.example.in28minutes.scope.JDBCConnection@16aa8654
com.example.in28minutes.scope.PersonDAO@14008db3
com.example.in28minutes.scope.JDBCConnection@16aa8654

If we really want JDBCConnection use a different instance, we can add Proxy to it:

@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class JDBCConnection {
public JDBCConnection () {
System.out.println("JDBC Connection");
}
}

[Spring Boot] Complex Scope Scenarios of a Spring Bean - Mix Prototype and Singleton, ScopeProxy的更多相关文章

  1. Spring Boot入门教程2-1、使用Spring Boot+MyBatis访问数据库(CURD)注解版

    一.前言 什么是MyBatis?MyBatis是目前Java平台最为流行的ORM框架https://baike.baidu.com/item/MyBatis/2824918 本篇开发环境1.操作系统: ...

  2. Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践

    Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践 Spring Boot + Nginx + Mysql 是实际工作中 ...

  3. Spring Boot 2.X(三):使用 Spring MVC + MyBatis + Thymeleaf 开发 web 应用

    前言 Spring MVC 是构建在 Servlet API 上的原生框架,并从一开始就包含在 Spring 框架中.本文主要通过简述 Spring MVC 的架构及分析,并用 Spring Boot ...

  4. Spring、Spring Boot和TestNG测试指南 - 使用Spring Boot Testing工具

    Github地址 前面一个部分讲解了如何使用Spring Testing工具来测试Spring项目,现在我们讲解如何使用Spring Boot Testing工具来测试Spring Boot项目. 在 ...

  5. 曹工说Spring Boot源码(7)-- Spring解析xml文件,到底从中得到了什么(上)

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  6. 曹工说Spring Boot源码(8)-- Spring解析xml文件,到底从中得到了什么(util命名空间)

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  7. 曹工说Spring Boot源码(17)-- Spring从xml文件里到底得到了什么(aop:config完整解析【中】)

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  8. 曹工说Spring Boot源码(27)-- Spring的component-scan,光是include-filter属性的各种配置方式,就够玩半天了.md

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  9. Spring Boot系列(三):Spring Boot整合Mybatis源码解析

    一.Mybatis回顾 1.MyBatis介绍 Mybatis是一个半ORM框架,它使用简单的 XML 或注解用于配置和原始映射,将接口和Java的POJOs(普通的Java 对象)映射成数据库中的记 ...

随机推荐

  1. LOG EXPLORER ApexSQL Log

    http://www.minisoft.cn/ https://www.apexsql.com/sql_tools_log.aspx

  2. Flex Viewer(二) 体系结构

    一.概述 在上一篇文章<深入浅出Flex Viewer (一)——概述>中,笔者对Flex Viewer用于构建以地图为中心的富客户端(RIA)应用的原型的功能和价值做了简要地介绍.在本文 ...

  3. Promise,Generator(生成器),async(异步)函数

    Promise 是什么 Promise是异步编程的一种解决方案.Promise对象表示了异步操作的最终状态(完成或失败)和返回的结果. 其实我们在jQuery的ajax中已经见识了部分Promise的 ...

  4. 为什么MacBook装Windows这么火?

    Mac到底要不要装Windows?一直以来这都是个很有争议性的话题.只要你经常浏览国内一些知名Mac论坛,就会发现那里不仅有各种Mac装Windows教学贴.讨论区,而且时不时还会冒出关于“Mac装不 ...

  5. 在Delphi中操作快捷方式

    快捷方式减少了系统的重复文件,是快速启动程序或打开文件或文件夹的方法,快捷方式对经常使用的程序.文件和文件夹非常有用.在Windows系统中,充斥着大量的快捷方式,那么如何操作这些快捷方式就是一个很头 ...

  6. C#编程(六十四)----------并行扩展

    并行的扩展 扩展1. Parallel的使用: 在Parallel下面有三个常用的方法Invoke,For,ForEach Parallel.Invoke()方法是最简单,最简洁的将串行的代码并行化. ...

  7. BootStrap中的button使用

    原文地址:http://www.phloxblog.in/bootstrap-buttons/#.U5xYso2fclm 站点中事件的触发往往依赖于button或者超链接.因此,button能够觉得是 ...

  8. android Apk打包过程概述_android是如何打包apk的

    流程概述:1.打包资源文件,生成R.java文件2.处理aidl文件,生成相应java 文件3.编译工程源代码,生成相应class 文件4.转换所有class文件,生成classes.dex文件5.打 ...

  9. 以绑定的方式来启动service

    先说下原理,之前我们的启动service就是用startService来启动的,这是显式启动.启动后我们无法得到service中的数据,也无法知道它执行的状态,如果我们要启动它的activity和它建 ...

  10. 低版本系统兼容的ActionBar(三)自定义Item视图+进度条的实现+下拉导航+透明ActionBar

           一.自定义MenuItem的视图 custom_view.xml (就是一个单选按钮) <?xml version="1.0" encoding="u ...