Spring IoC容器之基于Java的容器配置

spring中新的Java配置支持的核心是@Configuration注解的类和@Bean注解的方法。

@Bean注解用来指定一个方法实例,配置和初始化一个新对象交给IoC容器管理。@Bean和的功能相同,@Bean注解的方法可以在@Component类中使用,常用在@Configuration类中。

@Configuration注解的类主要是作为bean定义的来源,它允许内部bean依赖通过简单的调用同一类中的其他@Bean方法进行定义。示例如下:

等同于XML配置方式:

    

1、AnnotationConfigApplicationContext

AnnotationConfigApplicationContext是spring3.0引入的,它既可以接受@Configuration类作为输入,也可以接受@Component类和使用JSR-330元数据注解的类。

当@Configuration类作为输入时,@Configuration类本身作为bean被注册,并且类内所有声明的@Bean方法也被作为bean注册了。当@Component类和使用JSR-330元数据注解的类作为输入时,它们被注册为bean,并被假设为@Autowired或@Inject的DI元数据在类中需要的地方使用。

与使用XML配置作为输入实例化ClassPathXmlApplicationContext的过程类似,当实例化AnnotationConfigApplicationContext时,@Configuration类可能作为输入。这样就可以在spring容器中不使用XML配置。

AnnotationConfigApplicationContext不仅可以与@Configuration类协作使用,任意@Component类和使用JSR-330元数据注解的类都可以作为构造方法的输入。

2、使用register(Class...)编程式构建容器

AnnotationConfigApplicationContext可以使用无参构造方法来实例化,然后使用register()来配置。

3、使用scan(String...)开启组件扫描

或者使用XML的context命名空间声明:

com.xlws包会被扫描,查找任意@Component注解的类,那些类就会被注册为spring容器的bean。AnnotationConfigApplicationContext暴露出的scan(String...)方法允许相同的组件扫描功能。在调用refresh()时,所有包下的@Bean方法都会被处理并注册为容器中的bean。

4、指定bean的scope

我们可以为使用了@Bean注解的bean定义scope,默认的scope是singleton,可以使用@Scope注解进行覆盖。

5、自定义bean命名

配置类默认使用@Bean方法的名称来作为注册bean的名称,此方法可以被重写,但使用的是name属性。

6、bean描述

可以使用@Description注解来对@Bean添加一个描述。

7、@Import

和spring的XML中使用元素模块化配置一样,@Import注解允许从其他配置类中加载@Bean的配置。

@Configuration

public class ConfigA{

    @Bean

    public A a() {return new A();}

}

@Configuration

@Import(ConfigA.class)

public class ConfigB{

    @Bean

    public B b() {return new B();}

}

当实例化上下文时,不需要指定ConfigA.class和ConfigB.class,仅需要ConfigB被显示提供。

ApplicationContext context = new AnnotationConfigApplicationContext(ConfigB.class);

A a = context.getBean(A.class);

B b = context.getBean(B.class);

8、@ImportResource

在@Configuration类作为配置容器主要机制的应用程序中,有必要使用一些XML配置。此时使用@ImportResource来定义XML,既可以实现以Java为中学的方式配置容器,也保持XML最低限度的使用。

jdbc-config.xml配置:


--参考文献《Srping5开发大全》

你可能感兴趣的:(Spring IoC容器之基于Java的容器配置)