Spring Framework 核心特性
IoC Container
IoC
- java bean
- Java Beans
- 应该用不关心依赖组件来源,通过一定DI方式查找
DI
- java ee:JNDI(Java Naming and Directory Interface)
javax.naming.Context
- 名称
lookup(String name):Object
lookup(Name name):Object
- 名称
- 依赖查找(Dependency Lookup)
- ID、别名、名称查找:
BeanFactory#getBean(String):Object
- 类型查找:
BeanFactory#getBean(Class<T>):T
- 注解查找:
ListableBeanFactory#getBeansWithAnnotation(Class<? extends Annotation>):Map<String, Object>
FactoryBean
查找:FactoryBean#getObject():T
ObjectBean
查找:ObjectFactory#getObject():T
- ID、别名、名称查找:
- 依赖注入(Dependency Injection)
- 手段
- spring
@Autowired
- java
@Resource
- javax
@Inject
- spring
- 途径
- 字段(field)
- 属性(setter)
- 方法(method)
- 构造器(constructor)
- 手段
Events
Essentially, this is the standard Observer design pattern.
核心,观察者模式
spring事件:
ApplicationEvent
spring 事件监听器:
ApplicationListener
spring事件广播器:
SimpleApplicationEventMulticaster
1
2
3
4
5
6
7
8
9
10
11
12
13
public void multicastEvent(final ApplicationEvent event, @Nullable ResolvableType eventType) {
ResolvableType type = (eventType != null ? eventType : resolveDefaultEventType(event));
Executor executor = getTaskExecutor();
for (ApplicationListener<?> listener : getApplicationListeners(event, type)) {
if (executor != null) {
executor.execute(() -> invokeListener(listener, event));
}
else {
invokeListener(listener, event);
}
}
}
Resources
java资源管理
url资源管理
- 协议:
java.net.URL#getProtocol
:HTTP,FTP,HTTPS,File…
ClassLoader(Class Path)管理
- 资源
- 获取当前ClassLoader资源:
java.lang.ClassLoader#getResource:URL
- 获取当前ClassLoader所有资源:
java.lang.ClassLoader#getResources:Enumeration<URL>
- 获取当前ClassLoader资源的
InputStream
:java.lang.ClassLoader#getResourceAsStream
- 获取当前ClassLoader资源:
spring资源管理
资源定位:classpath:/META-INF/xxx.properties
多资源定位:classpath*:/META-INF/xxx.properties
Resouce
接口
- 语义
- 资源定位:(
URL
,File
) - 资源流读取:(
InputStream
)
- 资源定位:(
- 实现类
ClassPathResource
getURL
->ClassLoader#getResource:URL
getInputStream
->ClassLoader#getResourceAsStream
- 加载器
ResourceLoader
- 获取
Resource
:org.springframework.core.io.ResourceLoader#getResource(String)
- 默认实现:
org.springframework.core.io.DefaultResourceLoader
- 前缀=”classpath:”->
ClassPathResource
- 否则->
FileUrlResource
或UrlResource
- 前缀=”classpath:”->
- 获取
- 协议扩展
ProtocolResolver
resolve(String location, ResourceLoader resourceLoader)
i18n
java i18n
- java标准接口
ResourceBundle
ResourceBundle.Control
ResourceBundleControlProvider
- java 1.6
java.util.ServiceLoader
SPI
- java 1.6
spring MessageSource
java.text.MessageFormat
hello,{0}->"word"->hello,word
- 实现类
ResourceBundleMessageSource