自定义对象放入到spring容器内

  • 前言
    • 三种方法
    • 方法一:FactoryBean
      • FactoryBean 介绍
      • FactoryBean将自定义对象放入Spring容器
    • 方法二:@Bean
    • 方法三:registerSingletion

前言

最近看了一位大神的教学视频,目前感觉挺有道理的,写个记录吧 ,防止忘记。
了解如何把自定义的对象(或第三方对象) 放到Spring 容器里
涉及的业务场景有:

  • spring 整合mybatis、
  • 读取配置动态注册多个数据源 循环注册多个DataSource到spring容器内。

FactoryBean 工厂bean
https://blog.csdn.net/zknxx/article/details/79572387

三种方法

  1. FactoryBean
  2. @Bean
  3. API ac.getBeanFactory().registerSingletion

方法一:FactoryBean

FactoryBean 介绍

在我们的开发工作中应该都见过或使用过FactoryBean这个类,也许你会看成了BeanFactory这个类。FactoryBean和BeanFactory虽然长的很像,但是他们的作用确实完全不像。这里你可以想象一下,你会在什么样的场景下使用FactoryBean这个接口?FactoryBean是一个工厂Bean,可以生成某一个类型Bean实例,它最大的一个作用是:可以让我们自定义Bean的创建过程

https://blog.csdn.net/zknxx/article/details/79572387

FactoryBean将自定义对象放入Spring容器

javaConfig

@Configuration
@ComponentScan("com.test.module.aatest") // 要扫描的类包名
public class Appconfig {}
@Component
public class ZiDingYiFactoryBean implements FactoryBean {@Overridepublic Object getObject() throws Exception { // 返回一个Beanreturn new A();}@Overridepublic Class<?> getObjectType() {return A.class;}@Overridepublic boolean isSingleton() {return false;}
public class ServiceTest {public static void main(String[] args) {/*// xml  模式ApplicationContext appContext  = new ClassPathXmlApplicationContext("com/deppon/nhr/module/cops/server/META-INF/appointtest.xml");IndexService indexService = (IndexService) appContext.getBean("indexService");indexService.getServiceBean();System.out.println(appContext.getBean("ziDingYiFactoryBean"));// 期待的打印返回的  ziDingYiFactoryBean 对象 ,但是返回 为 ZiDingYiFactoryBean 类的getObject返回的new A();System.out.println(appContext.getBean("&ziDingYiFactoryBean"));*/// java 注解AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext();ac.register(Appconfig.class);ac.refresh();System.out.println(ac.getBean("ziDingYiFactoryBean")); // 打印出来的对象是A对象 (代码new A() 生成的)}
}

方法二:@Bean

