@Override public ScopeMetadata resolveScopeMetadata(final BeanDefinition definition) { if (definition instanceof AnnotatedBeanDefinition) { final AnnotatedBeanDefinition beanDefinition = (AnnotatedBeanDefinition) definition; final ScopeMetadata metadata = new ScopeMetadata(); final Set<String> annotationTypes = beanDefinition.getMetadata().getAnnotationTypes(); if (annotationTypes.contains(RequestScoped.class .getName())) { metadata.setScopeName("request"); metadata.setScopedProxyMode(ScopedProxyMode.TARGET_CLASS); } else if (annotationTypes .contains(ApplicationScoped.class.getName())) { metadata.setScopeName("singleton"); } else { return super.resolveScopeMetadata(definition); } return metadata; } else { return super.resolveScopeMetadata(definition); } }
@Test public void testNonAnnotationBeanDefinition() { BeanDefinition bean = mock(BeanDefinition.class); final CdiScopeMetadataResolver cdiScopeMetadataResolver = new CdiScopeMetadataResolver(); final ScopeMetadata scopeMetadata = cdiScopeMetadataResolver.resolveScopeMetadata(bean); assertNotNull(scopeMetadata); assertEquals("singleton", scopeMetadata.getScopeName()); }
private ApplicationContext createContext(final ScopedProxyMode scopedProxyMode) { GenericWebApplicationContext context = new GenericWebApplicationContext(); ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(context); scanner.setIncludeAnnotationConfig(false); scanner.setScopeMetadataResolver(new ScopeMetadataResolver() { @Override public ScopeMetadata resolveScopeMetadata(BeanDefinition definition) { ScopeMetadata metadata = new ScopeMetadata(); if (definition instanceof AnnotatedBeanDefinition) { AnnotatedBeanDefinition annDef = (AnnotatedBeanDefinition) definition; for (String type : annDef.getMetadata().getAnnotationTypes()) { if (type.equals(javax.inject.Singleton.class.getName())) { metadata.setScopeName(BeanDefinition.SCOPE_SINGLETON); break; } else if (annDef.getMetadata().getMetaAnnotationTypes(type).contains(javax.inject.Scope.class.getName())) { metadata.setScopeName(type.substring(type.length() - 13, type.length() - 6).toLowerCase()); metadata.setScopedProxyMode(scopedProxyMode); break; } else if (type.startsWith("javax.inject")) { metadata.setScopeName(BeanDefinition.SCOPE_PROTOTYPE); } } } return metadata; } }); // Scan twice in order to find errors in the bean definition compatibility check. scanner.scan(getClass().getPackage().getName()); scanner.scan(getClass().getPackage().getName()); context.registerAlias("classPathBeanDefinitionScannerJsr330ScopeIntegrationTests.SessionScopedTestBean", "session"); context.refresh(); return context; }
@Override public ScopeMetadata resolveScopeMetadata(BeanDefinition definition) { ScopeMetadata metadata = new ScopeMetadata(); metadata.setScopeName(BeanDefinition.SCOPE_PROTOTYPE); return metadata; }
private void registerBean(BeanDefinitionRegistry registry, String name,Class<?> beanClass) { AnnotatedGenericBeanDefinition abd = new AnnotatedGenericBeanDefinition(beanClass); ScopeMetadata scopeMetadata = this.scopeMetadataResolver.resolveScopeMetadata(abd); abd.setScope(scopeMetadata.getScopeName()); // 可以自动生成name String beanName = (name != null ? name : this.beanNameGenerator.generateBeanName(abd, registry)); AnnotationConfigUtils.processCommonDefinitionAnnotations(abd); BeanDefinitionHolder definitionHolder = new BeanDefinitionHolder(abd,beanName); BeanDefinitionReaderUtils.registerBeanDefinition(definitionHolder,registry); }
/** * @see org.springframework.context.annotation.ScopeMetadataResolver#resolveScopeMetadata(org.springframework.beans.factory.config.BeanDefinition) */ public ScopeMetadata resolveScopeMetadata(BeanDefinition definition) { ScopeMetadata metadata = new ScopeMetadata(); if (definition instanceof AnnotatedBeanDefinition) { AnnotatedBeanDefinition annDef = (AnnotatedBeanDefinition) definition; Map<String, Object> attributes = annDef.getMetadata().getAnnotationAttributes(Component.class.getName()); if (attributes != null) { metadata.setScopeName((String) attributes.get("value")); } } return metadata; }
@Override public ScopeMetadata resolveScopeMetadata(final BeanDefinition definition) { final ScopeMetadata metadata = new ScopeMetadata(); metadata.setScopeName(SCOPE_PROTOTYPE); return metadata; }
public ScopeMetadata resolveScopeMetadata(@SuppressWarnings("unused") BeanDefinition bd) { ScopeMetadata metadata = new ScopeMetadata(); metadata.setScopeName(BeanDefinition.SCOPE_PROTOTYPE); return metadata; }