浏览 6787 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2007-06-03
Spring JavaConfig开发指南
作者:袁光东
1. 什么是JavaConfig
Spring IOC有一个非常核心的概念——Bean。由Spring容器来负责对Bean的实例化,装配和管理。XML是用来描述Bean最为流行的配置方式。Spring可以从XML配置文件中读取任何类型的元数据并自动转换成相应的Java代码。Spring开变了java的编程模式,Spring的下载已经超过了1亿次,可见Spring已经有多流行。
随着Spring的日益发展,越来越多的人对Spring提出了批评。“Spring项目大量的烂用XML”就是最为严励的一个批评。由于Spring会把几乎所有的业务类都以Bean的形式配置在XML文件中,造成了大量的XML文件。使用XML来配置Bean失去了编译时的类型安全检查。大量的XML配置使得整个项目变得更加复杂。Rod Johnson也注意到了这个非常严重的问题。当随着JAVA EE 5.0的发布,其中引入了一个非常重要的特性------Annotations(注释)。注释是源代码的标签,这些标签可以在源代码层进行处理或通过编译器把它熔入到class文件中。在JAVA EE 5以后的版本中,注释成为了一个主要的配置选项。Spring使用注释来描述Bean的配置与采用XML相比,因类注释是在一个类源代码中,可以获得类型安全检查的好处。可以良好的支持重构。
JavaConfig就是使用注释来描述Bean配置的组件。JavaConfig 是Spring的一个子项目,
比起Spring,它还是一个非常年青的项目。目前的版本是1.0 M2。使用XML来配置Bean所能实现的功能,通过JavaConfig同样可以很好的实现。
2. HelloWorld with JavaConfig
2.1 获得JavaConfig
JavaConfig的下载地址:
关于JavaConfig的更多信息请访问:
2.2 HelloWorld程序
我们将以HelloWorld程序来开始JavaConfig之旅!
HelloWorld.java
java 代码
HelloWorld.java是一个非常简单的java类。只有两个方法:
setWord()设置私有变量word的值。
SayHello()打印出word的值
现在我们以JavaConfig来描述HellWorld这个Bean,而不是以xml方式描述。
我们需要创建一个管理类,并加上适当的注释就可以了。
java 代码
上在的代码,我们创建了一个叫HelloWorldConfiguration的类,并加上了一个类级别的注释@Configuration.
这个类中,只有一个helloWorld()的方法,返回类型为HelloWorld。这个方法,首先会创建一个HelloWorld的实例,这个实例设置word属性为"Hello world!",然后返回这个实例。
这个方法有一个方法级别的注释@Bean
看起来,这个与普通的java类并没有什么不一样。
但是这是一个非常简单的JavaConfig实现。
如果把HelloWorld用xml来描述,等价于:
java 代码
JavaConfig的使用也非常的简单
HelloWorldWithJavaConfig.java
java 代码
程序运行后的输出结果如下:
Hello world!
可见JavaConfig的使用与XML一样简单,只是这里AnootationApplicationcontext替代了ClassPathXmlApplicationContext.
再来看看HelloWorldConfiguration类。
加上@Configuration注释后的HelloWorldConfiguration类就像一个描述Bean配置的XML文件。
加上@Bean注释后的helloWorld()方法就是一个Bean描述。Bean的ID为helloWorld.而Bean的class属性为com.springconfig.example.bean.HelloWorld.
并为这个Bean的word属性注入了值Hello world!
3. JavaConfig 注释
JavaConfig使用Java代码来对配置,管理和实例化Bean.并交由Spring容器来使用。在使用XML文件来描述Bean配置时,需要定义许多专有的XML元素。而使用Java代码来描述Bean配置,是利用JDK 5 的注释特性。不管是使用XML还是Java代码,Spring都使它们在语义上保持一致。让我们看看JavaConfig中那些最重要的注释
3.1 @Configuration
@Configuration 标志配置类,可以在这个配置类中定义bean。在第二章我们已经接触过。
@Configuration
public class WebConfiguration{
//在这里定义Bean
}
@Configuration 等同于<beans></beans>标签。<beans></beans>标签的所有属性,都可以在@Configuration中进行定义。可以通过@Configuration的元素来自定义Configuration中bean的缺省的“自动织入方式”,“依赖检查方式”,“延时初始化”,及Configuration名称
@Configuration可选元素
deaultAutowire标记Bean的自动织入方式,其取值在
org.springframework.beans.factory.annotation.Autowire类中进行定义。
DefaultDependencyCheck 标记 Bean 的依赖检查方式 , 其取值在 DependencyCheck中定义
DefaultLazy 标记 Bean 是否进行延时初始化 , 其取值在 Lazy 类中定义
示例:
java 代码
需要注意的是使用@Configuration来注释一个java类后,这个配置类也会被定义成一个Bean.其Bean名称为这个Configuration类的完整类名。
java 代码
HelloWorld!
在Configuration中访问Factory
有时需要在Configuration类中获得Factory对象,可以继承ConfigurationSupport。
java 代码
在sayWord方法中,是能过getBean方法来获得一个名为word的Bean,并返回这个Bean的值。
java 代码
3.2 @Bean
@Bean用来在Configuration中指定一个Bean定义。方法名就是Bean名称。当然你也可以使用aliases元素来为bean取一个别名。
java 代码
例如:上面的例子,spring就像创造一个名称叫helloWorld的bean。返回值为HelloWorld类型的实例。
@Bean 是一个方法级的注释,用java代码来创建和装配一个Bean实列。它相当于<bean></bean>标签,并可以支持xml的<bean></bean>标签提供的大部分选项,如:autowiring,lazy-init,dependency-check,depends-on,scope等。
@Bean的可选元素
未完,继续见第二部份 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2007-06-05
这么好的文章竟然没人讨论?
好好学习,不懂得地方再向楼主请教 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2007-06-05
好文章啊,受用
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2007-06-05
格式阿格式,不得不说je的编辑器实在是不好用,建议klyuan加一个附件。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2007-06-06
http://www.iteye.com/topic/86273
下半部份 我竟然不能一次性发完!! 所以分成两个贴发!!! |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2007-06-06
leondu 写道 格式阿格式,不得不说je的编辑器实在是不好用,建议klyuan加一个附件。
我当时加附件就提交不成功!郁闷 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||