Spring专题
2020-06-28 10:23:42 40 举报
AI智能生成
spring
作者其他创作
大纲/内容
SpringMvc
servlet3.0
ServletContainerInitializer
Registration
ServletRegistration
FilterRegistration
ServletContext
异步请求
servlet3.0异步处理
返回Callable
返回DeferredResult
容器
扫描类
AnnotationConfigApplicationContext
配置类声明读取
包扫描
ClassPathXmlApplicationContext
读取xml配置文件
SpingApplication
Spring体系
Spring Core:Spring核心,它是框架最基础的部分,提供IOC和依赖注入特性
Spring Context:Spring上下文容器,它是BeanFactory功能加强的一个子接口
Spring Web:它提供Web应用开发的支持
Spring MVC:它针对Web应用中MVC思想的实现
Spring DAO:提供对JDBC抽象层,简化了JDBC编码,同时,编码更具有健壮性
Spring ORM:它支持用于流行的ORM框架的整合,比如:Spring + Hibernate、Spring + iBatis、Spring + JDO的整合等等。
Spring AOP:AOP即,面向切面编程,它提供了与AOP联盟兼容的编程实现
组件添加,注册bean
@ComponentScans
@ComponentScan
包路径扫描,basePackages默认
指定类所在路径扫描,basePackageClasses
扫描Bean的name重新定义,nameGenerator
使用默认的过滤,useDefaultFilters
扫描包括条件,includeFilters
Filter内在注解
classes默认
pattern
只使用与type为ASPECTJ何REGEX的时候,写表达式用
type
ANNOTATION 默认
ASSIGNABLE_TYPE
ASPECTJ
REGEX
CUSTOM
扫描排除条件,excludeFilters
同includeFilters,不过default设置为true
是否懒加载,lazyInit
@Bean
构成
name默认
autowire
initMethod
destroyMethod
指定初始化销毁
别名指定,替代方法名
初始化方法
销毁bean方法
初始化其他方式
InitializingBean(初始化设置值之后调用)
DisposableBean(单利Bean销毁)
六种销毁创建同时定义的情况
JSR250规范,允许开发者像spring提供一些意见方法
@PostConstruct
@PreDestroy
BeanPostProcessor后置处理器
在@Bean的init方法前后进行增强
@Indexed
@Component
@Configuration
@Controller
@Repository
@Service
@Conditional
@Lazy
表示getBean的时候加载,作用在单例,多例默认get的时候加载
@Scope
prototype:多例
singleton:单列默认,容器初始化bean创建完毕
request:request级别
session:session级别
@Import
直接引class
批量选择性引入classImportSelector
判定上下文环境自定义引入Bean到容器ImportBeanDefinitionRegistrar
工厂模式,注入Bean
FactoryBean
将bean注入容器
BeanFactory
将bean取出容器
组件赋值
@Value
@Autowired
@Primary
@Qualifier
其他方式
@Resources(JSR250)
@Inject(JSR330,需要导入javax.inject)
@PropertySource
@PropertySources
组件注入
方法参数
构造器注入
ApplicationContextAware
ApplicationContextAwareProcessor
xxxAware
BeanDefinitionRegistryPostProcessor,单利Bean实例化前,向容器注册
BeanFactoryPostProcessor子类,可自定义添加bean定义
BeanDefinetionRegistry
BeanDefinetionBuilder
声明式事务源码解读
@EnableTransactionManagement
@Transactional
声明式事务-环境搭建
声明式事务-测试成功
声明式事务-源码分析
Spring容器源码解读
BeanFactory预准备
执行BeanFactoryPostProcessor
注册BeanPostProcessors
初始化MessageSource
初始化事件派发器、监听器等
创建Bean准备
Bean创建完成
容器创建完成
AOP代理
AOP的三种形式
Spring 1.2 基于接口的配置
Spring 2.0 schema-based 配置:Spring 2.0 以后使用 XML 的方式来配置<aop:aspectj-autoproxy/>,使用 命名空间 <aop />
Spring 2.0 @AspectJ 配置:使用注解的方式来配置 @EnableAspectJAutoProxy
AOP和AspectJ区别
AspectJ 出身也是名门,来自于 Eclipse 基金会
AOP是Spring基于方法粒度的拦截
AOP相关成员解读
Interceptor 开发者灵活控制什么时候执行业务方法,在前后加入逻辑业务,也叫环绕
Pointcut 切点,用于定义哪些方法需要被增强或者说需要被拦截,有点类似于Advisor 的方法匹配。
Aspect
Joinpoint
DefaultAdvisorAutoProxyCreator类 保证所有的Advisor能够自动作用于所有的类
代理Bean
ProxyFactoryBean类
Advisor
内部持有Advice执行者
参数方法匹配
NameMatchMethodPointcutAdvisor 设定Advisor要拦截哪些方法
RegexpMethodPointcutAdvisor 正则匹配
BeanNameAutoProxyCreator类 自动代理,支持正则匹配类,匹配正则发现容器中要代理的类然后代理
DefaultAdvisorAutoProxyCreator 完全自动,使得所有的 Advisor 自动生效,容器启动自动扫描
@EnableAspectJAutoProxy 开启AOP功能,也就是 @AspectJ 的注解配置方式
@Before/@After/@AfterReturning/@AfterThrowing/@Around
@Pointcut
AOP源码解读
AnnotationAwareAspectJAutoProxyCreator分析
注册AnnotationAwareAspectJAutoProxyCreator
AnnotationAwareAspectJAutoProxyCreator执行时机
创建AOP代理
获取拦截器链-MethodInterceptor
链式调用通知方法
AOP-原理总结
IOC
执行AbstractApplicationContext的refresh方法
1.prepareRefresh 设置容器启动前的一些动作,比如标志位设置close=fasle,active=true
2.obtainFreshBeanFactory 就是创建BeanFactory容器的动作,让ApplicationContext持有一个DefaultListableBeanFactory容器。扫描xml解析dom,扫描类注解等等,然后将信息收集起来变成BeanDefinition(Bean的描述,各种信息)加入到容器,方便之后getBean实例化对象
3.prepareBeanFactory 准备Bean工厂在上下文中使用,就是配置BeanFactory的一些参数,在容器中初始化话好内置的Bean,以及要解析哪些类,不解析哪些类
1.类加载器的设置
2.ApplicationContextAwareProcessor处理器Bean的加载,添加到BeanFactory,以及将自动装配(非Autowrite)Bean的回调类忽略,不注册到BeanFactory
3.注册内置的早期的Spring需要的Bean,如BeanFactory,ResourceLoader,ApplicationEventPublisher,ApplicationContext
4.注册早期的后处理器以检测内部bean作为ApplicationListeners。
5.如果用户没有自己注入的话,选择性注入一些有必要的Bean,如系统信息等
4.postProcessBeanFactory 钩子方法,模板方法模式,让Spring提供的子类加载器提前加载各种Bean,配置Bean的加载策略等等,方便使用,如内置的bean,environment,systemProperties,systemEnvironment
5.invokeBeanFactoryPostProcessors 调用用户自定义的,实现 BeanFactoryPostProcessor 的 类的回调方法,后置处理
6.registerBeanPostProcessors 注册BeanPostProcessor 的实现类到容器中方便之后调用,此处Bean的实例还没创建,所以不会执行
7.initMessageSource 初始化当前 ApplicationContext 的 MessageSource,也会注入messageSource到容器,国际化
8.initApplicationEventMulticaster 初始化当前 ApplicationContext 的事件广播器
9.onRefresh 模板方法(钩子方法)子类有用,如在springboot中,在这里构建tomcat服务容器
10.registerListeners 注册事件监听器,监听器需要实现 ApplicationListener 接口
11.finishBeanFactoryInitialization 通过getBean创建所有的单利Bean的实例创建,懒加载的也不加载
12.finishRefresh 广播事件,ApplicationContext 初始化完成
ICO相关成员解读
BeanFactory
ListableBeanFactory
HierarchicalBeanFactory
AutowireCapableBeanFactory
DefaultListableBeanFactory
BeanDefinition
ChildBeanDefinition
GenericBeanDefinition
RootBeanDefinition
划重点
1.DefaultListableBeanFactory是BeanFactory中最牛的Bean,所以ApplicationContext使用它作为内置容器
2.BeanDefinition 中保存了我们的 Bean 信息,比如这个 Bean 指向的是哪个类、是否是单例的、是否懒加载、这个 Bean 依赖了哪些 Bean 等等。
3.BeanDefinition 就是我们所说的 Spring 的 Bean,各个 Bean 其实会转换成一个个 BeanDefinition 存在于 Spring 的 BeanFactory 中
0 条评论
下一页