前面的文章介绍java基础知识,那这里就介绍下框架的知识点
技术不断发展,服务开发速度要求不断提高,服务的可用性不断被强调,框架也在不断的迭代,我了解的框架从最开始的struts 到二代,然后到spring ,spring也在不断发展,spring-MVC , spring boot , springColud. 市面上框架有很多,我们就国内比较流行的spring展开分析。
Spring基础知识
- spring有哪些模块?CORE / CONTEXT / DAO / ORM / AOP / WEB / WEB-MVC
- 讲述一下springboot自动装配? - 通过少量注解或简单配置就能使用第三方组件的功能
- Spring自动装配原理?Spring Boot的自动装配原理_YING—country的博客-CSDN博客_springboot自动装配原理
- 通过@EnableAutoConfiguration 开启自动装配
- 通过SpringFactoriesLoader 扫描外部引用 jar 包中的
META-INF/spring.factories
文件,将文件中配置的类型信息加载到 Spring 容器 - 通过 @Condition 来进行按需加载配置类
- spring.factories中这么多配置每次启动都要全部加载吗?不会,会根据conditionOnXXX进行过滤
- Spring 的bean初始化流程
从spring启动开始分析 1.先扫描所有BeanDefination--RootBD/GenericBD, 根据Order优先级决定初始化顺序 2.组装好所有的 BeeanPostProcessor ,为后续bean 处理做好准备 3.getBean() ---(抽象类/非单例/懒加载-不需要进行Bean实例化)--doCreateBean 3.1 先创建 bean 空实例 3.2 放置到一个三级缓存中 - 进行bean的提前暴露 3.3 循环 beanPostProcessor 的 before 扫描对应注解进行增强 3.4 执行populate 进行DI 依赖注入 - 比如 propertyValue 基础配置信息注入 / Autowire引用注入(引用注入会出发getBean()操作,如果为空等于新一轮的bean初始化) 3.5 执行initializeBean ,进行@PostContract 方法调用 / initializingBean接口方法调用 / init-method方法调用,普通方法初始化 3.5 执行 beanPostProcessor 的 after 扫描对应注解进行增强 3.6 getAdvicesAndAdvisorsForBean 进行AOP增强 4.返回初始化的bean实例
-
自定义一个注解,这其实是java自己能干的活 - @Interface - (@Target/@Tetention/@Documented/@Inherited) - 通过Class对象.getAnnotation()方法来使用,最好的例子是springAOP注解和spring入参规则匹配
参考文章:
Spring常见面试题总结(超详细回答)_张维鹏的博客-CSDN博客_spring面试题
===============================答案分享
Spring
-
spring常用注解:
-
先从spring入口分析: @SpringBootApplication
-
springBootConfiguration | EnableAutoConfig | CompentScan
-
还有最重要的@Condition |@ConditionOnBean |@ConditionOnMissBean
-
-
配置类 : @Configuration | @Import |@Recourse | @Fliter
-
各类Enable开启 : @EnableTranscational | @EnableAspectJ | @EnableSpringSecurity
-
@Bean | @Compent| @Service |@Entity | @Mapper | @Repository | @Controller | @RestController | @RequestMapper | @AdvicerException | @GET |POST|PUT| DELETE|PATCH|@Request |@Response
-
-
IOC 控制反转:由spring来管理bean的生命周期-beanFactory
-
DI 依赖注入 :属性注入由spring完成
-
AOP面向切面:将通用功能抽离,类似事物管理,日志管理,权限管理,异常管理
-
spring的事物管理,transcationTemplate, try/cache/finally - undo|redo