把自定义的对象(或第三方对象) 放到Spring 容器里
自定义对象放入到spring容器内
- 前言
- 三种方法
- 方法一:FactoryBean
- FactoryBean 介绍
- FactoryBean将自定义对象放入Spring容器
- 方法二:@Bean
- 方法三:registerSingletion
前言
最近看了一位大神的教学视频,目前感觉挺有道理的,写个记录吧 ,防止忘记。
了解如何把自定义的对象(或第三方对象) 放到Spring 容器里
涉及的业务场景有:
- spring 整合mybatis、
- 读取配置动态注册多个数据源 循环注册多个DataSource到spring容器内。
FactoryBean 工厂bean
https://blog.csdn.net/zknxx/article/details/79572387
三种方法
- FactoryBean
- @Bean
- 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 容器里相关推荐
- 操作系统怎么把文件放到docker容器里
操作系统怎么把文件放到docker容器里 完美拷贝本地文件到docker容器: (1)查找容器 docker ps -a (2)确定我们的容器名,并获取容器长ID docker inspect -f ...
- java 从一个容器获取对象,Java 如何实现从spring容器中获取注入的bean对象
Java 如何实现从spring容器中获取注入的bean对象 发布时间:2020-11-03 15:27:37 来源:亿速云 阅读:70 作者:Leah 这期内容当中小编将会给大家带来有关Java 如 ...
- FastJson序列化Json自定义返回字段,普通类从spring容器中获取bean
前言: 数据库的字段比如:price:1 ,返回需要price:1元. 这时两种途径修改: ① 比如sql中修改或者是在实体类转json前遍历修改. ②返回json,序列化时候修改.用到的是fastj ...
- 怎么把文件放到docker容器里
1.查找所有容器id:docker ps -a 2.查找容器长ID:docker inspect -f '{{.ID}}' tomcat-container-id 3.拷贝本地文件到容器: 命令:do ...
- spring容器管理对象和new对象
本文来说下spring容器管理对象和new对象之间的区别与联系 文章目录 流程图说明Spring注入的对象和new的对象区别 普通的创建new对象 交由spring ioc容器进行管理 Spring的 ...
- jQuery学习笔记系列(一)——入口函数,jQuery对象和DOM对象,jQuery选择器、样式操作、效果(显示隐藏、滑入滑出、淡入淡出、自定义动画、停止动画队列)
day01 - jQuery 学习目标: 能够说出什么是 jQuery 能够说出 jQuery 的优点 能够简单使用 jQuery 能够说出 DOM 对象和 jQuery 对象的区别 能够写出常用的 ...
- JS-面向对象-原形对象链(自定义对象实例原形对象链 / 本地对象原形对象链)
自定义对象实例原型对象链 <!DOCTYPE html> <html lang="zh"> <head><meta charset=&qu ...
- jsp 将java对象转json对象 (自定义EL函数)
功能:在 jsp 页面将 java对象 转换为 json对象 (使用自定义EL函数实现) 步骤: 1. 创建 JSP EL 工具类 2. 创建 tld 文件 3. 配置 web.xml 文件 4. 完 ...
- js中自定义对象、json对象、json字符串、普通js对象 --js学习那本书上的
4.7 自定义对象 JS除了内置对象之外,还允许我们程序自己定义属于我们自己的对象,在JS中自定义对象的方式有2种:通过构造器创建对象,通过初始化器创建对象. 4.7.1 构造器创建对象(原生JS对象 ...
最新文章
- Python 使用 Flask框架记录
- 华为平板电脑_当5G遇上平板电脑,华为MatePad Pro 5G带来了什么?
- 华东师范大学2019年高等代数考研试题
- 【Android 逆向】Android 进程注入工具开发 ( 系统调用 | Android NDK 中的系统调用示例 )
- 交互原型细节提升之路
- python链接hbase模块_HBase实战(1):使用Python连接Hbase数据库
- 怎么计算python程序执行时间_【华为云技术分享】计算python程序执行时间
- 计算机技术分,计算机技术专业那么多,你分得清吗?
- 前端学习(1732):前端系列javascript之插入内容
- 太可怕!儿童智能手表竟成偷窥器,315重锤个人隐私泄露
- Topic model相关文章总结
- MyBatis 二级缓存
- go Mutex (互斥锁)和RWMutex(读写锁)
- GitHub标星7700:Python从新手到大师,只要100天
- 读书:鲁迅的《呐喊》和《彷徨》
- org.apache.commons.fileupload.DiskFileUpload1
- 基于SSM实现微博系统
- tippy.js悬浮提示工具插件
- matlab使用矩形窗设计一个具有线性相位的低通数字滤波器,matlab结合矩形窗设计fir滤波器.doc...
- 计划任务和周期任务mail,at,batch,atq, atrm, cron, crontab
热门文章
- 阿里巴巴客户端开发工程师offer面经
- java 远程视频_使用AVURLAsset播放远程视频文件
- IDEA中解决中文乱码问题的方法
- HTML基本标签讲解及使用
- 数据结构视频教程 -《数据结构深度实战专题班 C语言版(国嵌 唐老师主讲)(非常犀利)》
- 使用documentElement.classList.add()给元素添加动画或样式
- 为你唱首歌,痛仰乐队,间奏谱,自扒
- Go实战--golang中操作PDF(rsc.io/pdf、jung-kurt/gofpdf、signintech/gopdf)
- lisp批量生成轴线_已知大量坐标和直径,请问如何以用autocad 的lisp 以坐标为球心批量画球...
- 团队作业5——测试与发布(alpha阶段)