开启掘金成长之旅!这是我参与「掘金日新计划 · 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文件