前面已尽介绍了SpringIoC容器的初始化过程,接下来我们要分析依赖注入的过程,在此之前我们使用的是spring自带的测试用例,因为一开始分析源码,我们不希望将过多的精力牵扯到搭建一个新的项目上,但是接下来的分析,会很漫长,除了对IoC依赖注入的分析,还会涉及到AOP,各种bean和BeanFactory的处理器的分析,所以为了方便我们分析代码,还是要新搭建一个工程
1.新建gradle测试工程
- File–>New–>Module 新建一个模块
- 选择Gradle–>配置Jdk–>选择Java
- 点击右上角文件夹图标–>选择spring–>输入ArtifactId
- 选择项目存储目录–>完成模块创建
2.配置gradle测试工程
- 在右侧Gradel管理控制台–>右键新创建的模块–>Open Gradle Config
- 添加模块引用
apply plugin: "groovy"
dependencies {
compile(project(":spring-beans"))
compile(project(":spring-core"))
optional(project(":spring-aop"))
optional(project(":spring-context"))
optional(project(":spring-oxm"))
optional("javax.annotation:javax.annotation-api:1.3.2")
optional("javax.ejb:javax.ejb-api:3.2")
optional("javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0")
optional("javax.inject:javax.inject:1")
optional("javax.interceptor:javax.interceptor-api:1.2.2")
optional("javax.money:money-api:1.0.3")
optional("javax.validation:validation-api:1.1.0.Final")
optional("javax.xml.ws:jaxws-api:2.3.0")
optional("org.aspectj:aspectjweaver:${aspectjVersion}")
optional("org.codehaus.groovy:groovy:${groovyVersion}")
optional("org.beanshell:bsh:2.0b5")
optional("joda-time:joda-time:2.10")
optional("org.hibernate:hibernate-validator:5.4.2.Final")
optional("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
optional("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
testCompile("org.codehaus.groovy:groovy-xml:${groovyVersion}")
testCompile("org.codehaus.groovy:groovy-jsr223:${groovyVersion}")
testCompile("org.codehaus.groovy:groovy-test:${groovyVersion}")
testCompile("org.apache.commons:commons-pool2:2.6.0")
testCompile("javax.inject:javax.inject-tck:1")
testRuntime("javax.xml.bind:jaxb-api:2.3.0")
testRuntime("org.glassfish:javax.el:3.0.1-b08")
testRuntime("org.javamoney:moneta:1.3")
}
3.测试
将SimplePropertyNamespaceHandlerWithExpressionLanguageTests.java和simplePropertyNamespaceHandlerWithExpressionLanguageTests.xml配置文件复制到该工程下,配置文件要放到resources目录下,并添加Junit引用,运行测试类即可
注意:如果修改build.gradle配置文件还是无法引用到spring的模块的话,可以选择IDEA–>File–>project structure–>选择新建的模块–>按下图操作添加对应的模块即可,只需添加_main结尾的模块(或者可以根据IDEA的提示在代码里直接引用模块)