首页
学习
活动
专区
圈层
工具
发布

如何在非Spring容器管理的类中注入获取 Spring容器中的 Bean?

如何在非Spring容器管理的类中注入/获取 Spring容器中的 Bean? 前言:此文仅限新手入行,大佬回避。...@Autowired注解将其他被Spring容器管理的类注入进来。...什么是被Spring容器管理的类? 只要是被称之为Bean的类就是被Spring容器管理的类。...不了解的可以看看小简写的这一篇: 将Bean交给Spring容器管理的几种方式 在非Spring管理的类中怎么办? 有时候我们就是需要在非Spring管理的类中使用Bean怎么办呢?...比如我这一篇: 踩坑篇之WebSocket实现类中无法使用@Autowired注入对象 解决方法 我们定义一个上下文类,在Spring将Bean全部扫描完成后,我们去使用类去实现ApplicationContextAware

6.1K40

spring:如何用代码动态向容器中添加或移除Bean ?

先来看一张类图: 有一个业务接口IFoo,提供了二个实现类:FooA及FooB,默认情况下,FooA使用@Component由Spring自动装配,如果出于某种原因,在运行时需要将IFoo的实现,则FooA...换成FooB,可以用代码动态先将FooA的实例从容器中删除,然后再向容器中注入FooB的实例,代码如下: 1、IFoo接口: package yjmyzz; import org.springframework.beans.factory.DisposableBean...org.springframework.context.support.AbstractRefreshableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * 演示在运行时,动态向容器中添加...System.out.println("------------"); showAllBeans(ctx); ctx.close(); } /** * 向容器中动态添加...beanDefReg.registerBeanDefinition(beanName, beanDef); } } /** * 从容器中移除

6.2K100
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Spring 中的 @Import 注解及向容器中添加 Bean 的几种方式

    这次介绍一下 Spring 中的一个重要的注解 @Import 以及向容器中添加 Bean 的几种方式 ,该注解在 SpringBoot 自动转配中起到重要的作用。...Spring 版本 5.1.2.RELEASE 一、该注解的作用 先来回想一下我们将组件注册到容器中的几种方法: 使用 包扫描+注解标识,但是这种方式局限于自己写的类,第三方包一般不能修改; 使用...ImportSelector:返回需要导入的组件的全类名数组,组件名为全类名; ImportBeanDefinitionRegistrar:手动注册 Bean 到容器中,可以自定义组件名。...使用 Spring 提供的 FactoryBean (工厂 Bean 的方式)。...当前类的注解信息 * @param registry BeanDefinition 注册类: 调用它的 registerBeanDefinition 方法将需要添加到容器中的

    2.2K30

    如何在 Spring 中解决 bean 的循环依赖

    引言 在 Spring 中,bean 往往不会独立存在,bean 的相互依赖是极为常见的。...3.4 使用 @PostConstruct 注解 @PostConstruct 注解会在 Spring 容器初始化的时候被调用,我们可以在这个过程中,将当前对象的引用传递给我们所依赖的对象,从而避免依赖的对象从...上下文初始化 bean 如果一个 Bean 从 Spring 上下文中获取另一个 Bean,我们就可以手动去设置 Bean 的依赖项,避免 Spring 解析依赖项的过程中产生的循环依赖。...总结 本文介绍了在 Spring 使用过程中,避免循环依赖的处理方法。这些方法通过改变 bean 对象的实例化、初始化的时机,避免了循环依赖的产生,它们之间有着微妙的差别。...如果在 Spring 使用过程中,你并不关注于 Bean 对象的实例化和初始化的具体细节,那么,使用 setter 注入的方式是首选的解决方案。

    4.1K20

    Spring 容器中获取 Bean 实例的主要方式

    继承自抽象类ApplicationObjectSupport 可以继承抽象类ApplicationObjectSupport并将自己继承的类注入到Spring容器中,示例代码如下: /** * 方法三...return super.getApplicationContext().getBean(beanName); } } 最后莫忘了将Bean注入到Spring容器中,通过注解...继承自抽象类WebApplicationObjectSupport 可以继承抽象类WebApplicationObjectSupport并将自己继承的类注入到Spring容器中,示例代码如下: /**...* 方法四:继承WebApplicationObjectSupport来获取ApplicationContext, * 注意:需要把自己继承的类注入到Spring,同时需要添加@WebAppConfiguration...return super.getWebApplicationContext().getBean(beanName); } } 最后莫忘了将Bean注入到Spring容器中,

    80220

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

    来源:blog.csdn.net/weixin_43741092/article/details/120176466/ 将bean放入Spring容器中有哪些方式?...我们知道平时在开发中使用Spring的时候,都是将对象交由Spring去管理,那么将一个对象加入到Spring容器中,有哪些方式呢,下面我就来总结一下 1、@Configuration + @Bean...这种方式其实,在上一篇文章已经介绍过了,也是我们最常用的一种方式,@Configuration用来声明一个配置类,然后使用 @Bean 注解,用于声明一个bean,将其加入到Spring容器中。...,然后加至容器中。...加入到容器中,注意,我没有向容器中注入 Person, 而是直接注入的 PersonFactoryBean 然后从容器中拿Person这个类型的bean,成功运行。

    85320

    SpringBoot 之 普通类获取Spring容器中的bean

    容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,想直接使用spring提供的其他对象或者说有一些不需要交给spring管理,但是需要用到spring里的一些对象...但是往往我们所做的都是Web Application,这时我们启动spring容器是通过在web.xml文件中配置,这样就不适合使用上面的方式在普通类去获取对象了,因为这样做就相当于加载了两次spring...容器,而我们想是否可以通过在启动web服务器的时候,就把Application放在某一个类中,我们通过这个类在获取,这样就可以在普通类获取spring bean对象了,让我们接着往下看 普通类调用Spring...为了测试,我们再启动的时候先通过代码方式给spring容器中注入一个bean,入下所示 ?...然后我们编写测试controller,并从刚才写的springutil中获取这个bean ?

    4.6K10

    工具类如何获取到 Spring 容器中的 Bean?

    Aware 接口 小伙伴们知道,Spring 容器最大的特点在于所有的 Bean 对于 Spring 容器的存在是没有意识的,因此我们常说理论上你可以无缝将 Spring 容器切换为其他容器(然而在现实世界中...当然这只是一个理论,在实际开发中,我们往往要用到 Spring 容器为我们提供的诸多资源,例如想要获取到容器中的配置、获取到容器中的 Bean 等等。...在这种情况下,就需要 Spring 容器中的 Bean 真正的意识到 Spring 容器的存在,才能要到这些东西,那么如何让一个 Bean 意识到 Spring 容器的存在呢?...LoadTimeWeaverAware:实现该接口的对象可以获取到一个 LoadTimeWeaver 对象,通过该对象可以获取加载 Spring Bean 时织入的第三方模块,如 AspectJ 等。...容器所管理的 Bean 中,获取到 Spring 容器中的 Bean 了。

    1.9K10

    Quartz任务中调用Spring容器中bean及动态调度任务-SchedulerFactoryBean「建议收藏」

    Spring为创建Quartz的Scheduler、Trigger和JobDetail提供了便利的FactoryBean类,以便能够在Spring 容器中享受注入的好处。...此外Spring还提供了一些便利工具类直接将Spring中的Bean包装成合法的任务。Spring进一步降低了使用Quartz的难度,能以更具Spring风格的方式使用Quartz。...以便在Spring容器启动后,Scheduler自动开始工作,而在Spring容器关闭前,自动关闭Scheduler。...spring容器中的bean只能放到SchedulerContext里面传入job中。...如果并非马上拥有需要执行的任务,可通过startupDelay属性让Scheduler延迟一小段时间后启动,以便让Spring能够更快初始化容器中剩余的Bean; SchedulerFactoryBean

    1.6K20

    【小家Spring】Spring注解驱动开发---Spring Ioc容器中Bean的生命周期详解(BeanPostProcessor解析)

    我们可以自定义初始化和销毁方法;容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法 单实例:在容器启动的时候创建对象 多实例:容器不会管理这个bean;容器不会调用销毁方法; Bean...它提供了功能相当于我们可以在Bean放进Ioc容器前后做些事情,比如包装、生成代理对象等一般都是通过此接口实现的。...【" + bean + "】"); return bean; } } 需要注意的是:实现这个接口的类,需要放入IOC容器中才会生效 BeanPostProcessor总结...如 1.InitDestroyAnnotationBeanPostProcessor完成@PreDestroy注解的销毁方法调用 Spring内置的一些BeanPostProcessor Spring...BeanPostProcessor的执行顺序 如果使用BeanFactory实现,非ApplicationContext实现,BeanPostProcessor执行顺序就是添加顺序。

    1K30

    头条一面:Spring IOC容器中只存放单例Bean吗?

    问题: 正如题目所说:Spring IOC容器中只存放单例Bean吗? 先给出结论吧 这里,想来想去,我还是直接了当的说吧:是的,Spring IOC容器中只存放单例Bean。...接下来,且听我细细道来为哈只存放单例Bean。 问题分析 既然,我们已经知道Spring IOC容器中只存放单例Bean,但是在面试的时候不能只说这一句话呀,否则,面试官就会把你直接Pass掉。为啥?...所以,除了答对结论之外,还要清晰的说出Spring IOC容器中为啥只存放单例Bean。 好了,我们正式开始分析这个问题。...("给容器中添加Person..."); return new Person("张三", 25); } } 接下来,再编写一个main方法用于启动测试程序。...说明多例作用域下,每次都会创建一个bean实例并返回。 综上所述:Spring IOC容器中只存放单例Bean。

    1.3K20

    【小家Spring】Spring环境中(含Boot环境),web组件(Servlet、Filter)内注入使用Spring容器里的Bean

    组件的加载顺序应该是: ServletContext -> Listener -> Filter -> Servlet 由于Spring bean的初始化是在listener中声明的,因此Filter时...所以根本原因是: 过滤器是servlet规范中定义的,并不归Spring容器管理,也无法直接注入spring中的Bean 有了这个解释,小伙伴们就很好理解为何你在Spring Boot环境下使用Filter...时,都可以直接@Autowired注入Service了,因为Boot环境下,三大组件都是以Spring Bean的形式存在于容器内的~ 解决方案: 问题就来了,现在我的项目较老,就是传统的Spring环境...容器里是存在HelloFilter这个Bean的 这样是不好使的,因为这样子在Spring容器里的Filter和Servlet容器里的不是同一个Bean,没用的。...这样如果filter中需要一些Spring容器的实例,可以通过spring直接注入 默认情况下, Spring 会到 IOC 容器中查找和 对应的 filter bean.

    2.7K21

    你担心spring容器中scope为prototype的bean太大内存溢出吗?

    出假设 之前一直担心spring的scope为prototype的bean在一些高并发的场景下,吃不消吗,甚至会内存溢出,这样的担心不是没有道理的,(以下是假设)因为这个类型的bean每一次都会产生新的实例...因为在这段执行任务的期间,有多个Bean被初始化了,内存会不断增加。...测试程序  UserLogic.java @Component // 保证singleton每次调用userLogic的时候都是最新的userLogic, // 如果没有配合上面的使用,获取这个bean...的时候需要根据beanName获取,beanName需要加上前缀scopedTarget // 如getBean(scopedTarget.userLogic) @org.springframework.context.annotation.Scope...        }         while(true){} 果然报错  Caused by: java.lang.OutOfMemoryError: Java heap space 只不过这些bean

    1.3K20

    了解这些,你就可以在Spring启动时为所欲为了

    但 Spring 已经是 Java Web 领域使用最多,应用最广泛的 Java 框架。 此文将专注讲解如何在 Spring 容器启动时实现我们自己想要实现的逻辑。...@PostConstruct 在 Spring 中,我们可以使用@PostConstruct在 Bean 初始化之后实现相应的初始化逻辑,@PostConstruct修饰的方法将在 Bean 初始化完成之后执行...,此时 Bean 的依赖也已经注入完成,因此可以在方法中调用注入的依赖 Bean。...Spring 有一套完整的事件机制,在 Spring 启动的时候,Spring 容器本身预设了很多事件,在 Spring 初始化的整个过程中在相应的节点触发相应的事件,我们可以通过监听这些事件来实现我们的初始化逻辑...上面我们在成员变量上通过@Autoware注解注入依赖 Bean,但是在 Bean 的构造函数函数中却无法使用到注入的 Bean(因为 Bean 还未注入),其实我们也是使用 Spring 的构造函数注入方式

    1.3K30
    领券