在我们开发中,很常见的会遇见我们自己的对象依赖于Spring容器中的对象,此时需要将我们的对象托管给Spring容器,否则我们将无法使用依赖的对象。

下面介绍一下将我们的对象托管给Spring容器的三种方式。

一、 使用@Bean注解

第一种大家都比较熟悉的方式,采用@Bean注解。这里我们只介绍方式,@Bean注解的用法不做赘述。

public class Cat {
}
@Configuration
public class AppConfig {@Bean(name = "cat")public Cat configureCat() {return new Cat();}
}
//测试类
public class Test{public static void main(String[] args) {AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);System.out.println(ac.getBean("cat"));}
}

运行结果:

//这里因为开辟内存和包配置的原因,打印内容不会完全一致,如果能正常打印对象,则代表成功。
com.evan.app.Cat@133e16fd

二、使用FactoryBean

@ComponentScan("com.*")
public class AppConfig {
}
public class Dog {
}
@Component
public class AnimalFactoryBean implements FactoryBean {@Overridepublic Object getObject() throws Exception {return new Dog();}@Overridepublic Class<?> getObjectType() {return Dog.class;}
}
//测试类
public class Test {public static void main(String[] args) {AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);//返回要托管给Spring容器的Dog对象System.out.println(ac.getBean("animalFactoryBean"));//因为AnimalFactoryBean本身也是个Bean,加上&符号,就是返回的AnimalFactoryBeanSystem.out.println(ac.getBean("&animalFactoryBean"));}
}

运行结果:

//这里因为开辟内存和包配置的原因,打印内容不会完全一致,如果能正常打印对象,则代表成功。
com.evan.app.Dog@38089a5a
com.evan.service.AnimalFactoryBean@30e868be

三、使用registerSingleton()

但是这种方法,比较鸡肋:

  • 只适用于如果有两个对象A和B。A对象依赖于B对象。你需要把B对象装配进A。即在A中 @Autowired B。

registerSingleton()存在问题详细介绍。请参考我的这篇文章:=>关于registerSingleton()方法的缺点

//你可以把EvanService当成是与第三方应用交互产生的对象。
public class EvanService {@AutowiredTomService tomService;public TomService showTomServiceResult() {return tomService;}
}
@Component
public class PersonService {@AutowiredEvanService evanService;public void showEvanServiceResult() {System.out.println(evanService);}
}
public class Test {public static void main(String[] args) {AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext();EvanService evanService = new EvanService();ac.getBeanFactory().registerSingleton("evanService",evanService);//将扫描到的类注册到spring容器ac.register(AppConfig.class);//刷新容器,完成bean的实例化ac.refresh();ac.getBean(PersonService.class).showEvanServiceResult();}}

运行结果:

//这里因为开辟内存和包配置的原因,打印内容不会完全一致,如果能正常打印对象,则代表成功。
com.evan.service.EvanService@7ae42ce3

如何把对象放入spring容器相关推荐

  1. 将Bean放入Spring容器中的五种方式

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/weixin_43741092/ article/details/120176466 将bean放 ...

  2. SpringBoot教程(十一)——将Bean放入Spring容器中的五种方式

    将bean放入Spring容器中有哪些方式? 我们知道平时在开发中使用Spring的时候,都是将对象交由Spring去管理,那么将一个对象加入到Spring容器中,有哪些方式呢,下面我就来总结一下 1 ...

  3. 将 Bean 放入 Spring 容器中的方式

    文章目录 将 Bean 放入 Spring 容器中的方式 1.@Configuration + @Bean 2.@Componet + @ComponentScan 3.@Import注解导入 3.1 ...

  4. Bean放入Spring容器,你知道几种方式?

    作者:三尺微命  一介书生 来源:blog.csdn.net/weixin_43741092/article/details/120176466 我们知道平时在开发中使用Spring的时候,都是将对象 ...

  5. 把自定义的对象(或第三方对象) 放到Spring 容器里

    自定义对象放入到spring容器内 前言 三种方法 方法一:FactoryBean FactoryBean 介绍 FactoryBean将自定义对象放入Spring容器 方法二:@Bean 方法三:r ...

  6. python将对象放入列表根据某个属性排升序_对python 对象列表根据某个属性排序的方法...

    对于一个已有的python list, 里面的内容是一些对象,这些对象有一些相同的属性值, 在一些特定的情况下,需要自己选择特定的排序,也就是根据某一个具体的属性来排序,在网上找了下资料,一般来说有两 ...

  7. python将对象放入列表根据某个属性排升序_python实现对象列表根据某个属性排序的方法详解...

    本文实例讲述了python实现对象列表根据某个属性排序的方法.分享给大家供大家参考,具体如下: 对于一个已有的python list, 里面的内容是一些对象,这些对象有一些相同的属性值, 在一些特定的 ...

  8. python将对象放入列表_将所有python-rom对象放入列表

    我正在使用烧瓶和Redis.我决定尝试使用rom redis orm(http://pythonhosted.org/rom/)来管理一些较为复杂的数据结构.我有一个对象列表,可以说: urls = ...

  9. java把对象放入数组_如何将对象添加到数组

    使用Array.push()将任何东西放入数组. var a=[], b={}; a.push(b); // a[0] === b; 有关数组的更多信息 一次添加多个项目 var x = ['a']; ...

最新文章

  1. 微信小程序把繁琐的判断用Js简单的解决
  2. 如何在 Linux 下乾坤大挪移?
  3. 揭开知识库问答KB-QA的面纱2·语义解析篇
  4. 【学术相关】近5年十大最具影响力的 AI 论文,你知道几个?
  5. Altera的几个常用的Synthesis attributes(转载)
  6. 关掉占用 某端口的进程
  7. php console postman,postman内置脚本说明
  8. 基于JAVA+SpringMVC+MYSQL的宠物管理系统
  9. talib python文档_talib 中文文档(三):talib 方法大全
  10. 数据分析sql面试必会6题经典_面试准备:数据库常见面试题汇总
  11. lumaQQ.net 学习分析
  12. (Word论文插入高清图片)软件设置教程
  13. Android 反编译之smail
  14. 求取scores最近邻的方法之二开始新的实践Chorus
  15. 平衡树--替罪羊树 *
  16. 开源机器人库orocos KDL 学习笔记(二):Geometric
  17. 《.NET程序员面试秘籍》读书笔记
  18. 控制台调出Servers
  19. 52PJ官网 基础教程第二课的分享(OD)_Part2
  20. WGS84与GCJ02、BD09经纬度坐标转换介绍

热门文章

  1. 空指针异常Exception in thread “main“ java.lang.NullPointerException
  2. css3语法动画实现移入移出动画
  3. ps中的风,浮雕,扩散,拼贴,凸出,表面模糊,动感模糊,高斯模糊,径向模糊,平均,特殊模糊,形状模糊,波浪,波纹,极坐标
  4. 最易懂的闪电网络Lightning Network的简介
  5. 海拉与北汽合资工厂天津启动,我们还一起聊了聊自动驾驶下车灯的智能化未来...
  6. bat/cmd批处理程序设计教程
  7. Docker 容器安全的“终极武器”——AIM
  8. 小黄车注定会黄......
  9. openfire用户验证知多少
  10. Vue2.x的基础入门