Browse Source

Polishing

pull/1935/head
Juergen Hoeller 8 years ago
parent
commit
89cadfa8d9
  1. 8
      spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java
  2. 9
      spring-context/src/main/java/org/springframework/cache/annotation/AnnotationCacheOperationSource.java
  3. 4
      spring-context/src/main/java/org/springframework/cache/annotation/ProxyCachingConfiguration.java
  4. 4
      spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassEnhancer.java
  5. 2
      spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java
  6. 15
      spring-tx/src/main/java/org/springframework/transaction/annotation/AnnotationTransactionAttributeSource.java
  7. 7
      spring-tx/src/main/java/org/springframework/transaction/annotation/Ejb3TransactionAnnotationParser.java
  8. 29
      spring-tx/src/main/java/org/springframework/transaction/annotation/JtaTransactionAnnotationParser.java
  9. 40
      spring-tx/src/main/java/org/springframework/transaction/annotation/SpringTransactionAnnotationParser.java
  10. 16
      spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionAnnotationParser.java

8
spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java

@ -403,8 +403,8 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac
throws BeansException { throws BeansException {
Object result = existingBean; Object result = existingBean;
for (BeanPostProcessor beanProcessor : getBeanPostProcessors()) { for (BeanPostProcessor processor : getBeanPostProcessors()) {
result = beanProcessor.postProcessBeforeInitialization(result, beanName); result = processor.postProcessBeforeInitialization(result, beanName);
if (result == null) { if (result == null) {
return result; return result;
} }
@ -417,8 +417,8 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac
throws BeansException { throws BeansException {
Object result = existingBean; Object result = existingBean;
for (BeanPostProcessor beanProcessor : getBeanPostProcessors()) { for (BeanPostProcessor processor : getBeanPostProcessors()) {
result = beanProcessor.postProcessAfterInitialization(result, beanName); result = processor.postProcessAfterInitialization(result, beanName);
if (result == null) { if (result == null) {
return result; return result;
} }

9
spring-context/src/main/java/org/springframework/cache/annotation/AnnotationCacheOperationSource.java vendored

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2016 the original author or authors. * Copyright 2002-2018 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -128,10 +128,9 @@ public class AnnotationCacheOperationSource extends AbstractFallbackCacheOperati
/** /**
* Determine the cache operation(s) for the given {@link CacheOperationProvider}. * Determine the cache operation(s) for the given {@link CacheOperationProvider}.
* <p>This implementation delegates to configured * <p>This implementation delegates to configured
* {@link CacheAnnotationParser}s for parsing known annotations into * {@link CacheAnnotationParser CacheAnnotationParsers}
* Spring's metadata attribute class. * for parsing known annotations into Spring's metadata attribute class.
* <p>Can be overridden to support custom annotations that carry * <p>Can be overridden to support custom annotations that carry caching metadata.
* caching metadata.
* @param provider the cache operation provider to use * @param provider the cache operation provider to use
* @return the configured caching operations, or {@code null} if none found * @return the configured caching operations, or {@code null} if none found
*/ */

4
spring-context/src/main/java/org/springframework/cache/annotation/ProxyCachingConfiguration.java vendored

@ -30,6 +30,7 @@ import org.springframework.context.annotation.Role;
* to enable proxy-based annotation-driven cache management. * to enable proxy-based annotation-driven cache management.
* *
* @author Chris Beams * @author Chris Beams
* @author Juergen Hoeller
* @since 3.1 * @since 3.1
* @see EnableCaching * @see EnableCaching
* @see CachingConfigurationSelector * @see CachingConfigurationSelector
@ -41,8 +42,7 @@ public class ProxyCachingConfiguration extends AbstractCachingConfiguration {
@Bean(name = CacheManagementConfigUtils.CACHE_ADVISOR_BEAN_NAME) @Bean(name = CacheManagementConfigUtils.CACHE_ADVISOR_BEAN_NAME)
@Role(BeanDefinition.ROLE_INFRASTRUCTURE) @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public BeanFactoryCacheOperationSourceAdvisor cacheAdvisor() { public BeanFactoryCacheOperationSourceAdvisor cacheAdvisor() {
BeanFactoryCacheOperationSourceAdvisor advisor = BeanFactoryCacheOperationSourceAdvisor advisor = new BeanFactoryCacheOperationSourceAdvisor();
new BeanFactoryCacheOperationSourceAdvisor();
advisor.setCacheOperationSource(cacheOperationSource()); advisor.setCacheOperationSource(cacheOperationSource());
advisor.setAdvice(cacheInterceptor()); advisor.setAdvice(cacheInterceptor());
advisor.setOrder(this.enableCaching.<Integer>getNumber("order")); advisor.setOrder(this.enableCaching.<Integer>getNumber("order"));

4
spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassEnhancer.java

@ -189,8 +189,8 @@ class ConfigurationClassEnhancer {
@Override @Override
public int accept(Method method) { public int accept(Method method) {
for (int i = 0; i < this.callbacks.length; i++) { for (int i = 0; i < this.callbacks.length; i++) {
if (!(this.callbacks[i] instanceof ConditionalCallback) || Callback callback = this.callbacks[i];
((ConditionalCallback) this.callbacks[i]).isMatch(method)) { if (!(callback instanceof ConditionalCallback) || ((ConditionalCallback) callback).isMatch(method)) {
return i; return i;
} }
} }

2
spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java

@ -1079,7 +1079,7 @@ public class AnnotatedElementUtils {
if (containerType != null && !processor.aggregates()) { if (containerType != null && !processor.aggregates()) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Searches for repeatable annotations must supply an aggregating Processor"); "Searches for repeatable annotations must supply an aggregating Processor");
} }
try { try {

15
spring-tx/src/main/java/org/springframework/transaction/annotation/AnnotationTransactionAttributeSource.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2015 the original author or authors. * Copyright 2002-2018 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -85,7 +85,7 @@ public class AnnotationTransactionAttributeSource extends AbstractFallbackTransa
*/ */
public AnnotationTransactionAttributeSource(boolean publicMethodsOnly) { public AnnotationTransactionAttributeSource(boolean publicMethodsOnly) {
this.publicMethodsOnly = publicMethodsOnly; this.publicMethodsOnly = publicMethodsOnly;
this.annotationParsers = new LinkedHashSet<TransactionAnnotationParser>(2); this.annotationParsers = new LinkedHashSet<TransactionAnnotationParser>(4);
this.annotationParsers.add(new SpringTransactionAnnotationParser()); this.annotationParsers.add(new SpringTransactionAnnotationParser());
if (jta12Present) { if (jta12Present) {
this.annotationParsers.add(new JtaTransactionAnnotationParser()); this.annotationParsers.add(new JtaTransactionAnnotationParser());
@ -145,14 +145,13 @@ public class AnnotationTransactionAttributeSource extends AbstractFallbackTransa
* for parsing known annotations into Spring's metadata attribute class. * for parsing known annotations into Spring's metadata attribute class.
* Returns {@code null} if it's not transactional. * Returns {@code null} if it's not transactional.
* <p>Can be overridden to support custom annotations that carry transaction metadata. * <p>Can be overridden to support custom annotations that carry transaction metadata.
* @param ae the annotated method or class * @param element the annotated method or class
* @return TransactionAttribute the configured transaction attribute, * @return the configured transaction attribute, or {@code null} if none was found
* or {@code null} if none was found
*/ */
protected TransactionAttribute determineTransactionAttribute(AnnotatedElement ae) { protected TransactionAttribute determineTransactionAttribute(AnnotatedElement element) {
if (ae.getAnnotations().length > 0) { if (element.getAnnotations().length > 0) {
for (TransactionAnnotationParser annotationParser : this.annotationParsers) { for (TransactionAnnotationParser annotationParser : this.annotationParsers) {
TransactionAttribute attr = annotationParser.parseTransactionAnnotation(ae); TransactionAttribute attr = annotationParser.parseTransactionAnnotation(element);
if (attr != null) { if (attr != null) {
return attr; return attr;
} }

7
spring-tx/src/main/java/org/springframework/transaction/annotation/Ejb3TransactionAnnotationParser.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2012 the original author or authors. * Copyright 2002-2018 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -35,8 +35,8 @@ import org.springframework.transaction.interceptor.TransactionAttribute;
public class Ejb3TransactionAnnotationParser implements TransactionAnnotationParser, Serializable { public class Ejb3TransactionAnnotationParser implements TransactionAnnotationParser, Serializable {
@Override @Override
public TransactionAttribute parseTransactionAnnotation(AnnotatedElement ae) { public TransactionAttribute parseTransactionAnnotation(AnnotatedElement element) {
javax.ejb.TransactionAttribute ann = ae.getAnnotation(javax.ejb.TransactionAttribute.class); javax.ejb.TransactionAttribute ann = element.getAnnotation(javax.ejb.TransactionAttribute.class);
if (ann != null) { if (ann != null) {
return parseTransactionAnnotation(ann); return parseTransactionAnnotation(ann);
} }
@ -49,6 +49,7 @@ public class Ejb3TransactionAnnotationParser implements TransactionAnnotationPar
return new Ejb3TransactionAttribute(ann.value()); return new Ejb3TransactionAttribute(ann.value());
} }
@Override @Override
public boolean equals(Object other) { public boolean equals(Object other) {
return (this == other || other instanceof Ejb3TransactionAnnotationParser); return (this == other || other instanceof Ejb3TransactionAnnotationParser);

29
spring-tx/src/main/java/org/springframework/transaction/annotation/JtaTransactionAnnotationParser.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2016 the original author or authors. * Copyright 2002-2018 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -19,6 +19,7 @@ package org.springframework.transaction.annotation;
import java.io.Serializable; import java.io.Serializable;
import java.lang.reflect.AnnotatedElement; import java.lang.reflect.AnnotatedElement;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.core.annotation.AnnotatedElementUtils;
import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.core.annotation.AnnotationAttributes;
@ -38,9 +39,9 @@ import org.springframework.transaction.interceptor.TransactionAttribute;
public class JtaTransactionAnnotationParser implements TransactionAnnotationParser, Serializable { public class JtaTransactionAnnotationParser implements TransactionAnnotationParser, Serializable {
@Override @Override
public TransactionAttribute parseTransactionAnnotation(AnnotatedElement ae) { public TransactionAttribute parseTransactionAnnotation(AnnotatedElement element) {
AnnotationAttributes attributes = AnnotationAttributes attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(
AnnotatedElementUtils.getMergedAnnotationAttributes(ae, javax.transaction.Transactional.class); element, javax.transaction.Transactional.class);
if (attributes != null) { if (attributes != null) {
return parseTransactionAnnotation(attributes); return parseTransactionAnnotation(attributes);
} }
@ -55,23 +56,23 @@ public class JtaTransactionAnnotationParser implements TransactionAnnotationPars
protected TransactionAttribute parseTransactionAnnotation(AnnotationAttributes attributes) { protected TransactionAttribute parseTransactionAnnotation(AnnotationAttributes attributes) {
RuleBasedTransactionAttribute rbta = new RuleBasedTransactionAttribute(); RuleBasedTransactionAttribute rbta = new RuleBasedTransactionAttribute();
rbta.setPropagationBehaviorName( rbta.setPropagationBehaviorName(
RuleBasedTransactionAttribute.PREFIX_PROPAGATION + attributes.getEnum("value").toString()); RuleBasedTransactionAttribute.PREFIX_PROPAGATION + attributes.getEnum("value").toString());
ArrayList<RollbackRuleAttribute> rollBackRules = new ArrayList<RollbackRuleAttribute>();
Class<?>[] rbf = attributes.getClassArray("rollbackOn"); List<RollbackRuleAttribute> rollbackRules = new ArrayList<RollbackRuleAttribute>();
for (Class<?> rbRule : rbf) { for (Class<?> rbRule : attributes.getClassArray("rollbackOn")) {
RollbackRuleAttribute rule = new RollbackRuleAttribute(rbRule); rollbackRules.add(new RollbackRuleAttribute(rbRule));
rollBackRules.add(rule);
} }
Class<?>[] nrbf = attributes.getClassArray("dontRollbackOn"); for (Class<?> rbRule : attributes.getClassArray("dontRollbackOn")) {
for (Class<?> rbRule : nrbf) { rollbackRules.add(new NoRollbackRuleAttribute(rbRule));
NoRollbackRuleAttribute rule = new NoRollbackRuleAttribute(rbRule);
rollBackRules.add(rule);
} }
rbta.getRollbackRules().addAll(rollBackRules); rbta.setRollbackRules(rollbackRules);
return rbta; return rbta;
} }
@Override @Override
public boolean equals(Object other) { public boolean equals(Object other) {
return (this == other || other instanceof JtaTransactionAnnotationParser); return (this == other || other instanceof JtaTransactionAnnotationParser);

40
spring-tx/src/main/java/org/springframework/transaction/annotation/SpringTransactionAnnotationParser.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2015 the original author or authors. * Copyright 2002-2018 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -19,6 +19,7 @@ package org.springframework.transaction.annotation;
import java.io.Serializable; import java.io.Serializable;
import java.lang.reflect.AnnotatedElement; import java.lang.reflect.AnnotatedElement;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.core.annotation.AnnotatedElementUtils;
import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.core.annotation.AnnotationAttributes;
@ -38,8 +39,9 @@ import org.springframework.transaction.interceptor.TransactionAttribute;
public class SpringTransactionAnnotationParser implements TransactionAnnotationParser, Serializable { public class SpringTransactionAnnotationParser implements TransactionAnnotationParser, Serializable {
@Override @Override
public TransactionAttribute parseTransactionAnnotation(AnnotatedElement ae) { public TransactionAttribute parseTransactionAnnotation(AnnotatedElement element) {
AnnotationAttributes attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(ae, Transactional.class); AnnotationAttributes attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(
element, Transactional.class);
if (attributes != null) { if (attributes != null) {
return parseTransactionAnnotation(attributes); return parseTransactionAnnotation(attributes);
} }
@ -54,6 +56,7 @@ public class SpringTransactionAnnotationParser implements TransactionAnnotationP
protected TransactionAttribute parseTransactionAnnotation(AnnotationAttributes attributes) { protected TransactionAttribute parseTransactionAnnotation(AnnotationAttributes attributes) {
RuleBasedTransactionAttribute rbta = new RuleBasedTransactionAttribute(); RuleBasedTransactionAttribute rbta = new RuleBasedTransactionAttribute();
Propagation propagation = attributes.getEnum("propagation"); Propagation propagation = attributes.getEnum("propagation");
rbta.setPropagationBehavior(propagation.value()); rbta.setPropagationBehavior(propagation.value());
Isolation isolation = attributes.getEnum("isolation"); Isolation isolation = attributes.getEnum("isolation");
@ -61,31 +64,26 @@ public class SpringTransactionAnnotationParser implements TransactionAnnotationP
rbta.setTimeout(attributes.getNumber("timeout").intValue()); rbta.setTimeout(attributes.getNumber("timeout").intValue());
rbta.setReadOnly(attributes.getBoolean("readOnly")); rbta.setReadOnly(attributes.getBoolean("readOnly"));
rbta.setQualifier(attributes.getString("value")); rbta.setQualifier(attributes.getString("value"));
ArrayList<RollbackRuleAttribute> rollBackRules = new ArrayList<RollbackRuleAttribute>();
Class<?>[] rbf = attributes.getClassArray("rollbackFor"); List<RollbackRuleAttribute> rollbackRules = new ArrayList<RollbackRuleAttribute>();
for (Class<?> rbRule : rbf) { for (Class<?> rbRule : attributes.getClassArray("rollbackFor")) {
RollbackRuleAttribute rule = new RollbackRuleAttribute(rbRule); rollbackRules.add(new RollbackRuleAttribute(rbRule));
rollBackRules.add(rule);
} }
String[] rbfc = attributes.getStringArray("rollbackForClassName"); for (String rbRule : attributes.getStringArray("rollbackForClassName")) {
for (String rbRule : rbfc) { rollbackRules.add(new RollbackRuleAttribute(rbRule));
RollbackRuleAttribute rule = new RollbackRuleAttribute(rbRule);
rollBackRules.add(rule);
} }
Class<?>[] nrbf = attributes.getClassArray("noRollbackFor"); for (Class<?> rbRule : attributes.getClassArray("noRollbackFor")) {
for (Class<?> rbRule : nrbf) { rollbackRules.add(new NoRollbackRuleAttribute(rbRule));
NoRollbackRuleAttribute rule = new NoRollbackRuleAttribute(rbRule);
rollBackRules.add(rule);
} }
String[] nrbfc = attributes.getStringArray("noRollbackForClassName"); for (String rbRule : attributes.getStringArray("noRollbackForClassName")) {
for (String rbRule : nrbfc) { rollbackRules.add(new NoRollbackRuleAttribute(rbRule));
NoRollbackRuleAttribute rule = new NoRollbackRuleAttribute(rbRule);
rollBackRules.add(rule);
} }
rbta.getRollbackRules().addAll(rollBackRules); rbta.setRollbackRules(rollbackRules);
return rbta; return rbta;
} }
@Override @Override
public boolean equals(Object other) { public boolean equals(Object other) {
return (this == other || other instanceof SpringTransactionAnnotationParser); return (this == other || other instanceof SpringTransactionAnnotationParser);

16
spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionAnnotationParser.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2013 the original author or authors. * Copyright 2002-2018 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -38,15 +38,13 @@ public interface TransactionAnnotationParser {
/** /**
* Parse the transaction attribute for the given method or class, * Parse the transaction attribute for the given method or class,
* based on a known annotation type. * based on an annotation type understood by this parser.
* <p>This essentially parses a known transaction annotation into Spring's * <p>This essentially parses a known transaction annotation into Spring's metadata
* metadata attribute class. Returns {@code null} if the method/class * attribute class. Returns {@code null} if the method/class is not transactional.
* is not transactional. * @param element the annotated method or class
* @param ae the annotated method or class * @return the configured transaction attribute, or {@code null} if none found
* @return TransactionAttribute the configured transaction attribute,
* or {@code null} if none was found
* @see AnnotationTransactionAttributeSource#determineTransactionAttribute * @see AnnotationTransactionAttributeSource#determineTransactionAttribute
*/ */
TransactionAttribute parseTransactionAnnotation(AnnotatedElement ae); TransactionAttribute parseTransactionAnnotation(AnnotatedElement element);
} }

Loading…
Cancel
Save