package rocks.inspectit.shared.all.cmr.service;
import java.awt.Component;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Indicates that an annotated class is a "Service" interface (e.g. a business service facade).
*
* <p>
* This annotation serves as a specialization of {@link Component @Component}, allowing for
* interface classes to be autodetected through classpath scanning.
* <p>
* <b>IMPORTANT:</b> The class code is copied/taken/based from
* <a href="http://jira.springframework.org/browse/SPR-3926">Spring JIRA (SPR-3926)</a>. Original
* authors are James Douglas and Henno Vermeulen.
*
* @author Henno Vermeulen
* @author James Douglas
* @author Patrice Bouillet
* @see Component
* @see org.springframework.context.annotation.ClassPathBeanDefinitionScanner
*/
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ServiceInterface {
// Note on Checkstyle ignores:
// Due to bug http://sourceforge.net/p/checkstyle/bugs/641/ it is currently not possible to add
// @return tags to methods within an @interface definition, thus we currently ignore these
// incorrect findings.
/**
* The value may indicate a suggestion for a logical component name, to be turned into a Spring
* bean in case of an autodetected component.
*
* @return the suggested component name, if any //NOCHK
*/
String name() default "";
/**
* Defines the exporter used for exposing this service. Valid values are defined in the
* enumeration {@link ServiceExporterType}.
*
* @return the defined exporter type. //NOCHK
*/
ServiceExporterType exporter();
/**
* Service id for kryonet remote export. This must be a unique value, thus two different
* services must not share the same id.
*
* @return Service id for kryonet remote export. //NOCHK
*/
int serviceId() default 0;
}