Skip to content

Commit fe8c5ec

Browse files
committed
Polish code
1 parent 94c366d commit fe8c5ec

File tree

20 files changed

+597
-180
lines changed

20 files changed

+597
-180
lines changed

projects/stage-1/middleware-frameworks/my-cdi/src/main/java/org/geektimes/enterprise/inject/standard/beans/InjectionTargetBean.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,13 @@ public boolean isNullable() {
9494
public T create(CreationalContext<T> creationalContext) {
9595
// Instantiation
9696
T instance = injectionTarget.produce(creationalContext);
97-
// Initialization
98-
injectionTarget.postConstruct(instance);
97+
9998
// Injection
10099
injectionTarget.inject(instance, creationalContext);
100+
101+
// Initialization
102+
injectionTarget.postConstruct(instance);
103+
101104
return instance;
102105
}
103106

projects/stage-1/middleware-frameworks/my-cdi/src/main/java/org/geektimes/enterprise/inject/standard/beans/manager/BeanArchiveManager.java

+18-101
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.geektimes.commons.reflect.util.ClassUtils;
2222
import org.geektimes.commons.reflect.util.SimpleClassScanner;
2323
import org.geektimes.commons.util.PriorityComparator;
24-
import org.geektimes.commons.util.ServiceLoaders;
2524
import org.geektimes.enterprise.inject.standard.beans.BeanArchiveType;
2625
import org.geektimes.enterprise.inject.standard.beans.BeanDiscoveryMode;
2726
import org.geektimes.enterprise.inject.standard.beans.BeanTypeSource;
@@ -31,7 +30,6 @@
3130
import org.geektimes.enterprise.inject.standard.beans.xml.bind.Scan;
3231
import org.geektimes.enterprise.inject.util.Decorators;
3332
import org.geektimes.enterprise.inject.util.Qualifiers;
34-
import org.geektimes.enterprise.inject.util.Scopes;
3533
import org.geektimes.enterprise.inject.util.Stereotypes;
3634
import org.geektimes.interceptor.InterceptorManager;
3735
import org.geektimes.interceptor.util.InterceptorUtils;
@@ -57,13 +55,13 @@
5755
import static org.geektimes.commons.collection.util.CollectionUtils.newLinkedHashSet;
5856
import static org.geektimes.commons.lang.util.StringUtils.endsWith;
5957
import static org.geektimes.commons.lang.util.StringUtils.isBlank;
58+
import static org.geektimes.commons.util.ServiceLoaders.loadSpi;
6059
import static org.geektimes.enterprise.inject.standard.beans.BeanArchiveType.EXPLICIT;
6160
import static org.geektimes.enterprise.inject.standard.beans.BeanArchiveType.OTHER;
6261
import static org.geektimes.enterprise.inject.standard.beans.BeanDiscoveryMode.ALL;
6362
import static org.geektimes.enterprise.inject.standard.beans.BeanDiscoveryMode.NONE;
6463
import static org.geektimes.enterprise.inject.standard.beans.BeanTypeSource.*;
6564
import static org.geektimes.enterprise.inject.standard.beans.xml.BeansReader.BEANS_XML_RESOURCE_NAME;
66-
import static org.geektimes.enterprise.inject.util.Decorators.isDecorator;
6765
import static org.geektimes.interceptor.InterceptorManager.getInstance;
6866

6967

@@ -79,7 +77,7 @@ public class BeanArchiveManager {
7977

8078
private static final Predicate<Class<?>> nonAnnotationFilter = annotationFilter.negate();
8179

82-
private ClassLoader classLoader;
80+
private final StandardBeanManager standardBeanManager;
8381

8482
private final BeansReader beansReader;
8583

@@ -118,18 +116,6 @@ public class BeanArchiveManager {
118116
*/
119117
private final Map<Class<? extends Annotation>, Set<Annotation>> syntheticStereotypes;
120118

121-
/**
122-
* Synthetic Scopes from {@link BeforeBeanDiscovery#addScope(Class, boolean, boolean)}
123-
*/
124-
private final Set<Class<? extends Annotation>> syntheticScopes;
125-
126-
/**
127-
* Synthetic Normal Scopes from {@link BeforeBeanDiscovery#addScope(Class, boolean, boolean)}
128-
* <p>
129-
* The key is annotation type, the value is passivating or not
130-
*/
131-
private final Map<Class<? extends Annotation>, Boolean> syntheticNormalScopes;
132-
133119
/**
134120
* Synthetic InterceptorBindings from {@link BeforeBeanDiscovery#addInterceptorBinding(Class, Annotation...)}
135121
* <p>
@@ -143,11 +129,12 @@ public class BeanArchiveManager {
143129

144130
private volatile boolean discovered;
145131

146-
public BeanArchiveManager(ClassLoader classLoader) {
147-
this.classLoader = classLoader;
148-
this.beansReader = ServiceLoaders.loadSpi(BeansReader.class, classLoader);
132+
public BeanArchiveManager(StandardBeanManager standardBeanManager) {
133+
this.standardBeanManager = standardBeanManager;
134+
135+
this.beansReader = loadSpi(BeansReader.class, getClassLoader());
149136
this.classScanner = SimpleClassScanner.INSTANCE;
150-
this.interceptorManager = getInstance(classLoader);
137+
this.interceptorManager = getInstance(getClassLoader());
151138

152139
this.beanClasses = new TreeMap<>();
153140
this.interceptorClasses = new TreeMap<>();
@@ -159,8 +146,6 @@ public BeanArchiveManager(ClassLoader classLoader) {
159146
this.syntheticPackagesToScan = new TreeMap<>();
160147
this.syntheticQualifiers = new LinkedHashSet<>();
161148
this.syntheticStereotypes = new LinkedHashMap<>();
162-
this.syntheticScopes = new LinkedHashSet<>();
163-
this.syntheticNormalScopes = new LinkedHashMap<>();
164149
this.syntheticInterceptorBindings = new LinkedHashMap<>();
165150

166151
this.discoveryEnabled = true;
@@ -192,15 +177,6 @@ public BeanArchiveManager addSyntheticStereotype(Class<? extends Annotation> ste
192177
return this;
193178
}
194179

195-
public BeanArchiveManager addSyntheticScope(Class<? extends Annotation> scopeType, boolean normal, boolean passivating) {
196-
if (normal) {
197-
syntheticNormalScopes.put(scopeType, passivating);
198-
} else {
199-
syntheticScopes.add(scopeType);
200-
}
201-
return this;
202-
}
203-
204180
public BeanArchiveManager addSyntheticInterceptorBinding(Class<? extends Annotation> bindingType, Annotation[] bindingTypeDef) {
205181
syntheticInterceptorBindings.put(bindingType, CollectionUtils.asSet(bindingTypeDef));
206182
return this;
@@ -368,23 +344,6 @@ private void filterAndHandleBeanTypes(Set<Class<?>> classes,
368344
}
369345
}
370346

371-
public boolean isScope(Class<? extends Annotation> annotationType) {
372-
return Scopes.isScope(annotationType) ||
373-
// Extensions
374-
syntheticScopes.contains(annotationType);
375-
}
376-
377-
public boolean isNormalScope(Class<? extends Annotation> annotationType) {
378-
return Scopes.isNormalScope(annotationType) ||
379-
// Extensions
380-
syntheticNormalScopes.containsKey(annotationType);
381-
}
382-
383-
public boolean isPassivatingScope(Class<? extends Annotation> annotationType) {
384-
return Scopes.isPassivatingScope(annotationType) ||
385-
// Extensions
386-
syntheticNormalScopes.getOrDefault(annotationType, Boolean.FALSE);
387-
}
388347

389348
public boolean isQualifier(Class<? extends Annotation> annotationType) {
390349
return Qualifiers.isQualifier(annotationType) ||
@@ -405,7 +364,7 @@ public boolean isStereotype(Class<? extends Annotation> annotationType) {
405364
}
406365

407366
public boolean isBeanClass(Class<?> type) {
408-
return isDefiningAnnotationType(type, false, false);
367+
return standardBeanManager.isDefiningAnnotationType(type, false, false);
409368
}
410369

411370
public Set<Annotation> getInterceptorBindingDefinition(Class<? extends Annotation> bindingType) {
@@ -430,6 +389,7 @@ public void discoverTypes() {
430389

431390
private void discoverTypesInExplicitBeanArchives() {
432391
try {
392+
ClassLoader classLoader = getClassLoader();
433393
Enumeration<URL> beansXMLResources = classLoader.getResources(BEANS_XML_RESOURCE_NAME);
434394
while (beansXMLResources.hasMoreElements()) {
435395
URL beansXMLResource = beansXMLResources.nextElement();
@@ -465,6 +425,7 @@ private void discoverTypesInExplicitBeanArchives() {
465425
*/
466426
private void discoverTypesInImplicitBeanArchives() {
467427
if (isScanImplicitEnabled()) {
428+
ClassLoader classLoader = getClassLoader();
468429
Set<String> classPaths = ClassPathUtils.getClassPaths();
469430
classPaths.stream().map(File::new).forEach(archiveFile -> {
470431
Set<Class<?>> discoveredTypes = scan(classLoader, archiveFile);
@@ -485,7 +446,7 @@ private void discoverTypesInSyntheticBeanArchives() {
485446

486447

487448
private Set<Class<?>> scan(URL beansXMLResource, Predicate<Class<?>>... classFilters) {
488-
return new LinkedHashSet<>(classScanner.scan(classLoader, beansXMLResource, true, classFilters));
449+
return new LinkedHashSet<>(classScanner.scan(getClassLoader(), beansXMLResource, true, classFilters));
489450
}
490451

491452
private Set<Class<?>> scan(ClassLoader classLoader, File archiveFile, Predicate<Class<?>>... classFilters) {
@@ -535,6 +496,7 @@ private void discoverTypesInImplicitBeanArchive(URL beansXMLResource) {
535496

536497
private void discoverTypesInSyntheticPackages() {
537498
if (isDiscoveryEnabled()) {
499+
ClassLoader classLoader = getClassLoader();
538500
Set<Class<?>> discoveredTypes = new LinkedHashSet<>();
539501
for (Map.Entry<String, Boolean> packageEntry : syntheticPackagesToScan.entrySet()) {
540502
String packageToDiscovery = packageEntry.getKey();
@@ -757,11 +719,12 @@ private List<Class<?>> loadAnnotatedClasses(List<String> classNames,
757719
}
758720

759721
private Class<?> resolveClass(String className) {
760-
return ClassUtils.resolveClass(className, classLoader);
722+
return ClassUtils.resolveClass(className, getClassLoader());
761723
}
762724

763725
private Class<?> loadClass(String className) throws IllegalArgumentException {
764726
try {
727+
ClassLoader classLoader = getClassLoader();
765728
return ClassUtils.forName(className, classLoader);
766729
} catch (ClassNotFoundException e) {
767730
String message = format("The class[name : %s] can't be found!", className);
@@ -799,56 +762,6 @@ private BeanArchiveType resolveBeanArchiveType(Beans beans) {
799762
}
800763
}
801764

802-
/**
803-
* Is defining annotation type or not.
804-
* <p>
805-
* A bean class may have a bean defining annotation, allowing it to be placed anywhere in an application,
806-
* as defined in Bean archives. A bean class with a bean defining annotation is said to be an implicit bean.
807-
* The set of bean defining annotations contains:
808-
* <ul>
809-
* <li>{@link ApplicationScoped @ApplicationScoped}, {@link SessionScoped @SessionScoped},
810-
* {@link ConversationScoped @ConversationScoped} and {@link RequestScoped @RequestScoped} annotations
811-
* </li>
812-
* <li>all other normal scope types</li>
813-
* <li>{@link javax.interceptor.Interceptor @Interceptor} and {@link javax.decorator.Decorator @Decorator} annotations</li>
814-
* <li>all stereotype annotations (i.e. annotations annotated with {@link Stereotype @Stereotype})</li>
815-
* <li>the {@link Dependent @Dependent} scope annotation</li>
816-
* </ul>
817-
*
818-
* @param type
819-
* @param includedInterceptor
820-
* @param includedDecorator
821-
* @return
822-
*/
823-
public boolean isDefiningAnnotationType(Class<?> type, boolean includedInterceptor, boolean includedDecorator) {
824-
825-
if (includedInterceptor && interceptorManager.isInterceptorClass(type)) {
826-
return true;
827-
}
828-
if (includedDecorator && isDecorator(type)) {
829-
return true;
830-
}
831-
832-
boolean hasDefiningAnnotation = false;
833-
834-
Annotation[] annotations = type.getAnnotations();
835-
for (Annotation annotation : annotations) {
836-
Class<? extends Annotation> annotationType = annotation.annotationType();
837-
if (isScope(annotationType) ||
838-
isNormalScope(annotationType) ||
839-
isStereotype(annotationType)) {
840-
hasDefiningAnnotation = true;
841-
break;
842-
}
843-
}
844-
845-
return hasDefiningAnnotation;
846-
}
847-
848-
public void setClassLoader(ClassLoader classLoader) {
849-
this.classLoader = classLoader;
850-
}
851-
852765
public void disableDiscovery() {
853766
this.discoveryEnabled = false;
854767
}
@@ -931,4 +844,8 @@ private static List<Class<?>> getBeanTypes(Map<BeanTypeSource, List<Class<?>>> r
931844
}
932845
return unmodifiableList(beanTypes);
933846
}
847+
848+
private ClassLoader getClassLoader() {
849+
return standardBeanManager.getClassLoader();
850+
}
934851
}

0 commit comments

Comments
 (0)