SpringBoot学习总结(一)

206 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看详情 SpringBoot介绍: 简单来说,spring boot就是用来简化spring应用的初始搭建与开发过程的;其中使用约定好的配置方式yml文件或properties文件,使用maven简化依赖配置,简化开发,更好扩展与实现各种需求;

@SpringBootApplication

面试中经常会有面试官问自动装配原理或者在项目main方法中添加@SpringBootApplication注解有什么作用:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
        ......
}

这是该注解的源码部分,其中重要的注解有三个,@SpringBootApplication,@EnableAutoConfiguration, @ComponentScan这三个注解为核心组成部分;

@SpringBootApplication,该注解等同于spring注解中@Configuration注解,该注解属于spring中的配置类注解,项目开发中也时有用到,JavaConfig形式的Ioc容器中配置类的注解,spring boot应用本质就是spring应用,原生spring添加组件时是创建bean标签配置到xml文件中;

@EnableAutoConfiguration,该注解本质也是借助@Import将符合自动配置条件的bean加载到Ioc容器中使用,其中@Import注解的EnableAutoConfigurationImportSelector类会完成这件事;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {...}

@ComponentScan,该注解用于定义Spring注解的扫描路径,等同于xml文件中的context:component-scan,假如没有配置扫描路径时,会扫描当前类所在包及子包下的所有标注@Compent,@Service,@Controller等注解的类;

springbootstarter工作原理

springboot启动时@SpringbootApplication会自动去maven中读取starter中的spring.fatories文件,该文件中配置的是创建spring容器时需要的bean,通过自动配置到spring上下文(springContext)中;

spring boot是否需要单独容器进行运行

springboot内置tomcat/jetty容器,可以不需要独立容器运行;

spring boot中事务控制

使用@Transactional注解可以开启事务,控制数据库回滚,该注解可以用于类,接口,方法上,根据使用位置不同作用范围也不同,当应用与接口上时,只用使用基于接口的代理时才会生效,该方法只能用于public修饰的方法上,其余关键字修饰会使注解失效,默认情况下,类内部方法调用也会导致失效,因为只有类外部方法的调用才会被AOP捕获,同修饰关键字原因相同,是基于AOP本质决定的;

AOP的作用与应用

AOP指的是面向切面编程,用来补充面向对象编程(oop)中添加公共方法会产生大量重复工作量与重复代码的缺点产生,如果使用切面处理这些问题,所有代码集中一处不会产生重复代码; 相关注解知识:

@Component 将当前类注入到Spring容器内

@Aspect :表明是一个切面类

@Before :前置通知,在方法执行之前执行

@After :后置通知,在方法执行之后执行

@AfterRuturning :返回通知,在方法返回结果之后执行

@AfterThrowing :异常通知,在方法抛出异常之后执行

@Around :环绕通知,围绕着方法执行

@Pointcut :切入点,PointCut(切入点)表达式有很多种,其中execution用于使用切面的连接点。
Ioc的作用与应用

IOC指的是控制反转,通过IOC容器来管理对象(bean),主要用来降低代码耦合,容器自动注入对象,利于功能复用,方便测试与维护; 主要实现方式:

1 @Configuration注解和@Bean注解来实现。  
2 @Component@Repository@Service@Controller注解。  
3 @Configuration注解和@ComponentScan注解来实现。
spring boot中实现异步调用方法

使用@Async注解实现方法异步执行,需要在启动类加@EnableAsync注解使@Async注解生效,当该注解使用在类中时说明该类下所有方法都是异步方法,还可以在注解后边指定线程池@Async("MyExecutor"),同时如果在同类中内部调用该注解修饰的方法时会导致AOP代理失败,不会进行异步执行;

spring boot中配置加载顺序

优先级别为 命令行参数,Java:comp/env的JNDI属性,Java系统属性(System.getPorperties),操作系统变量,项目中的配置文件(yaml文件,properties文件),@Configuration注解中@PropertySource指定的配置文件,通过SpringApplication.setDefaultProperties指定的默认属性; 其中配置文件加载顺序为:项目根目录下的config目录下配置文件优先级最高,项目根目录下配置文件,classpath下config目录下配置文件,classpath下配置文件(resources); 使用优先级为加载顺序倒序,覆盖配置;

Yaml与Yml文件

便于读取的数据序列化语言,用于配置文件,因为有分层配置的优点,可以进行复杂属性的添加,不过较于properties文件的不支持@PropertySource注解导入自定义Yaml文件

以上是配置以及基础部分,后续会有应用时的常见知识点与面试题,该文章也会不定时更新与扩充;