Si vous lisez le code source de SpringAOP, [ce type de code](http://grepcode.com/file/repo1.maven.org/maven2/org.springframework/spring-aop/4.2.0.RELEASE/org/springframework/ Il y avait aop / aspectj / AspectJExpressionPointcut.java # AspectJExpressionPointcut) (code ajusté pour supprimer le bruit).
AspectJExpressionPointcut.java
public class AspectJExpressionPointcut {
private static final Set<PointcutPrimitive> SUPPORTED_PRIMITIVES = new HashSet();
static {
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.EXECUTION);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.ARGS);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.REFERENCE);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.THIS);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.TARGET);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.WITHIN);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_ANNOTATION);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_WITHIN);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_ARGS);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_TARGET);
logger = LogFactory.getLog(AspectJExpressionPointcut.class);
}
}
Il s'agit d'un mécanisme appelé Bloc d'initialisation statique. Jusqu'à présent, l'initialisation de List / Set etc. déclarée comme statique était écrite comme ↓, mais je pense que le bloc d'initialisation statique semble plus propre.
public class Hoge {
private static final Set<PointcutPrimitive> SUPPORTED_PRIMITIVES = new HashSet(){{
add(PointcutPrimitive.EXECUTION);
add(PointcutPrimitive.ARGS);
add(PointcutPrimitive.REFERENCE);
add(PointcutPrimitive.THIS);
add(PointcutPrimitive.TARGET);
add(PointcutPrimitive.WITHIN);
add(PointcutPrimitive.AT_ANNOTATION);
add(PointcutPrimitive.AT_WITHIN);
add(PointcutPrimitive.AT_ARGS);
add(PointcutPrimitive.AT_TARGET);
}};
}