但是服务定位器不应包含资源缓存。
But the service locator should not include a resource cache.
我第二个实现使用了缓存服务定位器。
使用服务定位器设计模式来简化代码。
Use of the service locator design pattern to simplify lookup code.
每个组件类型一个唯一的服务定位器实例。
我的第三个实现使用没有缓存的服务定位器。
My third implementation used a service locator with no cache.
包含访问数据源缓存的服务定位器实现如下。
A service locator implementation that includes caching accesses a data source like this.
本文假定的服务定位器模式的知识。
This article assumes knowledge of the Service Locator pattern.
把服务定位器放进来仅仅是一个开始。
要解决由服务定位器导致的问题的难度有多大呢?
How hard will it be to figure out that the service locator is causing the problem?
重载资源名使得服务定位器与其缓存之间变得混乱。
So overloaded resource names mess up a service locator and its cache.
好,既然是由于缓存服务定位器导致重载资源名时的错误。
OK, so a caching service locator causes errors for overloaded resource names.
为了安全,你需要用一种机制来锁定服务定位器并使之只读。
To make this safe, you need to have a mechanism to lock the service locator and make it read only.
在声明居于服务定位器的服务后,你将打算调用它们。
After declaring services to reside on the service Locator you will want to invoke them.
例如,允许客户端访问数据源的服务定位器代码表面上与此相似。
For example, the service locator code that enables a client to access a data source looks like this.
由于缓存服务定位器的原因,两个bean现在使用相同数据源。
Because of the caching service locator, the two beans are now using the same data source.
服务定位器代码两次查找资源,因为第一次查找没有被缓存起来。
The service locator's code looks up the resource both times because the first lookup is not cached. Here is the output
简单的结论是:使用服务定位器进行缓存不是一个好的主意。
The simple conclusion is that service locators that cache are a bad idea.
服务定位器实现通常包括资源缓存,以此来避免对相同资源的重复查找。
Service locator implementations usually include a resource cache to avoid repeated lookups of the same resource.
另外一个方法是每个组件类型使用它自身的服务定位器实例,而不是集合。
Another way is for each component type to use its own instance of service locator, not a singleton.
这是因为服务定位器将缓存不论哪个组件首次使用时所重载的名称的资源。
This is because the service locator will cache the resource for whichever component USES the overloaded name first.
象反,服务定位器假设结果句柄和错误句柄将属于调用服务的类。
Instead the service Locator assumes that the result handler and the fault handler will belong to the class calling the service.
我们为Cairngorm提供了一个可配置在IoC容器中的服务定位器。
For Cairngorm, we offer a service locator that can be configured in the IoC container.
业务逻辑代码使用服务定位器避免目录查找代码变得混乱,因此它很容易理解。
Business logic code that USES a service locator avoids becoming cluttered with directory lookup code, and so is easier to understand.
将其应用于现有应用程序很简单:只要改变服务定位器实现去禁止或去除缓存。
This is simple to apply to an existing application: just change the service locator implementation to disable or remove the cache.
我的第一个实现没有使用服务定位器,bean本身执行所有的JNDI代码。
My first implementation used no service locator; the beans performed all of the JNDI code themselves. Here are the two toString 's I got.
因此,在J2EE 1.3应用程序中,服务定位器的实现不应该包含资源缓存。
Therefore, J2EE 1.3 applications should not include the resource cache in their service locator implementations.
不要只假设缓存服务定位器能显著的提高应用程序的性能,要使用性能测试来证明这一点。
Do not just assume that a caching service locator significantly improves application performance; use performance testing to confirm that it does.
凡是在遗留代码集中出现单件查找的地方,稍加修改即可换用服务定位器来查找同样的组件。
Wherever there are singleton lookup in the legacy codebase, a small change is made to lookup the same component via the service locator instead.
客户端为资源传递一个唯一的标识符(资源名),服务定位器找到这个资源并把它返回给客户端。
The client passes in a unique identifier — a resource name — for the resource; the service locator finds the resource and returns it to the client.
包含缓存服务定位器的应用程序迟早要出问题,而且这个问题将很难检测、很难再现且很难诊断。
Applications that contain a caching service locator are a problem waiting to happen — a problem that will be difficult to detect, difficult to reproduce reliably, and difficult to diagnose.
应用推荐