首页 > Python资料 博客日记
Spring容器上下文
2024-10-16 00:00:08Python资料围观59次
目录
一 什么是spring容器上下文
你可以把它理解成就是spring容器,它主要用于管理Bean对象,包括bean的生命周期,bean的注入等等。
二 spring容器上下文可以做什么
我们刚刚上面说spring容器上下文主要就是对bean对象的管理,那么也就是说我们可以通过这个spring容器上下文得到各种bean对象。
可能你会说,得到bean对象不是很简单嘛?直接使用@Autwrie注解注入就可以得到bean对象了。
你说的对,但是通过注解注入bean对象有一个前提,就是你本身这个类也要交给spring容器管理,这样你才可以通过@Autwrie注解注入bean对象。但是有时候,不一定所有的类对象都要交给spring容器,那么如果没有交给spring管理的类想要从spring容器中的到bean对象该怎么做呢?这时候就可以通过这个spring容器上下文来得到我想要的任何bean对象了。
三 如何使用
1.实现ApplicationContextAware接口
就像我们上面说的,我们需要得到bean对象,而bean对象都有spring容器上下文管理,所以我们需要先得到spring容器上下文对象。
我们需要定义一个类,实现这个接口,因为这个接口有一个
setApplicationContext(ApplicationContext applicationContext)方法,这个方法里面的参数ApplicationContext对象就是spring容器上下文对象,这个方法不需要我们手动调用,它是当你启动spring后,只要你的类实现了ApplicationContextAware接口,它就会自动调用这个方法,同时帮你ApplicationContext对象当作参数传到这个方法。
那么你就相当于得到到spring容器上下文对象啦,这个时候再调用spring容器上下文对象中的方法就可以得到bean对象啦。
这里提供一个代码示例:
package com.feisi.test.applicationContext; import org.springframework.beans.BeansException; //import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; import java.lang.annotation.Annotation; import java.sql.SQLOutput; import java.util.Map; @Component public class ApplicationContextHolder implements ApplicationContextAware { private static ApplicationContext CONTEXT ; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { System.out.println("得到applicationContext容器:"+applicationContext); CONTEXT = applicationContext ; } /** * 从ApplicationContext容器中获取对应的Bean对象 */ public static <T> T getBean(Class<T> clazz){ return CONTEXT.getBean(clazz) ; } /** * 根据bean的name获取bean对象 */ public static Object getBean(String name) { return CONTEXT.getBean(name); } /** * 根据bean的name和类型获取bean对象 */ public static <T> T getBean(String name, Class<T> clazz) { return CONTEXT.getBean(name, clazz); } /** * 按类型获取一组ioc容器bean。 */ public static <T> Map<String, T> getBeansOfType(Class<T> clazz) { return CONTEXT.getBeansOfType(clazz); } /** * 查找bean是否有注释。 */ public static <A extends Annotation> A findAnnotationOnBean(String beanName, Class<A> annotationType) { return CONTEXT.findAnnotationOnBean(beanName, annotationType); } /** * 获取ApplicationContext对象。 */ public static ApplicationContext getInstance() { return CONTEXT; } }
记住这个类也要交给spring容器管理,不然spring扫描不到这个类就不会执行了。
2.代码测试
接下来我们进行测试,我们测试目的就是用一个没有交给spring容器的类,然后通过这个方法从Spring上下文容器中的到Student的Bean对象。
①先定义一个Student对象,并且交给spring容器管理
package com.feisi.test.pojo; import lombok.Data; import org.springframework.stereotype.Service; @Service @Data public class Student { private String name ; private Integer age ; }
2.在定义一个类,不交给spring容器管理
package com.feisi.test.demo; import com.feisi.test.applicationContext.ApplicationContextHolder; /** * 这个类不交给spring容器,但是想要访问spring容器中的Bean */ public class ApplicationContestDemo { public void getSpringBean(Object object){ Object ob = ApplicationContextHolder.getBean(object.getClass()); System.out.println("从容器中的到Bean对象:"+ob); } }
我们在这个类中,通过我们的配置类中的getBean方法来获取对象的bean对象。其实是因为我们在这个类中得到了spring容器上下文对象,然后通过调用spring容器上下文对象中的根据类型获取bean对象的方法来得到对应的bean对象。
3.启动spring服务@SpringBootTest class TestApplicationTests { // @Autowired // private Student student ; @Test void contextLoads() { new ApplicationContestDemo().getSpringBean(new Student()); } }
我们一定要启动这个spring服务,再去调用这个方法。
因为整个流程是这样的:
我们在启动spring服务后,spring会自动执行实现了ApplicationContextWare接口的类中的实现方法 setApplicationContext(ApplicationContext applicationContext),这样spring就会把spring容器上下文对象我们实现的这个方法,我们就可以从这个方法得到spring容器上下文对象,然后就可以定义方法,从spring容器上下文对象中调用方法获取bean对像。
标签:
相关文章
最新发布
- 光流法结合深度学习神经网络的原理及应用(完整代码都有Python opencv)
- Python 图像处理进阶:特征提取与图像分类
- 大数据可视化分析-基于python的电影数据分析及可视化系统_9532dr50
- 【Python】入门(运算、输出、数据类型)
- 【Python】第一弹---解锁编程新世界:深入理解计算机基础与Python入门指南
- 华为OD机试E卷 --第k个排列 --24年OD统一考试(Java & JS & Python & C & C++)
- Python已安装包在import时报错未找到的解决方法
- 【Python】自动化神器PyAutoGUI —告别手动操作,一键模拟鼠标键盘,玩转微信及各种软件自动化
- Pycharm连接SQL Sever(详细教程)
- Python编程练习题及解析(49题)
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程