0
点赞
收藏
分享

微信扫一扫

DeepSeek 隐私泄露?

dsysama 03-07 12:00 阅读 23
spring

SpringBoot提供的IOC的方式

  1. 注解配置方式。@ComponentScan扫描指定包下的类,@Service,@Repository,@Controller,@Component注解。

  2. Java Config方式:@ComponentScan扫描指定包下的类@Configuration及类下的@Bean,

  3. spring.factories方式:META-INF/spring.factories文件中添加IOC的类。org.springframework.boot.autoconfigure.EnableAutoConfiguration(一般编写外部jar的时候才使用)

  4. @Import方式:支持导入 Configuration配置类 ,ImportSelector选择器(获取IOC类的全限定名名单),ImportBeanDefinitionRegistrar注册器(直接注册BeanDefinition)

SpringBoot提供的自动装配方式

ByName、ByType、Constructor、autodetect、no

SpringBoot自动装配的过程

  • SpringBoot的自动装配基于@SpringBootApplication。

  • @SpringBootApplication组合注解。@@SpringBootConfiguration标识当前类是配置类,@EnableAutoConfiguration开启自动装配功能,@ComponentScan指定scan的包。

  • 启动的时候会扫描指定路径下的包及子包。

  • 扫描的时候,会扫描指定路径下所有的@Configuration配置类。将@Bean注解的方法的返回,@Service、@Repository、@Controller、@Component注解的类注册为BeanDefinition,注册到BeanFactory中。

  • 除此之外,会将spring.factories文件中的EnableAutoConfiguration标注的类注册为BeanDefinition。还会将@Import注册为BeanDefinition。

  • @Import注解,支持导入 Configuration配置类,importselector选择器(获取ioc的类全限定名名单),importbeandefinitionregistrar注册器(直接注册beandefinition)

SpringBoot的条件加载

@Conditional : 条件注解,配合其他注解使用

@ConditionalOnClass : classpath中存在该类时起效

@ConditionalOnMissingClass : classpath中不存在该类时起效

@ConditionalOnBean : IOC容器中存在该类型Bean时起效

@ConditionalOnMissingBean :IOC容器中不存在该类型Bean时起效

@ConditionalOnSingleCandidate :IOC容器中该类型Bean只有一个或@Primary的只有一个时起效

@ConditionalOnExpression : SpEL表达式结果为true时

@ConditionalOnProperty : 参数设置或者值一致时起效

@ConditionalOnResource : 指定的文件存在时起效

@ConditionalOnJndi : 指定的JNDI存在时起效

@ConditionalOnJava : 指定的Java版本存在时起效

@ConditionalOnWebApplication : Web应用环境下起效

@ConditionalOnNotWebApplication : 非Web应用环境下起效

SpringBoot 自定义Conditional

所有自定义条件注解其实都是基于@Conditional而来的,使用@Conditional定义新条件注解关键就是要有一个Condition实现类,该Condition实现类就负责条件注解的处理逻辑,该实现类所实现的matches()方法决定了条件注解的要求是否得到满足。 1. 实现Condition接口,重写matches()方法,返回true表示条件成立,返回false表示条件不成立。 2. 自定义条件注解,使用@Conditional注解,指定Condition实现类。

SpringBoot 自动装配的DI注解

@Autowired是Spring自带的,@Resource是JSR250规范实现的,@Inject是JSR330规范实现的

  • @Autowired、@Inject用法基本一样,不同的是@Inject没有required属性
  • @Autowired、@Inject是默认按照类型匹配的,@Resource是按照名称匹配的
  • @Autowired如果需要按照名称匹配需要和@Qualifier一起使用,@Inject和@Named一起使用,@Resource则通过name进行指定
举报

相关推荐

0 条评论