
|
在最近的Blog中,Rod Johnson介绍了Spring应用程序的一个新的配置选项,这个新的配置选项并不是打算来取代Spring的基于XML的配置.新的选项在Java类中定义了配置,这个配置Rod Johnson描述为一个小的配置DSL. 值得提到的一点就是,人们经常忽略Spring配置不需要在XML文件中,虽然XML的形式是目前最通用的使用形式.Spring在 BeanDefinition接口和子接口的形式上有自己的内部的元数据形式. 代表IOC容器实例的BeanFactory 和ApplicationContext的实现被这种Java元数据赋有强大的动力.并且从元数据的解析中各自分离,这通常是由 BeanDefinitionReader实现来执行的. BeanDefinition最初并不是按开发者的观点来设计的,Spring2.0, NamespaceHandlers(处理XML扩展命名空间的类)产生BeanDefinition元数据,我们引进BeanDefinition,用 方便的API使得这更加容易.但是产生BeanDefinition元数据只不过留在架构代码的领域,而不是像你每天写业务逻辑代码和定义规则的 Spring bean所做的那样. 今天,我想要描述一个新的选项来在Java代码中定义beans,当前是Spring core增加的扩展功能. 首先来看一个例子: @Configuration public class MyConfig { @Bean public Person rod() { return new Person("Rod Johnson"); } @Bean(scope = Scope.PROTOTYPE) public Book book() { Book book = new Book("Expert One-on-One J2EE Design and Development"); book.setAuthor(rod()); // rod() method is actually a bean reference ! return book; } } <bean id="rod" class="Person" scope="singleton"> <constructor-arg>Rod Johnson</constructor-arg> </bean> <bean id="book" class="Book" scope="prototype"> <constructor-arg>Expert One-on-One J2EE Design and Development</constructor-arg> <property name="author" ref="rod"/> </bean> @Configuration(defaultAutowire = Autowire.BY_TYPE, defaultLazy = Lazy.FALSE) public class DataSourceConfiguration extends ConfigurationSupport { } |