面向对象设计原则
- 开闭原则
- 里氏替换
- 合成复用
- 单一职责
- 依赖倒置
- 接口隔离
- 德米特法则
设计模式
创建型
单例
原型
工厂方法
抽象工厂
构建/生成器
结构型
cb ff
适配器
装饰
代理
桥接
组合
门面/外观
享元/轻量级
行为型
cims otv
责任链
命令
*迭代器
*解释器
中介者
备忘录
状态
策略
观察者
模版方法
访问者
核心注解自查
@Bean 容器注册组件
@Primary 主注解
@DependsOn 组件之间声明依赖关系
@Lazy 第一次使用时才创建
@Scope 声明组件的作用范围 (原型/单例)
@Configuration 识别为配置类, 替换以前的配置文件
@Componenet 组件
@Indexed 加速注解, 所有标记了的组件, 会直接启动快速加载
@Order 数字越小优先级越高
@ComponentScan 包扫描
@Conditional 条件注入
@Import 导入第三方 jar 包中的组件 或 定制批量导入组件逻辑
@ImportResource 导入以前的 xml 配置文件, 让其生效
@Profile 基于多环境激活
@PropertySource 外部 properties 配置文件和 JavaBean 进行绑定. 结合 ConfigurationProperties
@PropertySources 对 @PropertySource 组合
@Autowired 自动装配
@Qualifiler 精确指定
@Value 取值, 计算机环境变量, JVM 系统, 配置文件 @Value("${key.key:default}")
#号可以对象调方法. etc.
@Lookup 单例组件依赖非单例组件, 非单例组件获取需要使用方法
@Indexed 注解需要引入依赖:
org.springframework:spring-context-indexer
(optional)
概览
_Resources > ResourceLoader
BeanDefinitionReader > AnnotatedBeanDefinitionReader / XmlBeanDefinitionReader
BeanDefinition 图纸 > BeanDefinitionMap
生命周期, 后置处理 (功能增强) 流水线车间 > 按照图纸造 (自动装配, AOP, 事务, web, 整合)
车间 > singletonObjects 单例对象池 registeredSingletons 已注册的单例池 singletonFactories 单例工厂池 earlySingletonObjects 临时对象池
核心组件接口分析
- 基础接口
Resource + ResourceLoader 要转换的内容
BeanFactory 工作入口
BeanDefinition 转换后的内容
BeanDefinitionReader 读取器
BeanDefinitionRegistry 档案馆
ApplicationContext
Aware
- 生命周期-后置处理器
BeanFactoryPostProcessor
InitializingBean
BeanPostProcessor
Resource
ContextResource - Web
HttpResource - 外部
WritableResource - 读写
网络, 磁盘
ResourceLoader
ResourceLoader 使用策略模式, 作为环境类
环境类 持有策略
资源加载 抽象策略
资源加载 策略实现
file:
classpath:
WEB-INF
BeanFactory
Spring 工厂
BeanFactory 是一个根接口 for 访问 Spring bean 容器, 保存很多的 BeanDefinition 信息, 每个信息都有一个唯一的名字
ListableBeanFactory
HierarchicalBeanFactory (定义父子工厂 (父子容器))
AbstractBeanFactory
- ResourcePatternResolver 策略模式的环境类 (构造器赋值)
GenericApplicationContext
(组合了 DefaultListableBeanFactory
)
DefaultListableBeanFactory
Map<String, Reference<DefaultListableBeanFactory>>
组合模式beanDefinitionNames
保存所有 BeanDefinition 的名字singletonBeanNamesByType
按照类型得到组件的一个底层池allBeanNamesByType
按照类型得到所有 Bean namebeanDefinitionMap
存放 Bean 定义信息的 按名字对应关系 的集合 (档案馆)resolvableDependencies
AnnotationConfigApplicationContext
ClassPathXmlApplicationContext