下面列出了org.springframework.beans.factory.support.AbstractBeanDefinition#setAttribute ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private BeanDefinition buildSessionFactoryBeanDefinition(Element element, String name, BeanDefinitionParserDelegate beanDefinitionParserDelegate, BeanDefinitionRegistry beanDefinitionRegistry) {
AbstractBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setAttribute(ID_ATTRIBUTE, name + SESSION_FACTORY_SUFFIX);
beanDefinition.setBeanClass(LocalSessionFactoryBean.class);
beanDefinition.setParentName(SESSION_FACTORY_PARENT_BEAN_NAME);
MutablePropertyValues propertyValues = new MutablePropertyValues();
propertyValues.add("dataSource", new RuntimeBeanReference(name + DATA_SOURCE_SUFFIX));
if (element.hasAttribute(TABLE_PREFIX_NAME) && !StringUtil.isEmpty(element.getAttribute(TABLE_PREFIX_NAME))) {
AbstractBeanDefinition namingStrategyBeanDefinition = new GenericBeanDefinition();
String randomBeanName = UUID.randomUUID().toString();
namingStrategyBeanDefinition.setAttribute(ID_ATTRIBUTE, randomBeanName);
namingStrategyBeanDefinition.setBeanClass(HibernateNamingStrategy.class);
MutablePropertyValues mutablePropertyValues = new MutablePropertyValues();
mutablePropertyValues.add("prefix", element.getAttribute(TABLE_PREFIX_NAME));
namingStrategyBeanDefinition.setPropertyValues(mutablePropertyValues);
beanDefinitionRegistry.registerBeanDefinition(randomBeanName, namingStrategyBeanDefinition);
propertyValues.addPropertyValue("namingStrategy", new RuntimeBeanReference(randomBeanName));
}
beanDefinition.setPropertyValues(propertyValues);
beanDefinitionParserDelegate.parsePropertyElements(element, beanDefinition);
return beanDefinition;
}
private void registerFeignClient(BeanDefinitionRegistry registry,
AnnotationMetadata annotationMetadata, Map<String, Object> attributes) {
String className = annotationMetadata.getClassName();
BeanDefinitionBuilder definition = BeanDefinitionBuilder
.genericBeanDefinition(FeignClientFactoryBean.class);
validate(attributes);
definition.addPropertyValue("url", getUrl(attributes));
definition.addPropertyValue("path", getPath(attributes));
String name = getName(attributes);
definition.addPropertyValue("name", name);
String contextId = getContextId(attributes);
definition.addPropertyValue("contextId", contextId);
definition.addPropertyValue("type", className);
definition.addPropertyValue("decode404", attributes.get("decode404"));
definition.addPropertyValue("fallback", attributes.get("fallback"));
definition.addPropertyValue("fallbackFactory", attributes.get("fallbackFactory"));
definition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);
String alias = contextId + "FeignClient";
AbstractBeanDefinition beanDefinition = definition.getBeanDefinition();
beanDefinition.setAttribute(FactoryBean.OBJECT_TYPE_ATTRIBUTE, className);
// has a default, won't be null
boolean primary = (Boolean) attributes.get("primary");
beanDefinition.setPrimary(primary);
String qualifier = getQualifier(attributes);
if (StringUtils.hasText(qualifier)) {
alias = qualifier;
}
BeanDefinitionHolder holder = new BeanDefinitionHolder(beanDefinition, className,
new String[] { alias });
BeanDefinitionReaderUtils.registerBeanDefinition(holder, registry);
}
static AbstractBeanDefinition of(Class<? extends NativeQuery> classe, Object source) {
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(classe.getName());
builder.getRawBeanDefinition().setSource(source);
builder.setLazyInit(false);
builder.setScope(BeanDefinition.SCOPE_SINGLETON);
AbstractBeanDefinition beanDefinition = builder.getBeanDefinition();
beanDefinition.setInstanceSupplier(() -> source);
beanDefinition.setAttribute("factoryBeanObjectType", classe.getName());
return beanDefinition;
}
static void initBeanMetadataAttributes(AbstractBeanDefinition beanDefinition,
Map<String, Object> configurationProperties,
boolean ignoreUnknownFields, boolean ignoreInvalidFields) {
beanDefinition.setAttribute(CONFIGURATION_PROPERTIES_ATTRIBUTE_NAME, configurationProperties);
beanDefinition.setAttribute(IGNORE_UNKNOWN_FIELDS_ATTRIBUTE_NAME, ignoreUnknownFields);
beanDefinition.setAttribute(IGNORE_INVALID_FIELDS_ATTRIBUTE_NAME, ignoreInvalidFields);
}
@Override
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
if (StringUtil.isEmpty(element.getAttribute(NAME_ATTRIBUTE))) {
parserContext.getReaderContext().error("CommonBaseService must have name attribute", element);
}
AbstractBeanDefinition beanDefinition = builder.getBeanDefinition();
BeanDefinitionRegistry beanDefinitionRegistry = parserContext.getRegistry();
BeanDefinitionParserDelegate delegate = parserContext.getDelegate();
String name = element.getAttribute(NAME_ATTRIBUTE);
beanDefinition.setAttribute(ID_ATTRIBUTE, name + COMMON_BASE_SERVICE_SUFFIX);
beanDefinition.setBeanClassName(CLASS_NAME);
beanDefinitionRegistry.registerBeanDefinition(name + DATA_SOURCE_SUFFIX, buildDataSourceBeanDefinition(element, name));
beanDefinitionRegistry.registerBeanDefinition(name + SQL_SESSION_FACTORY_SUFFIX, buildSqlSessionFactoryBeanDefinition(element, name));
beanDefinitionRegistry.registerBeanDefinition(name + SESSION_FACTORY_SUFFIX, buildSessionFactoryBeanDefinition(element, name, parserContext.getDelegate(), beanDefinitionRegistry));
beanDefinitionRegistry.registerBeanDefinition(name + SQL_SESSION_TEMPLATE_SUFFIX, buildSqlSessionTemplateBeanDefinition(element, name));
beanDefinitionRegistry.registerBeanDefinition(name + COMMON_BASE_DAO_SUFFIX, buildCommonBaseDaoBeanDefinition(element, name));
builder.addPropertyReference(COMMON_BASE_DAO_FIELD_NAME, name + COMMON_BASE_DAO_SUFFIX);
element.setAttribute(ID_ATTRIBUTE, name + COMMON_BASE_SERVICE_SUFFIX);
List<String> expressionList = buildExpressionList(element, delegate);
if (expressionList.size() > 0) {
beanDefinitionRegistry.registerBeanDefinition(name + HIBERNATE_TRANSACTION_MANAGER_SUFFIX, buildHibernateTransactionManagerBeanDefinition(element, name));
beanDefinitionRegistry.registerBeanDefinition(name + TRANSACTION_ATTRIBUTE_SOURCE_SUFFIX, buildTransactionAttributeSourceBeanDefinition());
beanDefinitionRegistry.registerBeanDefinition(name + HIBERNATE_ADVICE_SUFFIX, buildHibernateAdviceBeanDefinition(element, name));
buildPointcutAndAdvisorBeanDefinition(name, expressionList, parserContext, beanDefinitionRegistry);
}
}
private BeanDefinition buildDataSourceBeanDefinition(Element element, String name) {
AbstractBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setAttribute(ID_ATTRIBUTE, name + DATA_SOURCE_SUFFIX);
beanDefinition.setBeanClass(SimpleDataSource.class);
MutablePropertyValues propertyValues = new MutablePropertyValues();
propertyValues.add("name", name);
beanDefinition.setPropertyValues(propertyValues);
return beanDefinition;
}
private BeanDefinition buildSqlSessionFactoryBeanDefinition(Element element, String name) {
AbstractBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setAttribute(ID_ATTRIBUTE, name + SQL_SESSION_FACTORY_SUFFIX);
beanDefinition.setBeanClass(SqlSessionFactoryBean.class);
beanDefinition.setParentName(SQL_SESSION_FACTORY_PARENT_BEAN_NAME);
MutablePropertyValues propertyValues = new MutablePropertyValues();
propertyValues.add("dataSource", new RuntimeBeanReference(name + DATA_SOURCE_SUFFIX));
propertyValues.add("mapperLocations", MAPPER_LOCATIONS_PREFIX + name + MAPPER_LOCATIONS_SUFFIX);
beanDefinition.setPropertyValues(propertyValues);
return beanDefinition;
}
private BeanDefinition buildSqlSessionTemplateBeanDefinition(Element element, String name) {
AbstractBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setAttribute(ID_ATTRIBUTE, name + SQL_SESSION_TEMPLATE_SUFFIX);
beanDefinition.setBeanClass(SqlSessionTemplate.class);
ConstructorArgumentValues constructorArgumentValues = new ConstructorArgumentValues();
constructorArgumentValues.addIndexedArgumentValue(0, new RuntimeBeanReference(name + SQL_SESSION_FACTORY_SUFFIX));
beanDefinition.setConstructorArgumentValues(constructorArgumentValues);
return beanDefinition;
}
private BeanDefinition buildCommonBaseDaoBeanDefinition(Element element, String name) {
AbstractBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setAttribute(ID_ATTRIBUTE, name + COMMON_BASE_DAO_SUFFIX);
beanDefinition.setBeanClass(COMMON_BASE_DAO_CLASS);
MutablePropertyValues propertyValues = new MutablePropertyValues();
propertyValues.add("sessionFactory", new RuntimeBeanReference(name + SESSION_FACTORY_SUFFIX));
propertyValues.add("sqlSessionTemplate", new RuntimeBeanReference(name + SQL_SESSION_TEMPLATE_SUFFIX));
propertyValues.add("tablePrefix", element.getAttribute(TABLE_PREFIX_NAME));
beanDefinition.setPropertyValues(propertyValues);
return beanDefinition;
}
private BeanDefinition buildHibernateTransactionManagerBeanDefinition(Element element, String name) {
AbstractBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setAttribute(ID_ATTRIBUTE, name + HIBERNATE_TRANSACTION_MANAGER_SUFFIX);
beanDefinition.setBeanClass(HibernateTransactionManager.class);
MutablePropertyValues propertyValues = new MutablePropertyValues();
propertyValues.add("sessionFactory", new RuntimeBeanReference(name + SESSION_FACTORY_SUFFIX));
beanDefinition.setPropertyValues(propertyValues);
return beanDefinition;
}
private BeanDefinition buildHibernateAdviceBeanDefinition(Element element, String name) {
AbstractBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setAttribute(ID_ATTRIBUTE, name + HIBERNATE_ADVICE_SUFFIX);
beanDefinition.setBeanClass(TransactionInterceptor.class);
MutablePropertyValues propertyValues = new MutablePropertyValues();
propertyValues.add("transactionManager", new RuntimeBeanReference(name + HIBERNATE_TRANSACTION_MANAGER_SUFFIX));
propertyValues.add("transactionAttributeSource", new RuntimeBeanReference(name + TRANSACTION_ATTRIBUTE_SOURCE_SUFFIX));
beanDefinition.setPropertyValues(propertyValues);
return beanDefinition;
}