   @Beanpublic  DataSource getDataSource(){DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();// 这里写个大概 ,简单说明下问题driverManagerDataSource.setDriverClassName("com.mysql....");return driverManagerDataSource;}

方法三:registerSingletion

public class ServiceTest {public static void main(String[] args) {// 先创建A对象,然后把A对象放到容器内  容器生成的bean 可以@Autowired A对象  // 但是 A对象无法 把容器内的bean 作为属性 A a = new A();AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext();ac.getBeanFactory().registerSingleton("a",a);ac.register(Appconfig.class);ac.refresh();}
}

调换对象生成位置

public class ServiceTest {public static void main(String[] args) {AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(Appconfig.class);A a = new A();IndexService indexService = (IndexService) appContext.getBean("indexService");a.setService(indexService );// 先 初始化spring 容器 , 缺点是  spring容器初始化时无法使用 A对象ac.getBeanFactory().registerSingleton("a",a);ac.refresh();}
}

把自定义的对象(或第三方对象) 放到Spring 容器里相关推荐

  1. 操作系统怎么把文件放到docker容器里

    操作系统怎么把文件放到docker容器里 完美拷贝本地文件到docker容器: (1)查找容器 docker ps -a (2)确定我们的容器名,并获取容器长ID docker inspect -f ...

  2. java 从一个容器获取对象,Java 如何实现从spring容器中获取注入的bean对象

    Java 如何实现从spring容器中获取注入的bean对象 发布时间:2020-11-03 15:27:37 来源:亿速云 阅读:70 作者:Leah 这期内容当中小编将会给大家带来有关Java 如 ...

  3. FastJson序列化Json自定义返回字段,普通类从spring容器中获取bean

    前言: 数据库的字段比如:price:1 ,返回需要price:1元. 这时两种途径修改: ① 比如sql中修改或者是在实体类转json前遍历修改. ②返回json,序列化时候修改.用到的是fastj ...

  4. 怎么把文件放到docker容器里

    1.查找所有容器id:docker ps -a 2.查找容器长ID:docker inspect -f '{{.ID}}' tomcat-container-id 3.拷贝本地文件到容器: 命令:do ...

  5. spring容器管理对象和new对象

    本文来说下spring容器管理对象和new对象之间的区别与联系 文章目录 流程图说明Spring注入的对象和new的对象区别 普通的创建new对象 交由spring ioc容器进行管理 Spring的 ...

  6. jQuery学习笔记系列(一)——入口函数,jQuery对象和DOM对象,jQuery选择器、样式操作、效果(显示隐藏、滑入滑出、淡入淡出、自定义动画、停止动画队列)

    day01 - jQuery 学习目标: 能够说出什么是 jQuery 能够说出 jQuery 的优点 能够简单使用 jQuery 能够说出 DOM 对象和 jQuery 对象的区别 能够写出常用的 ...

  7. JS-面向对象-原形对象链(自定义对象实例原形对象链 / 本地对象原形对象链)

    自定义对象实例原型对象链 <!DOCTYPE html> <html lang="zh"> <head><meta charset=&qu ...

  8. jsp 将java对象转json对象 (自定义EL函数)

    功能:在 jsp 页面将 java对象 转换为 json对象 (使用自定义EL函数实现) 步骤: 1. 创建 JSP EL 工具类 2. 创建 tld 文件 3. 配置 web.xml 文件 4. 完 ...

  9. js中自定义对象、json对象、json字符串、普通js对象 --js学习那本书上的

    4.7 自定义对象 JS除了内置对象之外,还允许我们程序自己定义属于我们自己的对象,在JS中自定义对象的方式有2种:通过构造器创建对象,通过初始化器创建对象. 4.7.1 构造器创建对象(原生JS对象 ...

最新文章

  1. Python 使用 Flask框架记录
  2. 华为平板电脑_当5G遇上平板电脑,华为MatePad Pro 5G带来了什么?
  3. 华东师范大学2019年高等代数考研试题
  4. 【Android 逆向】Android 进程注入工具开发 ( 系统调用 | Android NDK 中的系统调用示例 )
  5. 交互原型细节提升之路
  6. python链接hbase模块_HBase实战(1):使用Python连接Hbase数据库
  7. 怎么计算python程序执行时间_【华为云技术分享】计算python程序执行时间
  8. 计算机技术分,计算机技术专业那么多,你分得清吗?
  9. 前端学习(1732):前端系列javascript之插入内容
  10. 太可怕!儿童智能手表竟成偷窥器,315重锤个人隐私泄露
  11. Topic model相关文章总结
  12. MyBatis 二级缓存
  13. go Mutex (互斥锁)和RWMutex(读写锁)
  14. GitHub标星7700:Python从新手到大师,只要100天
  15. 读书:鲁迅的《呐喊》和《彷徨》
  16. org.apache.commons.fileupload.DiskFileUpload1
  17. 基于SSM实现微博系统
  18. tippy.js悬浮提示工具插件
  19. matlab使用矩形窗设计一个具有线性相位的低通数字滤波器,matlab结合矩形窗设计fir滤波器.doc...
  20. 计划任务和周期任务mail,at,batch,atq, atrm, cron, crontab

热门文章

  1. 阿里巴巴客户端开发工程师offer面经
  2. java 远程视频_使用AVURLAsset播放远程视频文件
  3. IDEA中解决中文乱码问题的方法
  4. HTML基本标签讲解及使用
  5. 数据结构视频教程 -《数据结构深度实战专题班 C语言版(国嵌 唐老师主讲)(非常犀利)》
  6. 使用documentElement.classList.add()给元素添加动画或样式
  7. 为你唱首歌,痛仰乐队,间奏谱,自扒
  8. Go实战--golang中操作PDF(rsc.io/pdf、jung-kurt/gofpdf、signintech/gopdf)
  9. lisp批量生成轴线_已知大量坐标和直径,请问如何以用autocad 的lisp 以坐标为球心批量画球...
  10. 团队作业5——测试与发布(alpha阶段)