美文网首页
Spring IoC容器之基于Java的容器配置

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

作者: 夏与清风 | 来源:发表于2019-07-18 22:32 被阅读0次

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

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

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

    等同于XML配置方式:

    <beans>

        <bean id="service" class="com.xlws.service.MessageServiceImpl" />

    </beans>

    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命名空间声明:

    <context:component-scan base-package="com.xlws" />

    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>元素模块化配置一样,@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配置:

    <context:property-placeholder location="classpath:/com/xlws/jdbc.properties" />

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

    相关文章

      网友评论

          本文标题:Spring IoC容器之基于Java的容器配置

          本文链接:https://www.haomeiwen.com/subject/nzxikctx.html