You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2019/10/11 14:22:11 UTC
[isis] branch v2 updated: ISIS-2158: replace home-brew service
injector with Spring's
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/v2 by this push:
new f3e6029 ISIS-2158: replace home-brew service injector with Spring's
f3e6029 is described below
commit f3e6029dfdef1594d7e662cca226a6bbe9ffa2bc
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Oct 11 16:21:59 2019 +0200
ISIS-2158: replace home-brew service injector with Spring's
---
.../services/confview/ConfigurationMenu.java | 1 +
.../isis/schema/utils/InteractionDtoUtils.java | 4 +-
.../commons/internal/ioc/LifecycleContext.java | 65 ------
.../commons/internal/ioc/cdi/BeanAdapterCDI.java | 2 -
.../apache/isis/commons/internal/ioc/cdi/_CDI.java | 6 +-
.../internal/ioc/spring/BeanAdapterSpring.java | 3 -
.../isis/commons/internal/ioc/spring/_Spring.java | 9 +-
.../isis/metamodel/ServiceInjector_forTesting.java | 4 +-
...ctionInvocationFacetForDomainEventAbstract.java | 3 +-
.../metamodel/services/ServiceInjectorDefault.java | 259 ++-------------------
...ctorDefault.java => ServiceInjectorLegacy.java} | 9 +-
11 files changed, 37 insertions(+), 328 deletions(-)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java b/core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java
index 6fefb67..a3a6ae7 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java
@@ -56,6 +56,7 @@ public class ConfigurationMenu {
)
@MemberOrder(sequence = "500.900.1")
public Set<ConfigurationProperty> configuration(){
+ System.out.println("############## CALL");
return configurationService.allProperties();
}
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
index f98cf42..e474535 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
@@ -367,7 +367,9 @@ public final class InteractionDtoUtils {
public static void addReturn(
final ActionInvocationDto invocationDto,
final Class<?> returnType,
- final Object result, final BookmarkService bookmarkService) {
+ final Object result,
+ final BookmarkService bookmarkService) {
+
final ValueWithTypeDto returned = CommonDtoUtils
.newValueWithTypeDto(returnType, result, bookmarkService);
invocationDto.setReturned(returned);
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/LifecycleContext.java b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/LifecycleContext.java
deleted file mode 100644
index 95277a8..0000000
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/LifecycleContext.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.apache.isis.commons.internal.ioc;
-
-import org.apache.isis.commons.internal.base._Strings;
-
-import lombok.extern.log4j.Log4j2;
-
-@Log4j2
-public enum LifecycleContext {
- ApplicationScoped,
- Singleton,
- SessionScoped,
- RequestScoped,
- ConversationScoped,
- Dependent,
- NotSpecified,
- ;
-
- public boolean isApplicationScoped() {
- return this == ApplicationScoped;
- }
-
- public boolean isSingleton() {
- return this == Singleton;
- }
-
- public boolean isRequestScoped() {
- return this == RequestScoped;
- }
-
- public static LifecycleContext parse(String scope) {
-
- if(_Strings.isNullOrEmpty(scope)) {
- return LifecycleContext.NotSpecified;
- }
-
- for(LifecycleContext candidate : LifecycleContext.values()) {
- if(candidate.name().equalsIgnoreCase(scope)) {
- return candidate;
- }
- }
-
- log.warn("unrecogniced scope '{}'", scope);
- return LifecycleContext.NotSpecified;
-
- }
-
-}
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/BeanAdapterCDI.java b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/BeanAdapterCDI.java
index c53913c..276c588 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/BeanAdapterCDI.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/BeanAdapterCDI.java
@@ -21,7 +21,6 @@ package org.apache.isis.commons.internal.ioc.cdi;
import javax.enterprise.inject.spi.Bean;
import org.apache.isis.commons.collections.Bin;
-import org.apache.isis.commons.internal.ioc.LifecycleContext;
import org.apache.isis.commons.internal.ioc.ManagedBeanAdapter;
import lombok.Value;
@@ -31,7 +30,6 @@ import lombok.val;
final class BeanAdapterCDI implements ManagedBeanAdapter {
private final String id;
- private final LifecycleContext lifecycleContext;
private final Bean<?> bean;
@Override
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/_CDI.java b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/_CDI.java
index 14551f1..0b581dd 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/_CDI.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/_CDI.java
@@ -42,7 +42,6 @@ import org.apache.isis.commons.collections.Bin;
import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.commons.internal.functions._Functions.CheckedRunnable;
-import org.apache.isis.commons.internal.ioc.LifecycleContext;
import org.apache.isis.commons.internal.ioc.ManagedBeanAdapter;
import static org.apache.isis.commons.internal.base._NullSafe.isEmpty;
@@ -203,10 +202,9 @@ public final class _CDI {
return streamAllCDIBeans()
.map(bean->{
- val scope = bean.getScope().getSimpleName(); // also works for produced beans
- val lifecycleContext = LifecycleContext.valueOf(scope);
+ //val scope = bean.getScope().getSimpleName(); // also works for produced beans
val id = beanNameProvider.apply(bean);
- val beanAdapter = BeanAdapterCDI.of(id, lifecycleContext, bean);
+ val beanAdapter = BeanAdapterCDI.of(id, bean);
return beanAdapter;
});
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/BeanAdapterSpring.java b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/BeanAdapterSpring.java
index c266c0f..d2b5107 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/BeanAdapterSpring.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/BeanAdapterSpring.java
@@ -21,7 +21,6 @@ package org.apache.isis.commons.internal.ioc.spring;
import org.springframework.beans.factory.ObjectProvider;
import org.apache.isis.commons.collections.Bin;
-import org.apache.isis.commons.internal.ioc.LifecycleContext;
import org.apache.isis.commons.internal.ioc.ManagedBeanAdapter;
import lombok.Value;
@@ -31,10 +30,8 @@ import lombok.val;
final class BeanAdapterSpring implements ManagedBeanAdapter {
private final String id;
- private final LifecycleContext lifecycleContext;
private final Class<?> beanClass;
private final ObjectProvider<?> beanProvider;
- //private final BeanSort managedObjectSort;
@Override
public Bin<?> getInstance() {
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/_Spring.java b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/_Spring.java
index c38c078..38d844f 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/_Spring.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/_Spring.java
@@ -35,7 +35,6 @@ import javax.inject.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEventPublisher;
-import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Primary;
import org.springframework.core.ResolvableType;
import org.springframework.core.env.ConfigurableEnvironment;
@@ -49,7 +48,6 @@ import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.commons.internal.collections._Sets;
import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.commons.internal.ioc.LifecycleContext;
import org.apache.isis.commons.internal.ioc.ManagedBeanAdapter;
import static org.apache.isis.commons.internal.base._NullSafe.stream;
@@ -126,7 +124,7 @@ public class _Spring {
public static Stream<ManagedBeanAdapter> streamAllBeans() {
val context = context();
- val beanFactory = ((ConfigurableApplicationContext)context).getBeanFactory();
+ //val beanFactory = ((ConfigurableApplicationContext)context).getBeanFactory();
return Stream.of(context.getBeanDefinitionNames())
.map(name->{
@@ -134,13 +132,12 @@ public class _Spring {
val type = context.getType(name);
val id = name; // just reuse the bean's name
- val scope = beanFactory.getBeanDefinition(name).getScope();
- val lifecycleContext = LifecycleContext.parse(scope);
+ //val scope = beanFactory.getBeanDefinition(name).getScope();
val resolvableType = ResolvableType.forClass(type);
val bean = context.getBeanProvider(resolvableType);
- val beanAdapter = BeanAdapterSpring.of(id, lifecycleContext, type, bean);
+ val beanAdapter = BeanAdapterSpring.of(id, type, bean);
return beanAdapter;
});
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/ServiceInjector_forTesting.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/ServiceInjector_forTesting.java
index a361087..9e8bcab 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/ServiceInjector_forTesting.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/ServiceInjector_forTesting.java
@@ -23,7 +23,7 @@ import java.util.function.Consumer;
import org.springframework.beans.factory.InjectionPoint;
import org.apache.isis.applib.services.inject.ServiceInjector;
-import org.apache.isis.metamodel.services.ServiceInjectorDefault;
+import org.apache.isis.metamodel.services.ServiceInjectorLegacy;
import org.apache.isis.metamodel.specloader.InjectorMethodEvaluatorDefault;
import static java.util.Objects.requireNonNull;
@@ -53,7 +53,7 @@ class ServiceInjector_forTesting implements ServiceInjector {
//Note: when testing we don't report un-resolvable injection points.
- delegate = ServiceInjectorDefault.getInstanceAndInit(
+ delegate = ServiceInjectorLegacy.getInstanceAndInit(
configuration, serviceRegistry, injectorMethodEvaluator);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
index 5a4d969..21b9b6b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
@@ -303,7 +303,8 @@ implements ImperativeFacet {
returnedAdapter = getObjectAdapterProvider().adapterFor(returnedPojo);
// sync DTO with result
- getInteractionDtoServiceInternal().updateResult(priorExecution.getDto(), owningAction, returnedPojo);
+ getInteractionDtoServiceInternal()
+ .updateResult(priorExecution.getDto(), owningAction, returnedPojo);
// update Command (if required)
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ServiceInjectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ServiceInjectorDefault.java
index b059a1a..559a454 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ServiceInjectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ServiceInjectorDefault.java
@@ -18,267 +18,48 @@
*/
package org.apache.isis.metamodel.services;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.Map;
import java.util.function.Consumer;
-import java.util.function.Predicate;
-import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.springframework.beans.factory.InjectionPoint;
-import org.springframework.core.MethodParameter;
+import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.inject.ServiceInjector;
-import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.commons.internal._Constants;
-import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.commons.internal.collections._Arrays;
-import org.apache.isis.commons.internal.collections._Collections;
-import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.config.IsisConfiguration;
-import org.apache.isis.metamodel.commons.ToString;
-import org.apache.isis.metamodel.exceptions.MetaModelException;
-import org.apache.isis.metamodel.spec.InjectorMethodEvaluator;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-@Service @Log4j2
+/**
+ *
+ * @since 2.0
+ *
+ */
+@Service
public class ServiceInjectorDefault implements ServiceInjector {
- @Inject private IsisConfiguration configuration;
- @Inject private ServiceRegistry serviceRegistry;
- @Inject private InjectorMethodEvaluator injectorMethodEvaluator;
-
- private final Map<Class<?>, Method[]> methodsByClassCache = _Maps.newConcurrentHashMap();
- private final Map<Class<?>, Field[]> fieldsByClassCache = _Maps.newConcurrentHashMap();
-
+ @Inject private AutowireCapableBeanFactory autowireCapableBeanFactory;
+
+
+// @PostConstruct
+// public void init() {
+// if(autowireCapableBeanFactory==null) {
+// autowireCapableBeanFactory = _Spring.context().getAutowireCapableBeanFactory();
+// }
+// }
+
@Override
public <T> T injectServicesInto(T domainObject, Consumer<InjectionPoint> onNotResolvable) {
injectServices(domainObject, onNotResolvable);
return domainObject;
}
- @PostConstruct
- public void init() {
- autowireSetters = configuration.getServices().getInjector().isSetPrefix();
- autowireInject = configuration.getServices().getInjector().isInjectPrefix();
- }
-
// -- HELPERS
- boolean autowireSetters;
- boolean autowireInject;
-
private void injectServices(final Object targetPojo, Consumer<InjectionPoint> onNotResolvable) {
- val type = targetPojo.getClass();
- if(serviceRegistry.isResolvableBean(type)) {
- log.warn("Skipping call injectServices() on an already managed bean {}.", type);
- return; // already managed
- }
-
- injectToFields(targetPojo, type, onNotResolvable);
-
- if(autowireSetters) {
- injectViaPrefixedMethods(targetPojo, type, "set", onNotResolvable);
- }
- if(autowireInject) {
- injectViaPrefixedMethods(targetPojo, type, "inject", onNotResolvable);
- }
- }
-
- private void injectToFields(final Object targetPojo, final Class<?> cls, Consumer<InjectionPoint> onNotResolvable) {
-
- _NullSafe.stream(fieldsByClassCache.computeIfAbsent(cls, __->cls.getDeclaredFields()))
- .filter(isAnnotatedForInjection())
- .forEach(field->injectToField(targetPojo, field, onNotResolvable));
-
- // recurse up the object's class hierarchy
- final Class<?> superclass = cls.getSuperclass();
- if(superclass != null) {
- injectToFields(targetPojo, superclass, onNotResolvable);
- }
- }
-
- private void injectToField(final Object targetPojo, final Field field, Consumer<InjectionPoint> onNotResolvable) {
-
- final Class<?> typeToBeInjected = field.getType();
- // don't think that type can ever be null,
- // but Javadoc for java.lang.reflect.Field doesn't say
- if(typeToBeInjected == null) {
- return;
- }
-
- // inject matching services into a field of type Collection<T> if a generic type T is present
- final Class<?> elementType = _Collections.inferElementTypeIfAny(field);
- if(elementType!=null) {
- injectToField_nonScalar(targetPojo, field, elementType, onNotResolvable);
- return;
- }
+ autowireCapableBeanFactory.autowireBeanProperties(
+ targetPojo,
+ AutowireCapableBeanFactory.AUTOWIRE_NO, false);
- val beans = serviceRegistry.select(typeToBeInjected, field.getAnnotations());
-
- if(beans.isEmpty()) {
- onNotResolvable.accept(new InjectionPoint(field));
- } else if(beans.isCardinalityOne()) {
- val bean = beans.getSingleton().get();
- invokeInjectorField(field, targetPojo, bean);
- } else {
-
- val requiredAnnotations = _Arrays.combine(
- Annotation.class,
- _Constants.ANNOTATION_PRIMARY,
- field.getAnnotations());
-
- // look for primary
- val primaryBean = serviceRegistry.select(typeToBeInjected, requiredAnnotations);
- if(!primaryBean.isEmpty()) {
- val bean = primaryBean.getFirst().get();
- invokeInjectorField(field, targetPojo, bean);
- return;
- }
-
- // fallback: pick first in list
- val bean = beans.getFirst().get();
- invokeInjectorField(field, targetPojo, bean);
- }
-
- }
-
- @SuppressWarnings("unchecked")
- private void injectToField_nonScalar(
- final Object targetPojo,
- final Field field,
- final Class<?> elementType,
- final Consumer<InjectionPoint> onNotResolvable) {
-
- final Class<? extends Collection<Object>> collectionTypeToBeInjected =
- (Class<? extends Collection<Object>>) field.getType();
-
- val beans = serviceRegistry.select(elementType, field.getAnnotations());
- if(!beans.isEmpty()) {
- final Collection<Object> collectionOfServices = beans.stream()
- .filter(isOfType(elementType))
- // javac does require an explicit type argument here,
- // while eclipse compiler does not ...
- .collect(_Collections.<Object>toUnmodifiableOfType(collectionTypeToBeInjected));
-
- invokeInjectorField(field, targetPojo, collectionOfServices);
- } else {
- onNotResolvable.accept(new InjectionPoint(field));
- }
-
- }
-
- private void injectViaPrefixedMethods(
- final Object targetPojo,
- final Class<?> cls,
- final String prefix,
- final Consumer<InjectionPoint> onNotResolvable) {
-
- _NullSafe.stream(methodsByClassCache.computeIfAbsent(cls, __->cls.getMethods()))
- .filter(nameStartsWith(prefix))
- .forEach(prefixedMethod->injectIntoSetter(targetPojo, prefixedMethod, onNotResolvable));
- }
-
- private void injectIntoSetter(
- final Object targetPojo,
- final Method setter,
- final Consumer<InjectionPoint> onNotResolvable) {
-
- final Class<?> typeToBeInjected = injectorMethodEvaluator.getTypeToBeInjected(setter);
- if(typeToBeInjected == null) {
- return;
- }
-
- val instance = serviceRegistry.select(typeToBeInjected, setter.getAnnotations());
- if(instance.isCardinalityOne()) {
- val bean = instance.getSingleton().get();
- invokeInjectorMethod(setter, targetPojo, bean);
- } else {
- onNotResolvable.accept(new InjectionPoint(new MethodParameter(setter, 0)));
- }
-
- }
-
- private static void invokeMethod(final Method method, final Object target, final Object[] parameters) {
- try {
- method.invoke(target, parameters);
- } catch (final SecurityException | IllegalAccessException e) {
- throw new MetaModelException(String.format("Cannot access the %s method in %s", method.getName(), target.getClass().getName()));
- } catch (final IllegalArgumentException e1) {
- throw new MetaModelException(e1);
- } catch (final InvocationTargetException e) {
- final Throwable targetException = e.getTargetException();
- if (targetException instanceof RuntimeException) {
- throw (RuntimeException) targetException;
- } else {
- throw new MetaModelException(targetException);
- }
- }
- }
-
- private static void invokeInjectorField(final Field field, final Object target, final Object parameter) {
- try {
- field.setAccessible(true);
- field.set(target, parameter);
- } catch (final IllegalArgumentException e) {
- throw new MetaModelException(e);
- } catch (final IllegalAccessException e) {
- throw new MetaModelException(String.format("Cannot access the %s field in %s", field.getName(), target.getClass().getName()));
- }
- if (log.isDebugEnabled()) {
- log.debug("injected {} into {}", parameter, new ToString(target));
- }
- }
-
- private static void invokeInjectorMethod(final Method method, final Object target, final Object parameter) {
- final Object[] parameters = new Object[] { parameter };
- invokeMethod(method, target, parameters);
- if (log.isDebugEnabled()) {
- log.debug("injected {} into {}", parameter, new ToString(target));
- }
- }
-
- // -- REFLECTIVE PREDICATES
-
- private static final Predicate<Object> isOfType(final Class<?> cls) {
- return obj->cls.isAssignableFrom(obj.getClass());
- }
-
- private static final Predicate<Method> nameStartsWith(final String prefix) {
- return method->method.getName().startsWith(prefix);
- }
-
- private static final Predicate<Field> isAnnotatedForInjection() {
- return field->field.getAnnotation(javax.inject.Inject.class) != null;
- }
-
- // -- TESTING
-
- /**
- * JUnit Test support.
- */
- public static ServiceInjectorDefault getInstanceAndInit(
- IsisConfiguration configuration,
- ServiceRegistry serviceRegistry,
- InjectorMethodEvaluator injectorMethodEvaluator) {
- val instance = new ServiceInjectorDefault();
-
- instance.configuration = configuration;
- instance.serviceRegistry = serviceRegistry;
- instance.injectorMethodEvaluator = injectorMethodEvaluator;
-
- instance.init();
-
- return instance;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ServiceInjectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ServiceInjectorLegacy.java
similarity index 97%
copy from core/metamodel/src/main/java/org/apache/isis/metamodel/services/ServiceInjectorDefault.java
copy to core/metamodel/src/main/java/org/apache/isis/metamodel/services/ServiceInjectorLegacy.java
index b059a1a..0f1740b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ServiceInjectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ServiceInjectorLegacy.java
@@ -32,7 +32,6 @@ import javax.inject.Inject;
import org.springframework.beans.factory.InjectionPoint;
import org.springframework.core.MethodParameter;
-import org.springframework.stereotype.Service;
import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.applib.services.registry.ServiceRegistry;
@@ -49,8 +48,8 @@ import org.apache.isis.metamodel.spec.InjectorMethodEvaluator;
import lombok.val;
import lombok.extern.log4j.Log4j2;
-@Service @Log4j2
-public class ServiceInjectorDefault implements ServiceInjector {
+@Log4j2
+public class ServiceInjectorLegacy implements ServiceInjector {
@Inject private IsisConfiguration configuration;
@Inject private ServiceRegistry serviceRegistry;
@@ -266,11 +265,11 @@ public class ServiceInjectorDefault implements ServiceInjector {
/**
* JUnit Test support.
*/
- public static ServiceInjectorDefault getInstanceAndInit(
+ public static ServiceInjectorLegacy getInstanceAndInit(
IsisConfiguration configuration,
ServiceRegistry serviceRegistry,
InjectorMethodEvaluator injectorMethodEvaluator) {
- val instance = new ServiceInjectorDefault();
+ val instance = new ServiceInjectorLegacy();
instance.configuration = configuration;
instance.serviceRegistry = serviceRegistry;