一、版本
1、Spring 2.5 引入基于注解的元数据配置
2、从Spring 3.0开始,Spring JavaConfig项目提供的许多功能成为核心Spring Framework的一部分。因此,您可以使用Java而不是XML文件在应用程序类外部定义bean。@Configuration
,@Bean
,@Import
和@DependsOn
注释。
二、IOC概述
Spring配置由容器必须管理的至少一个且通常不止一个bean定义组成。基于XML的配置元数据显示这些bean配置为<bean/>
顶级元素内的<beans/>
元素。Java配置通常@Bean
在@Configuration
类中使用带注释的方法。
这些bean定义对应于构成应用程序的实际对象。通常,您定义服务层对象,数据访问对象(DAO),表示对象(如Struts Action
实例),基础结构对象(如Hibernate SessionFactories
,JMS Queues
等)。通常,不会在容器中配置细粒度域对象,因为DAO和业务逻辑通常负责创建和加载域对象。但是,您可以使用Spring与AspectJ的集成来配置在IoC容器控制之外创建的对象。
例:使用XML配置Bean对象
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions go here -->
</beans>
@bean:注解元数据,在加载时输入容器
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {
@AliasFor("name")
String[] value() default {};
@AliasFor("value")
String[] name() default {}; //bean name
Autowire autowire() default Autowire.NO;
String initMethod() default ""; //初始化方法
String destroyMethod() default "(inferred)"; //销毁方法
}
@Configuration:配置IOC容器,在启动Spring时构建
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
@AliasFor(
annotation = Component.class
)
String value() default "";
}
@Import:
import指令是beans命名空间本身提供的功能。除了普通bean定义之外的其他配置功能在Spring提供的一系列XML命名空间中可用,例如“context”和“util”命名空间。
在spring 4.2之前只支持导入配置类
在spring 4.2,@Import注解支持导入普通的java类,并将其声明成一个bean