Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
6deb1aca
S
spring-framework
项目概览
爱吃血肠
/
spring-framework
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
spring-framework
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6deb1aca
编写于
2月 28, 2009
作者:
C
Chris Beams
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Refactoring and repackaging
上级
d4fdad22
变更
14
隐藏空白更改
内联
并排
Showing
14 changed file
with
89 addition
and
160 deletion
+89
-160
org.springframework.config.java/src/main/java/org/springframework/config/java/ext/Bean.java
...c/main/java/org/springframework/config/java/ext/Bean.java
+1
-2
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/factory/support/ConfigurationClassBeanDefinitionReader.java
...ctory/support/ConfigurationClassBeanDefinitionReader.java
+7
-16
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/AnnotationAdapter.java
...ework/config/java/internal/parsing/AnnotationAdapter.java
+1
-1
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/AsmUtils.java
...pringframework/config/java/internal/parsing/AsmUtils.java
+1
-1
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/ConfigurationClassMethodVisitor.java
...ava/internal/parsing/ConfigurationClassMethodVisitor.java
+3
-3
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/ConfigurationClassVisitor.java
...nfig/java/internal/parsing/ConfigurationClassVisitor.java
+2
-2
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/ConfigurationParser.java
...ork/config/java/internal/parsing/ConfigurationParser.java
+42
-23
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/MutableAnnotation.java
...ework/config/java/internal/parsing/MutableAnnotation.java
+1
-1
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/MutableAnnotationArrayVisitor.java
.../java/internal/parsing/MutableAnnotationArrayVisitor.java
+2
-2
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/MutableAnnotationInvocationHandler.java
.../internal/parsing/MutableAnnotationInvocationHandler.java
+1
-1
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/MutableAnnotationUtils.java
.../config/java/internal/parsing/MutableAnnotationUtils.java
+1
-1
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/MutableAnnotationVisitor.java
...onfig/java/internal/parsing/MutableAnnotationVisitor.java
+2
-2
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/asm/AsmConfigurationParser.java
...fig/java/internal/parsing/asm/AsmConfigurationParser.java
+0
-88
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/process/InternalConfigurationPostProcessor.java
.../internal/process/InternalConfigurationPostProcessor.java
+25
-17
未找到文件。
org.springframework.config.java/src/main/java/org/springframework/config/java/ext/Bean.java
浏览文件 @
6deb1aca
...
...
@@ -67,8 +67,7 @@ import org.springframework.config.java.Validator;
@Documented
@Factory
(
registrarType
=
BeanRegistrar
.
class
,
callbackType
=
BeanMethodInterceptor
.
class
,
validatorTypes
={
BeanValidator
.
class
,
IllegalBeanOverrideValidator
.
class
})
validatorTypes
={
BeanValidator
.
class
,
IllegalBeanOverrideValidator
.
class
})
public
@interface
Bean
{
/**
...
...
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/factory/support/
AsmJavaConfig
BeanDefinitionReader.java
→
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/factory/support/
ConfigurationClass
BeanDefinitionReader.java
浏览文件 @
6deb1aca
...
...
@@ -15,23 +15,17 @@
*/
package
org.springframework.config.java.internal.factory.support
;
import
static
org
.
springframework
.
config
.
java
.
Util
.*;
import
java.util.ArrayList
;
import
java.util.Map
;
import
org.objectweb.asm.ClassReader
;
import
org.springframework.beans.factory.BeanDefinitionStoreException
;
import
org.springframework.beans.factory.support.BeanDefinitionReader
;
import
org.springframework.beans.factory.support.BeanDefinitionRegistry
;
import
org.springframework.beans.factory.support.DefaultListableBeanFactory
;
import
org.springframework.config.java.Configuration
;
import
org.springframework.config.java.ConfigurationModel
;
import
org.springframework.config.java.MalformedJavaConfigurationException
;
import
org.springframework.config.java.UsageError
;
import
org.springframework.config.java.internal.parsing.ConfigurationParser
;
import
org.springframework.config.java.internal.parsing.asm.AsmConfigurationParser
;
import
org.springframework.config.java.internal.parsing.asm.AsmUtils
;
import
org.springframework.core.io.ClassPathResource
;
...
...
@@ -44,17 +38,17 @@ import org.springframework.core.io.ClassPathResource;
*
* @author Chris Beams
*/
public
class
AsmJavaConfig
BeanDefinitionReader
{
public
class
ConfigurationClass
BeanDefinitionReader
{
private
final
ConfigurationModelBeanDefinitionReader
modelBeanDefinitionReader
;
/**
* Creates a new {@link
AsmJavaConfig
BeanDefinitionReader}.
* Creates a new {@link
ConfigurationClass
BeanDefinitionReader}.
*
* @param
registry {@link BeanDefinitionRegist
ry} into which new bean definitions will be
* @param
beanFactory {@link DefaultListableBeanFacto
ry} into which new bean definitions will be
* registered as they are read from Configuration classes.
*/
public
AsmJavaConfig
BeanDefinitionReader
(
DefaultListableBeanFactory
beanFactory
)
{
public
ConfigurationClass
BeanDefinitionReader
(
DefaultListableBeanFactory
beanFactory
)
{
this
.
modelBeanDefinitionReader
=
new
ConfigurationModelBeanDefinitionReader
(
beanFactory
);
}
...
...
@@ -64,13 +58,10 @@ public class AsmJavaConfigBeanDefinitionReader {
* supplied during construction.
*/
public
int
loadBeanDefinitions
(
ConfigurationModel
model
,
Map
<
String
,
ClassPathResource
>
configClassResources
)
throws
BeanDefinitionStoreException
{
ConfigurationParser
parser
=
new
Asm
ConfigurationParser
(
model
);
ConfigurationParser
parser
=
new
ConfigurationParser
(
model
);
for
(
String
id
:
configClassResources
.
keySet
())
{
String
resourcePath
=
configClassResources
.
get
(
id
).
getPath
();
ClassReader
configClassReader
=
AsmUtils
.
newClassReader
(
getClassAsStream
(
resourcePath
));
parser
.
parse
(
configClassReader
,
id
);
}
for
(
String
id
:
configClassResources
.
keySet
())
parser
.
parse
(
configClassResources
.
get
(
id
),
id
);
ArrayList
<
UsageError
>
errors
=
new
ArrayList
<
UsageError
>();
model
.
validate
(
errors
);
...
...
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/
asm/
AnnotationAdapter.java
→
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/AnnotationAdapter.java
浏览文件 @
6deb1aca
...
...
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.springframework.config.java.internal.parsing
.asm
;
package
org.springframework.config.java.internal.parsing
;
import
org.objectweb.asm.AnnotationVisitor
;
...
...
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/
asm/
AsmUtils.java
→
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/AsmUtils.java
浏览文件 @
6deb1aca
...
...
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.springframework.config.java.internal.parsing
.asm
;
package
org.springframework.config.java.internal.parsing
;
import
java.io.IOException
;
import
java.io.InputStream
;
...
...
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/
asm/
ConfigurationClassMethodVisitor.java
→
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/ConfigurationClassMethodVisitor.java
浏览文件 @
6deb1aca
...
...
@@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.springframework.config.java.internal.parsing
.asm
;
package
org.springframework.config.java.internal.parsing
;
import
static
org
.
springframework
.
config
.
java
.
Util
.*;
import
static
org
.
springframework
.
config
.
java
.
internal
.
parsing
.
asm
.
AsmUtils
.*;
import
static
org
.
springframework
.
config
.
java
.
internal
.
parsing
.
asm
.
MutableAnnotationUtils
.*;
import
static
org
.
springframework
.
config
.
java
.
internal
.
parsing
.
AsmUtils
.*;
import
static
org
.
springframework
.
config
.
java
.
internal
.
parsing
.
MutableAnnotationUtils
.*;
import
static
org
.
springframework
.
util
.
ClassUtils
.*;
import
java.lang.annotation.Annotation
;
...
...
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/
asm/
ConfigurationClassVisitor.java
→
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/ConfigurationClassVisitor.java
浏览文件 @
6deb1aca
...
...
@@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.springframework.config.java.internal.parsing
.asm
;
package
org.springframework.config.java.internal.parsing
;
import
static
org
.
springframework
.
config
.
java
.
Util
.*;
import
static
org
.
springframework
.
config
.
java
.
internal
.
parsing
.
asm
.
MutableAnnotationUtils
.*;
import
static
org
.
springframework
.
config
.
java
.
internal
.
parsing
.
MutableAnnotationUtils
.*;
import
static
org
.
springframework
.
util
.
ClassUtils
.*;
import
java.lang.annotation.Annotation
;
...
...
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/ConfigurationParser.java
浏览文件 @
6deb1aca
...
...
@@ -15,46 +15,65 @@
*/
package
org.springframework.config.java.internal.parsing
;
import
org.objectweb.asm.ClassReader
;
import
org.springframework.beans.factory.config.BeanDefinition
;
import
org.springframework.config.java.Configuration
;
import
org.springframework.config.java.ConfigurationClass
;
import
org.springframework.config.java.ConfigurationModel
;
import
org.springframework.config.java.Util
;
import
org.springframework.core.io.ClassPathResource
;
/**
* Parses a {@link Configuration} class definition, usually into a {@link ConfigurationModel}.
* Parses a {@link Configuration} class definition, populating a {@link ConfigurationModel}.
* This ASM-based implementation avoids reflection and eager classloading in order to
* interoperate effectively with tooling (Spring IDE) and OSGi environments.
* <p>
* This interface aids in separating the process of reading a class file (via reflection, ASM, etc)
* from the process of registering bean definitions based on the content of that class.
* This class helps separate the concern of parsing the structure of a Configuration class
* from the concern of registering {@link BeanDefinition} objects based on the content of
* that model.
*
* @see org.springframework.config.java.internal.parsing.asm.AsmConfigurationParser
* @see org.springframework.config.java.ConfigurationModel
* @see org.springframework.config.java.internal.factory.support.ConfigurationModelBeanDefinitionReader
*
*
* @author Chris Beams
*/
public
interface
ConfigurationParser
{
*/
public
class
ConfigurationParser
{
/**
* Parse the Configuration object represented by <var>configurationSource.</var>
*
* @param configurationSource representation of a Configuration class, may be java.lang.Class,
* ASM representation or otherwise
*
* @see org.springframework.config.java.Configuration
* Model to be populated during calls to {@link #parse(Object, String)}
*/
void
parse
(
Object
configurationSource
)
;
private
final
ConfigurationModel
model
;
/**
* Optionally propagate a custom name for this <var>configurationSource</var>. Usually this id
* corresponds to the name of a Configuration bean as declared in a beans XML.
* Creates a new parser instance that will be used to populate <var>model</var>.
*
* @param configurationSource representation of a Configuration class, may be java.lang.Class,
* ASM representation or otherwise
* @param configurationId name of this configuration class, probably corresponding to a
* bean id
* @param model model to be populated by each successive call to {@link #parse(Object, String)}
*/
public
ConfigurationParser
(
ConfigurationModel
model
)
{
this
.
model
=
model
;
}
/**
* Parse the {@link Configuration @Configuration} class encapsulated by
* <var>configurationSource</var>.
*
* @see org.springframework.config.java.Configuration
* @see org.springframework.config.java.process.ConfigurationPostProcessor
* @param configurationSource reader for Configuration class being parsed
* @param configurationId may be null, but if populated represents the bean id
* (assumes that this configuration class was configured via XML)
*/
void
parse
(
Object
configurationSource
,
String
configurationId
);
public
void
parse
(
ClassPathResource
resource
,
String
configurationId
)
{
String
resourcePath
=
resource
.
getPath
();
ClassReader
configClassReader
=
AsmUtils
.
newClassReader
(
Util
.
getClassAsStream
(
resourcePath
));
ConfigurationClass
configClass
=
new
ConfigurationClass
();
configClass
.
setBeanName
(
configurationId
);
configClassReader
.
accept
(
new
ConfigurationClassVisitor
(
configClass
,
model
),
false
);
model
.
add
(
configClass
);
}
}
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/
asm/
MutableAnnotation.java
→
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/MutableAnnotation.java
浏览文件 @
6deb1aca
...
...
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.springframework.config.java.internal.parsing
.asm
;
package
org.springframework.config.java.internal.parsing
;
/**
...
...
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/
asm/
MutableAnnotationArrayVisitor.java
→
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/MutableAnnotationArrayVisitor.java
浏览文件 @
6deb1aca
...
...
@@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.springframework.config.java.internal.parsing
.asm
;
package
org.springframework.config.java.internal.parsing
;
import
static
org
.
springframework
.
config
.
java
.
Util
.*;
import
static
org
.
springframework
.
config
.
java
.
internal
.
parsing
.
asm
.
MutableAnnotationUtils
.*;
import
static
org
.
springframework
.
config
.
java
.
internal
.
parsing
.
MutableAnnotationUtils
.*;
import
java.lang.annotation.Annotation
;
import
java.lang.reflect.Array
;
...
...
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/
asm/
MutableAnnotationInvocationHandler.java
→
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/MutableAnnotationInvocationHandler.java
浏览文件 @
6deb1aca
...
...
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.springframework.config.java.internal.parsing
.asm
;
package
org.springframework.config.java.internal.parsing
;
import
static
java
.
lang
.
String
.*;
import
static
org
.
springframework
.
core
.
annotation
.
AnnotationUtils
.*;
...
...
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/
asm/
MutableAnnotationUtils.java
→
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/MutableAnnotationUtils.java
浏览文件 @
6deb1aca
...
...
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.springframework.config.java.internal.parsing
.asm
;
package
org.springframework.config.java.internal.parsing
;
import
java.lang.annotation.Annotation
;
import
java.lang.reflect.Proxy
;
...
...
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/
asm/
MutableAnnotationVisitor.java
→
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/MutableAnnotationVisitor.java
浏览文件 @
6deb1aca
...
...
@@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.springframework.config.java.internal.parsing
.asm
;
package
org.springframework.config.java.internal.parsing
;
import
static
org
.
springframework
.
config
.
java
.
Util
.*;
import
static
org
.
springframework
.
config
.
java
.
internal
.
parsing
.
asm
.
MutableAnnotationUtils
.*;
import
static
org
.
springframework
.
config
.
java
.
internal
.
parsing
.
MutableAnnotationUtils
.*;
import
java.lang.annotation.Annotation
;
import
java.lang.reflect.Field
;
...
...
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/asm/AsmConfigurationParser.java
已删除
100644 → 0
浏览文件 @
d4fdad22
/*
* Copyright 2002-2008 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.springframework.config.java.internal.parsing.asm
;
import
org.objectweb.asm.ClassReader
;
import
org.springframework.config.java.Configuration
;
import
org.springframework.config.java.ConfigurationClass
;
import
org.springframework.config.java.ConfigurationModel
;
import
org.springframework.config.java.internal.parsing.ConfigurationParser
;
import
org.springframework.util.Assert
;
/**
* ASM-based implementation of {@link ConfigurationParser}. Avoids reflection and eager classloading
* in order to interoperate effectively with tooling (Spring IDE).
*
* @see org.springframework.config.java.model.AsmConfigurationParserTests
* @author Chris Beams
*/
public
class
AsmConfigurationParser
implements
ConfigurationParser
{
/**
* Model to be populated during calls to {@link #parse(Object)}
*/
private
final
ConfigurationModel
model
;
/**
* Creates a new parser instance that will be used to populate <var>model</var>.
*
* @param model model to be populated by each successive call to {@link #parse(Object)}
*/
public
AsmConfigurationParser
(
ConfigurationModel
model
)
{
this
.
model
=
model
;
}
/**
* Convenience implementation, delegates to {@link #parse(Object, String)},
* passing in {@code null} for the configurationId.
*
* @param configurationSource must be an ASM {@link ClassReader}
*/
public
void
parse
(
Object
configurationSource
)
{
parse
(
configurationSource
,
null
);
}
/**
* Parse the {@link Configuration @Configuration} class encapsulated by
* <var>configurationSource</var>.
*
* @param configurationSource must be an ASM {@link ClassReader}
* @param configurationId may be null, but if populated represents the bean id
* (assumes that this configuration class was configured via XML)
*/
public
void
parse
(
Object
configurationSource
,
String
configurationId
)
{
Assert
.
isInstanceOf
(
ClassReader
.
class
,
configurationSource
,
"configurationSource must be an ASM ClassReader"
);
ConfigurationClass
configClass
=
new
ConfigurationClass
();
configClass
.
setBeanName
(
configurationId
);
parse
((
ClassReader
)
configurationSource
,
configClass
);
}
/**
* Kicks off visiting <var>configClass</var> with {@link ConfigurationClassVisitor}
*/
private
void
parse
(
ClassReader
reader
,
ConfigurationClass
configClass
)
{
reader
.
accept
(
new
ConfigurationClassVisitor
(
configClass
,
model
),
false
);
model
.
add
(
configClass
);
}
}
org.springframework.config.java/src/main/java/org/springframework/config/java/internal/process/InternalConfigurationPostProcessor.java
浏览文件 @
6deb1aca
...
...
@@ -17,6 +17,7 @@ package org.springframework.config.java.internal.process;
import
static
org
.
springframework
.
config
.
java
.
Util
.*;
import
java.util.ArrayList
;
import
java.util.LinkedHashMap
;
import
org.apache.commons.logging.Log
;
...
...
@@ -29,8 +30,12 @@ import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import
org.springframework.beans.factory.support.DefaultListableBeanFactory
;
import
org.springframework.config.java.Configuration
;
import
org.springframework.config.java.ConfigurationModel
;
import
org.springframework.config.java.MalformedJavaConfigurationException
;
import
org.springframework.config.java.UsageError
;
import
org.springframework.config.java.internal.enhancement.ConfigurationEnhancer
;
import
org.springframework.config.java.internal.factory.support.AsmJavaConfigBeanDefinitionReader
;
import
org.springframework.config.java.internal.factory.support.ConfigurationClassBeanDefinitionReader
;
import
org.springframework.config.java.internal.factory.support.ConfigurationModelBeanDefinitionReader
;
import
org.springframework.config.java.internal.parsing.ConfigurationParser
;
import
org.springframework.config.java.process.ConfigurationPostProcessor
;
import
org.springframework.core.io.ClassPathResource
;
import
org.springframework.util.ClassUtils
;
...
...
@@ -46,19 +51,21 @@ public class InternalConfigurationPostProcessor implements BeanFactoryPostProces
* to parse and enhance them. Also registers any {@link BeanPostProcessor} objects
* necessary to fulfill JavaConfig requirements.
*/
public
void
postProcessBeanFactory
(
ConfigurableListableBeanFactory
b
eanFactory
)
throws
BeansException
{
if
(!(
b
eanFactory
instanceof
DefaultListableBeanFactory
))
public
void
postProcessBeanFactory
(
ConfigurableListableBeanFactory
clB
eanFactory
)
throws
BeansException
{
if
(!(
clB
eanFactory
instanceof
DefaultListableBeanFactory
))
throw
new
IllegalStateException
(
"beanFactory must be of type "
+
DefaultListableBeanFactory
.
class
.
getSimpleName
());
DefaultListableBeanFactory
beanFactory
=
(
DefaultListableBeanFactory
)
clBeanFactory
;
ConfigurationModel
model
=
new
ConfigurationModel
();
parseAnyConfigurationClasses
(
beanFactory
,
model
);
enhanceAnyConfigurationClasses
(
(
DefaultListableBeanFactory
)
beanFactory
,
model
);
enhanceAnyConfigurationClasses
(
beanFactory
,
model
);
}
private
void
parseAnyConfigurationClasses
(
Configurable
ListableBeanFactory
beanFactory
,
ConfigurationModel
model
)
{
private
void
parseAnyConfigurationClasses
(
Default
ListableBeanFactory
beanFactory
,
ConfigurationModel
model
)
{
// linked map is important for maintaining predictable ordering of configuration classes.
// this is important in bean / value override situations.
...
...
@@ -75,7 +82,18 @@ public class InternalConfigurationPostProcessor implements BeanFactoryPostProces
}
}
beanDefinitionReader
(
beanFactory
).
loadBeanDefinitions
(
model
,
configClassResources
);
ConfigurationModelBeanDefinitionReader
modelBeanDefinitionReader
=
new
ConfigurationModelBeanDefinitionReader
(
beanFactory
);
ConfigurationParser
parser
=
new
ConfigurationParser
(
model
);
for
(
String
id
:
configClassResources
.
keySet
())
parser
.
parse
(
configClassResources
.
get
(
id
),
id
);
ArrayList
<
UsageError
>
errors
=
new
ArrayList
<
UsageError
>();
model
.
validate
(
errors
);
if
(
errors
.
size
()
>
0
)
throw
new
MalformedJavaConfigurationException
(
errors
.
toArray
(
new
UsageError
[]
{
}));
modelBeanDefinitionReader
.
loadBeanDefinitions
(
model
);
}
/**
...
...
@@ -96,7 +114,6 @@ public class InternalConfigurationPostProcessor implements BeanFactoryPostProces
for
(
String
beanName
:
beanFactory
.
getBeanDefinitionNames
())
{
BeanDefinition
beanDef
=
beanFactory
.
getBeanDefinition
(
beanName
);
// is the beanDef marked as representing a configuration class?
if
(!
isConfigClass
(
beanDef
))
continue
;
...
...
@@ -117,15 +134,6 @@ public class InternalConfigurationPostProcessor implements BeanFactoryPostProces
logger
.
warn
(
"Found no @Configuration class BeanDefinitions within "
+
beanFactory
);
}
private
AsmJavaConfigBeanDefinitionReader
beanDefinitionReader
(
ConfigurableListableBeanFactory
beanFactory
)
{
// reader requires DefaultListableBeanFactory for it's registerBeanDefinition() method
if
(!(
beanFactory
instanceof
DefaultListableBeanFactory
))
throw
new
IllegalStateException
(
"beanFactory must be of type "
+
DefaultListableBeanFactory
.
class
.
getSimpleName
());
return
new
AsmJavaConfigBeanDefinitionReader
((
DefaultListableBeanFactory
)
beanFactory
);
}
/**
* Determines whether the class for <var>beanDef</var> is a {@link Configuration}-annotated
* class. Returns false if <var>beanDef</var> has no class specified.
...
...
@@ -133,7 +141,7 @@ public class InternalConfigurationPostProcessor implements BeanFactoryPostProces
* Note: the classloading used within should not be problematic or interfere with tooling in any
* way. BeanFactoryPostProcessing happens only during actual runtime processing via
* {@link JavaConfigApplicationContext} or via XML using {@link ConfigurationPostProcessor}. In
* any case, tooling (Spring IDE) will use {@link
AsmJavaConfig
BeanDefinitionReader}directly,
* any case, tooling (Spring IDE) will use {@link
ConfigurationClass
BeanDefinitionReader}directly,
* thus never encountering this classloading. Should this become problematic, it would not be
* too difficult to replace the following with ASM logic that traverses the class hierarchy in
* order to find whether the class is directly or indirectly annotated with
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录