首页 > Python资料 博客日记
Spring容器上下文
2024-10-16 00:00:08Python资料围观30次
目录
一 什么是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】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj