зеркало из
https://github.com/iharh/notes.git
synced 2025-11-02 14:46:08 +02:00
61 строка
1.9 KiB
Plaintext
61 строка
1.9 KiB
Plaintext
https://github.com/ehcache/ehcache3/blob/master/core/src/main/java/org/ehcache/core/spi/service/ServiceFactory.java
|
|
|
|
package org.ehcache.core.spi.service;
|
|
|
|
import org.ehcache.spi.service.ServiceProvider;
|
|
import org.ehcache.spi.service.Service;
|
|
import org.ehcache.spi.service.ServiceCreationConfiguration;
|
|
|
|
import java.lang.annotation.ElementType;
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.Target;
|
|
|
|
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
|
|
|
/**
|
|
* A factory abstraction that can create {@link Service} instances.
|
|
*/
|
|
public interface ServiceFactory<T extends Service> {
|
|
|
|
/**
|
|
* Returns {@code true} if this factory's services are mandatory in all environments.
|
|
*
|
|
* @return {@code true} if this factory's services are mandatory
|
|
*/
|
|
default boolean isMandatory() {
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Returns an optional ranking integer is used to choose a service factory when multiple factories are available for
|
|
* the same service type. <em>Higher ranking value service factories are preferred.</em>
|
|
*
|
|
* @return a factory ranking value
|
|
*/
|
|
default int rank() {
|
|
return 1;
|
|
}
|
|
|
|
/**
|
|
* Creates an instance of the service using the passed in {@link ServiceCreationConfiguration}.
|
|
* <p>
|
|
* Note that a {@code null} configuration may be supported or even required by a service implementation.
|
|
*
|
|
* @param configuration the creation configuration, can be {@code null} for some services
|
|
* @return the new service, not {@link Service#start(ServiceProvider) started}
|
|
*/
|
|
T create(ServiceCreationConfiguration<T, ?> configuration);
|
|
|
|
/**
|
|
* Queries a {@code ServiceFactory} to know which {@link Service} type it produces.
|
|
*
|
|
* @return the class of the produced service.
|
|
*/
|
|
Class<? extends T> getServiceType();
|
|
|
|
@Retention(RUNTIME)
|
|
@Target(ElementType.TYPE)
|
|
@interface RequiresConfiguration {
|
|
}
|
|
}
|