/* * Copyright 2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.springframework.data.gemfire.config.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.apache.geode.cache.Region; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Import; import org.springframework.core.annotation.AliasFor; /** * The {@link EnableEntityDefinedRegions} annotation marks a Spring {@link org.springframework.context.annotation.Configuration @Configuration} * annotated class to enable the creation of the GemFire/Geode {@link Region Regions} based on * the application domain model object entities. * * @author John Blum * @see org.springframework.context.annotation.ComponentScan * @see org.springframework.context.annotation.ComponentScan.Filter * @see org.springframework.context.annotation.Import * @see org.springframework.core.annotation.AliasFor * @see org.springframework.data.gemfire.config.annotation.EntityDefinedRegionsConfiguration * @see org.apache.geode.cache.Region * @since 1.9.0 */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented @Import(IndexConfiguration.class) @SuppressWarnings({ "unused" }) public @interface EnableEntityDefinedRegions { /** * Alias for {@link #basePackages()} attribute. * * @return a {@link String} array specifying the packages to search for application persistent entities. * @see #basePackages() */ @AliasFor(attribute = "basePackages") String[] value() default {}; /** * Base packages to scan for {@link org.springframework.data.gemfire.mapping.annotation.Region @Region} annotated * application persistent entities. {@link #value()} is an alias for this attribute. * Use {@link #basePackageClasses()} for a type-safe alternative to String-based package names. * * @return a {@link String} array specifying the packages to search for application persistent entities. * @see #value() */ @AliasFor(attribute = "value") String[] basePackages() default {}; /** * Type-safe alternative to {@link #basePackages()} for specifying the packages to scan for * {@link org.springframework.data.gemfire.mapping.annotation.Region @Region} annotated application persistent entities. * The package of each class specified will be scanned. Consider creating a special no-op marker class or interface * in each package that serves no other purpose than being referenced by this attribute. * * @return an array of {@link Class classes} used to determine the packages to scan * for application persistent entities. */ Class<?>[] basePackageClasses() default {}; /** * Specifies which types are not eligible for component scanning. * * @return an array of {@link org.springframework.context.annotation.ComponentScan.Filter Filters} used to * specify application persistent entities to be excluded during the component scan. */ ComponentScan.Filter[] excludeFilters() default {}; /** * Specifies which types are eligible for component scanning. Further narrows the set of candidate components * from everything in {@link #basePackages()} to everything in the base packages that matches the given filter * or filters. * * @return an array {@link org.springframework.context.annotation.ComponentScan.Filter} of Filters used to * specify application persistent entities to be included during the component scan. */ ComponentScan.Filter[] includeFilters() default {}; /** * Determines whether the created {@link Region} will have strongly-typed key and value constraints * based on the ID and {@link Class} type of application persistent entity. * * Defaults to {@literal false}. */ boolean strict() default false; }