Spring technology stack

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
  • 依赖注入(Dependency Injection)
    • 手段
      • spring@Autowired
      • java@Resource
      • javax@Inject
    • 途径
      • 字段(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
      @Override
    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资源的InputStreamjava.lang.ClassLoader#getResourceAsStream

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
        • 否则->FileUrlResourceUrlResource
  • 协议扩展
    • ProtocolResolver
      • resolve(String location, ResourceLoader resourceLoader)

i18n

java i18n

  • java标准接口ResourceBundle
    • ResourceBundle.Control
    • ResourceBundleControlProvider
      • java 1.6 java.util.ServiceLoader SPI

spring MessageSource

  • java.text.MessageFormat
    • hello,{0}->"word"->hello,word
  • 实现类
    • ResourceBundleMessageSource

Validation

Java Bean Validation(JSR-308)

Srring Validator

Data Binding

Type Conversion

SpEL

AOP

Spring Boot 实际场景

Spring Cloud 应该怎么学