RESTEasy的容器分析
RESTEasy的核心容器是ResteasyDeployment
。
ResteasyDeployment
包含ResteasyProviderFactory
,而反之则不包含。
只需要考虑在ResteasyDeployment.start()
之后的地方往ResteasyProviderFactory
里面注入相关参数,就可以了。
ResteasyProviderFactory
是实现了Configurable
和Configuration
接口的。
注意javax.ws.rs.core.Configuration
接口定义的getProperties()
是immutable的:
/**
* Get the immutable bag of configuration properties.
*
* @return the immutable view of configuration properties.
*/
public Map<String, Object> getProperties();
所以ResteasyProviderFactory
自己实现了mutable版本:
public Map<String, Object> getMutableProperties()
{
return properties;
}
然后mutable版本的实现如下:
@Override
public Map<String, Object> getProperties()
{
return Collections.unmodifiableMap(properties);
}
注意ResteasyProviderFactory
的contextualData
是thread local的:
protected static ThreadLocalStack<Map<Class<?>, Object>> contextualData = new ThreadLocalStack<Map<Class<?>, Object>>();
以上是针对上周工作的一些总结。