spring(不定时更新)
2021-05-23 13:13:36 0 举报
AI智能生成
spring
作者其他创作
大纲/内容
常用注解
@Lookup
解决方法
1.让bean A通过实现ApplicationContextAware来感知applicationContext(即可以获得容器上下文),从而能在运行时通过ApplicationContext.getBean(String beanName)的方法来获取最新的bean B
2. 使用Spring的Lookup注解
@Lookup只能注解在方法上,通过方法返回该非单例实例
@Import
@Import只能用在类上 ,@Import通过快速导入的方式实现把实例加入spring的IOC容器中
@Import注解可以用于导入第三方包@ComponentScan一般只会扫到自己项目中的Bean,第三方jar包中的@Bean扫不到
@Bean
该注释的属性的名称和语义类似于Spring XML模式中bean的元素的名称和语义。@Bean指示方法产生一个由Spring容器管理的bean
@Autowired
默认按类型装配
required=false
表示忽略当前要注入的bean,如果有直接注入,没有则跳过
required=true
表示注入时,该bean必须存在,否则注入失败
@Resource
默认按照名称来,如果名称找不到,那么按照type
@Required
主要用在setter方法上,表示受影响的bean属性必须在配置时注入
AOP
advisor
spring aop顶层抽象,用来管理advice和pointcut
IntroductionAdvisor
只能应用与类级别的拦截
只能只用Introduction型的Advice
PointcutAdvisor
可以使用任何类型的Pointcut,以及几乎任何类型的Advice
advice
对通知的顶层抽象
BeforeAdvice(前置增强)
AfterAdvice(后置增强)
ThrowsAdvice(异常增强)
RoundAdvice(环绕增强)
IntroductionAdvice(引入增强)
一个类,没有实现A接口,在不修改类的情况下,使其具备A接口的功能
pointcut
对切点的抽象
JoinPoint和PointCut的区别
所有方法执行都是JoinPoint,而Pointcut是一个描述信息,修饰的是JoinPoint,通过Pointcut,可以确定哪些JoinPoint可以被织入Advice
1. 首先Advice通过Pointcut查询需要织入的JoinPoint
2. 然后Advice在查询到JoinPoint上执行逻辑
springboot
模块
spring-boot模块,核心实现
spring-boot-autoconfigure,根据类路径的内容,自动配置大部分常用应用程序
自动配置
@EnableAutoConfiguration
用于开启自动配置
@AutoConfigurationPackage
获取主程序类所在的包路径,并将包路径下的所有组件注册到Spring IOC容器中
spring(不定时更新)
临时
BeanWrapper
对bean的包装,相当于一个代理器,提供用于分析和操作标准javabean的操作
接口定义
包括获取被包装的对象,获取被包装bean的属性描述器
ioc容器用来以统一的方式来访问bean的属性
InstantiationStrategy
策略接口,负责根据Bean类创建bean实例
提供了(默认构造方法,指定构造方法,指定工厂方法)三种策略创建bean实例
实现类
SimpleInstantiationStrategy
对InstantiationStrategy做了简单实现
如果工厂方法实例化直接用反射创建对象
如果是构造方法实例化则判断是否有methodOverrides,如果无也是直接用反射
如果有methodOverrides就需要用cglib实例化对象
CglibSubclassingInstantiationStrategy
通过cglib实例化的具体实现
ApplicationContextInitializer
用于在spring容器刷新之前初始化spring ConfigurableApplicationContext的回调接口
通常用于需要对应用程序上下文进行编程初始化的web应用程序,例如:根据上下文环境注册属性源或激活配置文件等
ApplicationListener
接口实现ApplicationEvent的监听
spring内置事件
ContextRefreshEvent
ApplicationContext被初始化或刷新时,该事件被触发
ContextStartedEvent
当使用 ConfigurableApplicationContext (ApplicationContext子接口)接口中的 start() 方法启动 ApplicationContext 时,该事件被发布
ContextStoppedEvent
当使用 ConfigurableApplicationContext 接口中的 stop() 停止 ApplicationContext 时,发布这个事件。你可以在接受到这个事件后做必要的清理的工作
ContextClosedEvent
当使用 ConfigurableApplicationContext 接口中的 close() 方法关闭 ApplicationContext 时,该事件被发布。一个已关闭的上下文到达生命周期末端;它不能被刷新或重启
RequestHandledEvent
这是一个 web-specific 事件,告诉所有 bean HTTP 请求已经被服务。只能应用于使用DispatcherServlet的Web应用。在使用Spring作为前端的MVC控制器时,当Spring处理用户请求结束后,系统会自动触发该事件
IOC
BeanDefinition
isLazy
是不是一个懒加载的bean
原型懒加载bean
没有意义
单例懒加载bean
非加载的单例bean是在spring启动时创建的
懒加载的单例bean不是在spring启动时候创建的,而时在第一次获取bean时创建
dependsOn
表示依赖的其他bean
autowireCandidate
当前bean是不是一个自动装配候选者
表示当前bean能不能自动注入给其他bean,默认true
primary
主bean
在进行自动注入时,通过属性类型,或方法参数可能会找到多个bean,如果多个bean存在一个主bean,那么就直接把这个主bean注入给属性或方法
initMethodname
初始化方法
spring在创建bean的过程中会调用初始化方法
destroyMethodName
销毁方法
spring在销毁bean过程中会调用销毁方法
constructorArgumentValues
构造方法参数值
可以通过BeanDefinition中这个属性来给构造方法传递值
propertyValues
属性值
可以通过BeanDefinition中的这个属性来给bean的某些属性赋值
factoryBeanName
一个bean,可以通过另外一个bean的某个方法来创建
factoryMethodName
BeanFactory
bean工厂,可以根据某个bean的名字,或类型,或别名获取bean对象
BeanDefinitionRegistry
可以注册、保存、移除、获取某个BeanDefinition
SingletonBeanRegistry
可以直接注册、获取某个单例Bean
ListableBeanFactory
在BeanFactory的基础上,增加了其他功能,可以获取所有BeanDefinition的beanName,可以根据某个类型获取对应的beanNames
HierarchicalBeanFactory
在BeanFactory的基础上,添加了获取父BeanFactory的功能
ConfigurableBeanFactory
在HierarchicalBeanFactory和SingletonBeanRegistry的基础上,添加了设置父BeanFactory,类加载器、设置spring el表达式解析器、设置类型转化访问,可以添加BeanPostProcessor,可以合并BeanDefinition,可以销毁Bean等等功能
AutowireCapableBeanFactory
是直接继承了BeanFactory,在BeanFactory继承上,支持在创建Bean的过程中对Bean进行自动装配
AbstractBeanFactory
实现了ConfigurableBeanFactory接口,继承了Factory有BeanRegistrySupport,这个BeanFactory的功能已经很全面了,但是不能自动装配和获取beanNames
ConfigurableListableBeanFactory
继承了ListableBeanFactory、AutowireCapableBeanFactory、ConfigurableBeanFactory
AbstractAutowireCapableBeanFactory
继承了AbstractBeanFactory,实现了AutowireCapableBeanFactory,拥有了自动装配的功能
DefaultListableBeanFactory
继承了AbstractAutowireCapableBeanFactory,实现了ConfigurableListableBeanFactory接口和BeanDefinitionRegistry接口
ApplicationContext
特殊的BeanFactoy
继承了一些子接口
拥有获取父B而安Factory的功能
拥有获取beanNames的功能
ResourcePatternResolver
资源加载器,可以一次性获取多个资源(文件资源等等)
EnvironmentCapable
可以获取运行时环境(没有设置运行时环境功能)
ApplicationEventPublisher
拥有广播事件的功能(没有添加事件监听器的功能)
MessageSource
拥有国际化功能
两个重要的实现类
AnnotationConfigApplicationContext
ConfigurableApplicationContext
继承了ApplicationContext接口,增加了添加事件监听器,添加BeanFactoryPostProcessor,设置Environment,BeanFactory等功能
AbstractApplicationContext
实现了ConfigurableApplicationContext接口
GenericApplicationContext
继承了AbstractApplicationContext,实现了BeanDefinitionRegistry接口,拥有了所有ApplicationContext的功能,并且可以注册BeanDefinition
AnnotationConfigRegistry
可以单独注册某个为类的BeanDefinition(可以处理该类上的@Configuration注解和@Bean注解)
继承了GenericApplicationContext,实现了AnnotationConfigRegistry,拥有了以上所有接口
ClassPathXmlApplicationContext
继承了AbstractApplicationContext
BeanPostProcessor
允许干涉Bean的生命周期
本接口
初始化前调用
初始化后调用
子接口
InstantiationAwareBeanPostProcessor
在BeanPostProcessor的基础上增加了实例化前调用
在BeanPostProcessor的基础上增加了实例化后调用
在BeanPostProcessor的基础上增加了填充属性
DestructionAwareBeanPostProcessor
在BeanPostProcessor的基础上增加了销毁前
MergedBeanDefinitionPostProcessor
在BeanPostProcessor的基础上增加了实例化和实例化后之间
SmartInstantiationAwareBeanPostProcessor
在InstantiationAwareBeanPostProcessor基础上增加了推断构造方法
在InstantiationAwareBeanPostProcessor基础上增加了提前暴露引用
BeanFactoryPostProcessor
Bean工厂后置处理器
允许可以操作BeanFactory
可以获取BeanFactory,并操作
不能注册BeanDefinition,只能修改BeanDefinition
BeanDefinitionRegistryPostProcessor
可以注册BeanDefinition
TargetSource
proxy(代理对象)代理的不是target,而是TargetSource
一个proxy(代理对象)只能代理一个target,每次方法调用的目标也是唯一固定的target。但是,如果让proxy代理TargetSource,可以使得每次方法调用的target实例都不同
SingletonTargetSource
SingletonTargetSource通过构造方法传入一个目标bean对象,在使用getTarget()方法时,也只是将该对象直接返回;并且这里isStatic()方法返回的是true,也就是说,Spring是可以缓存SingletonTargetSource的
PrototypeTargetSource
PrototypeTargetSource主要重写了getTarget()和releaseTarget()方法,并且委托给newPrototypeInstance()和destroyPrototypeInstance()执行
CommonsPool2TargetSource
池化的TargetSource
CommonsPool2TargetSource的实现是将其委托给了ObjectPool进行,具体的也就是GenericObjectPool,其实现了ObjectPool接口
ThreadLocalTargetSource
springmvc
HandlerAdapter(处理器适配器)
概念:HandlerAdapter 会根据适配器接口对后端控制器进行包装(适配),包装后即可对处理器进行执行,通过扩展处理器适配器可以执行多种类型的处理器,这里使用了适配器设计模式
SimpleControllerHandlerAdapter
如果我们开发的接口是通过实现 Controller 接口来完成的(不是通过注解开发的接口),那么 HandlerAdapter 必须是 SimpleControllerHandlerAdapter
HttpRequestHandlerAdapter
http 请求处理器适配器,所有实现了 org.springframework.web.HttpRequestHandler 接口的 Bean 通过此适配器进行适配、执行
RequestMappingHandlerAdapter
根据注解注释的bean根据该适配器执行
0 条评论
回复 删除
下一页