-
java框架-Spring-IOC
Spring官方文档
学习参考视频
一、组件注册
包扫描+组件注解
0)、 @ComponentScans
1)、 @RestController
2)、 @Srevice
3)、 @Rerpository
4)、@Component
导入第三方包里的组件
1)、@Configuration
1)、@Bean
- @Scope:prototype、singleton、request、session
- @Lazy
1)、@Conditional(自定义条件类)
@Import 快速给容器导入一个组件
1)、@Import
2)、interface ImportSelector
3)、ImportBeanDefinitionRegistrar
使用Spring提供的 FactoryBean
1)、interface FactoryBean
- 默认获取工厂bean调用getObject
- 要获取工厂bean本身,需要在id前添加&
二、Bean生命周期
创建
初始化
销毁
- 单实例:容器关闭的时候
- 多实例:容器不会管理这个Bean,需要自己手动调用
1)、相关注解和接口
1、指定初始化和销毁方法
- @Bean(initMethod=xxx, destroyMethod=xxx)
2、实现初始化和销毁接口
- interface InitializingBean
- interface DisposableBean
3、JSR250
- @PostConstruct
- @PreDestroy
4、Bean后置处理器:BeanPostProcessor
- interface BeanPostProcessor
- Bean初始化前执行postProcessBeforeInitialization,初始化后执行postProcessAfterInitialization
- 整个在Bean赋值完成之后
- ApplicationContextAware接口注入ApplicationContext的实现就是该处理器完成
2)、 Springd底层对BeanPostProcessor的使用
- Bean赋值
- 注入其他组件
- @Autowired
- 生命周期功能:注解、接口
三、属性赋值
@PropertySource
@Value
- 基本数值
- SpEL:#{}
- ${},取出配置【yaml、properties】文件中的值,需要先加载配置文件到环境中
四、自动装配
1)、 @Autowired
- 默认优先从容器中获取对应组件
- 如果容器中存在多个相同类型Bean,根据名称注入Bean
- required:true:必须,false:非必须
- 由【AutowiredAnnotationBeanPostProcessor】处理器实现
@Qualifier:指定需要装配的bean id
@Primary:优先装配该Bean
构造器、方法、属性同样支持,都是从容器中获取对应的Bean
- 标在构造器上:如果组件只有一个有参构造器,这个有参构造器的@Autowired可以省略,参数位置的组件还是默认从容器中装配
- 标在属性上,setf方法上
- 标在方法:@Bean+方法参数,参数从容器中获取
2)、@Resource(JSR250规范)
3)、@Ingect(JSR330)
4)、xxxAware:把Spring底层组件自动注册到Bean中
- interface ApplicationContextAware
- interface BeanNameAware
- interface EmbeddedValueResolverAware
5)、@Profile:根据环境配置给容器中注册组件
- Dspring.profile.cative=test(test为环境变量)
- 代码方式,容器启动前设置号参数
1、 AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
2、 annotationConfigApplicationContext.getEnvironment().setActiveProfiles(“test”);
3、 annotationConfigApplicationContext.register(componentClasses);
4、 annotationConfigApplicationContext.refresh(); - 可以添加在方法上,也可以添加在类上
-
相关阅读:
《C和指针》笔记30:函数声明数组参数、数组初始化方式和字符数组的初始化
输电线路AR可视化巡检降低作业风险
python07_函数
【愚公系列】2022年09月 微信小程序-微信小程序实现网页一键登录功能
JQuery+webpack+echarts构建可视化开发环境
论文阅读之Enhancing Transformer with Sememe Knowledge(2020)
【食品加工技术】第五章 烘烤食品加工技术 笔记
VUE 级联菜单cascader 的options动态加载页面无变化
做数据集增强时,训练一半出现IndexError: tuple index out of range这种错误,不知道怎么改,有神仙赐教一下嘛?
K8S安全学习
-
原文地址:https://blog.csdn.net/Semanteme/article/details/133031761