Spring实战随笔(二)装配Bean

2018-05-08  本文已影响0人  面包树_A

之前学习了Spring的核心概念,其中DI是spring最基本要素,因为在Spring中随时都在使用。DI创建了对象之间的协作关系,称之为装配,Spring中装配bean就是配置Spring容器的过程。

有三种方式配置容器:
1.隐式的bean发现机制和自动配置
2.在JAVA中显式配置
3.在XML中显式配置

根据项目需要来选择相应的配置方案。

- 自动化装配Bean

Why:方便

Spring从两个角度实现自动化装配:

-显式配置Bean

Why: 有时候自动化配置行不通,譬如使用了第三方库,不可能在第三方库类上加注解

- 在JAVA中显式配置Bean

JavaConfig方式,通过@Configuration @Bean显式配置。

@Configuration
public class PaymentJavaConfig {

    @Bean
    public ILogger getIlogger() {
        return new ConsoleLogger();
    }

    @Bean
    public PaymentActionMixed getPaymentActionMixed(ILogger logger)     {
        return new PaymentActionMixed(logger);
    }
}
- 在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
http://www.springframework.org/schema/context">
<!-- configuration details go here -->
  <bean class="soundsystem.SgtPeppers" />
      <!-- 构造器注入 -->
      <constructor-arg value="Sgt. Pepper's Lonely Hearts Club Band" />
  </bean>  
  <bean id="cdPlayer" class="soundsystem.CDPlayer">
      <!-- 属性注入 -->
      <property name="compactDisc" ref="compactDisc" />
  </bean>
</beans>

还有些c命名空间(c:cd-ref)、p命名空间(p:compactDisc-ref)、util命名空间<util:list>
缺点:无法校验,安全性太差,不会在编译期就检查该类是否存在(不过如果用Spring Tool Suite的话可以);而且比JAVA Config方式要麻烦很多,还需要声明XSD

- JAVA Config和XML混合使用
@Configuration
// 导入通过JAVAConfig声明的bean:CDPlayerConfig
@Import(CDPlayerConfig.class)
// 导入cd-config.xml中声明的bean
@ImportResource("classpath:cd-config.xml")
public class SoundSystemConfig {
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

  <!-- XML中声明bean -->
  <bean id="cdPlayer" class="soundsystem.CDPlayer" c:cd-ref="compactDisc" />
  <!-- 导入JAVAConfig中声明的bean -->
  <bean class="soundsystem.CDConfig" />
  <!-- 导入其他XML文件中声明的bean -->  
  <import resource="cdplayer-config.xml" />
</beans>

- Summary

尽量用自动化配置bean,避免显示配置带来的代码和维护成本。如果一定要显示,JAVAConfig优于XML。这里学习了Spring的集中装配方式,但是Spring还有更高的装配的需求,接下来继续学习Spring高级装配。

- W3CSchool参考链接

上一篇下一篇

猜你喜欢

热点阅读