容器-注册

AI-摘要
LNotes-AI GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
容器-注册
Liuxz默认,分层注解能起作用的前提是,这些组件必须在主程序所在的包 及其 子包结构下
Spring为我们提供了快速的MVC分层注解
1、@ControlLer控制器
2、@Service 服务层
3、@Repository持久层
4、@Component 组件
(这些注解都是组件的意思,注解是给人看的,都能存入组件)
@ComponentScan ———– 组件批量扫描
例:
@ComponentScan(basePackages="com.atguigu.spring.controller)
按照包的路径扫描
组件批量扫描,只扫利用Spring 相关注解注册到容器中的组件
(不常用,老实把组件放到 主程序所在的包里面 比较好)
第三方组件想要导入容器中,没办法快速标注分册注解
1.@Bean,自己new,注册给容器
2.@Import(CoreConstants.class) 即可导入组件 (注解标注一次就可以了)
Scope 调整组件的作用域
1、@Scope("prototype"):非单实例:
容器启动的时候不会创建非单实例组件的对象。
什么时候获取,什么时候创建
2、@Scope("singleton"):单实例:默认值
容器启动的时候会创建单实例组件的对象。
容器启动完成之前就会创建好
@Lazy:懒加载(单例模式可以继续调整为懒加载)
容器启动完成之前不会创建懒加载组件的对象,-> 什么时候获取,什么时候创建
3、@Scope("request"):同一个请求单实例
4、@Scope("session"):同一次会话单实例
单实例:获取到的只有一个对象,唯一
多实例:什么时候获取,什么时候创建一个实例对象
- FactoryBean在容器中放的组件的类型,是接口中泛型指定的类型,组件的名字是工厂自己的名字
- 场景:如果制造某些对象比较复杂的时候,利用工厂方法进行创建
- FactoryBean < T>
条件注解@Conditional -条件注册
WindowsCondition类 继承Condition接口,
在组件上面放置@Conditional(WindowsCondition.class) 就可以根据WindowsCondition类中的逻辑来判断,组件是否要放到容器中
官方提前给了很多“预制”的派生注解
==注册组件的各种方式==
| 注册组件的各种方式 |
||
|---|---|---|
| 实验 | 内容 | 目标 |
| 实验1 | @Bean | 理解单例 |
| 实验2 | 获取Bean | 理解组件获取方式 |
| 实验3 | @Configuration | 理解MVC分层模型对应注解 |
| 实验4 | @Controller | ↑ |
| 实验5 | @Service | ↑ |
| 实验6 | @Respository | ↑ |
| 实验7 | @Component | ↑ |
| 实验8 | @ComponentScan | 理解批量扫描 |
| 实验9 | @Import | 理解按需导入 |
| 实验10 | @Scope | 理解组件作用域 |
| 实验11 | @Lazy | 理解懒加载 |
| 实验12 | FactoryBean | 理解工厂Bean |
| 实验13 | @Conditional【难点】 | 理解条件注册 |
==Conditional 派生注解==
| @Conditional 派生注解 | 作用 |
|---|---|
| @ConditionalOnCloudPlatform | 判定是否指定的云平台,支持:NONE、CLOUD_FOUNDRY、HEROKU、SAP、NOMAD、KUBERNETES、AZURE_APP_SERVICE |
| @ConditionalOnRepositoryType | 判定是否指定的JPA类型,支持:AUTO、IMPERATIVE、NONE、REACTIVE |
| @ConditionalOnJava | 判断Java版本范围,支持:EQUAL_OR_NEWER、OLDER_THAN |
| @ConditionalOnMissingBean | 容器中没有指定组件,则判定true |
| @ConditionalOnMissingFilterBean | 容器中没有指定的Filter组件,则判定true |
| @ConditionalOnGraphQlSchema | 如果GraphQL开启,则判定true |
| @ConditionalOnSingleCandidate | 如果容器中指定组件只有一个,则判定true |
| @ConditionalOnClass | 如果存在某个类,则判定true |
| @ConditionalOnCheckpointRestore | 判断是否导入了 org.crac.Resource ,导入则判定true |
| @ConditionalOnNotWebApplication | 如果不是Web应用,则判定true |
| @ConditionalOnEnabledResourceChain | 如果web-jars存在或者resource.chain开启,则判定true |
| @Conditional 派生注解 | 作用 |
| @Profile | 如果是指定Profile标识,则判定true;【后面会说】 |
| @ConditionalOnMissingClass | 如果不存在某个类,则判定true |
| @ConditionalOnWebApplication | 如果是Web应用,则判定true |
| @ConditionalOnResource | 如果系统中存在某个资源文件,则判定true |
| @ConditionalOnNotWarDeployment | 如果不是war的部署方式,则判定true |
| @ConditionalOnDefaultWebSecurity | 如果启用了默认的Security功能,则判断true |
| @ConditionalOnExpression | 如果表达式计算结果为true,则判定true |
| @ConditionalOnWarDeployment | 如果是war的部署方式,则判定true |
| @ConditionalOnBean | 如果容器中有指定组件,则判定true |
| @ConditionalOnThreading | 如果指定的threading激活,则判定true |
| @ConditionalOnProperty | 如果存在指定属性,则判定true |
| @ConditionalOnJndi | 如果JNDI位置存在,则判定true |
补充:
配置类:存框架底层的配置
@Configuration 告诉Spring容器,这是一个配置类
给容器中注册一个自己的组件,容器中的每个组件都有自己的名字,方法名就是组件的名字。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果






