深入理解Spring(一)之Spring的装配

1.Spring配置的可选方案
① 在XML中进行显示配置
② 在java中进行显示配置
③ 隐式bean的发现机制和自动装配

2.自动创建bean
Spring从两个角度来实现装配bean
① 组件扫描(component scanning):Spring会自动发现应用上下文创建的bean
② 自动装配(autowiring):Spring自动满足bean之间的依赖
  @Component 注解,在实现类上声明这个简单的注解会告诉Spring要为这个类创建bean。默认的bean的ID为首字母小写的驼峰命名法的类名,然而你也可以指定bean的ID,@Component("指定的bean的ID")。

3.启动组件扫描
① 基于注解的包扫描
  @Configuration 注解,声明这个类是一个Spring的config类文件
  @ComponentScan 注解,声明在配置类上,默认扫描同一包下面所有包含@Component 注解的实现类。
  另外可以指定这个注解扫描特定的包(因为我们不会把配置文件类和业务代码放在一起),@ComponentScan(basePackages={"*","*",...})
  (一般的 @Configuration 和 @ComponentScan 会同时使用在Spring配置类上)
② 基于XML配置的包扫描
  <context:component-scan base-package="包名"></context:component-scan>

4.Spring的JUint测试注解
  @RunWith(SpringJUnit4ClassRunner.class)
  @ContextConfiguration(classes=配置类.class),这个注解会到这个类下面读取配置文件

5.自动装配bean
  自动装配就是让Spring自动满足bean依赖的一种方式,在满足依赖的过程中,会在Spring的应用上下文中寻找匹配某个bean的其他bean
  @AutoWired 注解,这个注解可以用在构造器上和setter方法上,可以自动实现对依赖的bean的自动装配

6.通过java代码装配bean
  例如声明一个Config类

@Configuration
  public class CDConfig {
    @Bean
    public CompactDisc compactDisc() {
      return new SgtPeppers();
    }
    @Bean
    public CDPlayer cdPlayer(CompactDisc compactDisc){
      return new CDPlayer(compactDisc);
    }
  }

@Bean 注解,会告诉Spring要返回一个对象,Spring会将该对象应用到上下文中的bean

7.通过XML来装配bean
① 一般bean的装配: <bean id="" class="类的全路径限定名"> </bean>
② 依赖其他bean时: <bean id="" class="类的全路径限定名"> <constructor-arg ref="依赖bean的ID" /></bean>
----需要初始值时: <bean id="" class="类的全路径限定名"> <constructor-arg value="" /></bean>
③ c命名空间声明需要其他bean依赖时:
  <bean id="" class="类的全路径限定名" c:构造器参数名称-ref="依赖bean的ID"> </bean> 或者根据构造器参数的索引位置进行DI
  <bean id="" class="类的全路径限定名" c:_0-ref="依赖bean的ID" c:_1-ref="依赖bean的ID"> </bean>
----需要出示值时:
  <bean id="" class="类的全路径限定名" c:_0-value="" c:_1-value=""> </bean> 或者
  <bean id="" class="类的全路径限定名" c:_构造器参数名称-value="" c:_构造器参数名称-value=""> </bean>
④ 传入list类型
值:

<bean id="compactDisc" class="soundsystem.BlankDisc"
        c:_0="Sgt. Pepper's Lonely Hearts Club Band"
        c:_1="The Beatles">
    <constructor-arg>
      <list>
        <value>Sgt. Pepper's Lonely Hearts Club Band</value>
        <value>With a Little Help from My Friends</value>
        ...
      </list>
    </constructor-arg>
  </bean>

bean:

<bean id="beatlesDiscography" class="soundsystem.Discography"
        c:_0="The Beatles">
    <constructor-arg>
      <list>
        <ref bean="list中添加的bean的ID"/>
        <ref bean=""/>
        ...
      </list>
    </constructor-arg>
  </bean>

 8.通过属性来装填bean(上面的方式都是通过构造器实现的)
① 首先java属性注入如下:

public class CDPlayer implements MediaPlayer {
  private CompactDisc cd;

  @Autowired
  public void setCompactDisc (CompactDisc cd) {
    this.cd = cd;
  }
  public void play() {
    cd.play();
  }
}

② 通过XML的方式实现属性的注入:
  <bean id="cdPlayer" class="soundsystem.CDPlayer" >
      <peoperty name="属性名" ref="bean的ID"/>
  <bean/>
③ 使用p命名空间
  <bean id="cdPlayer" class="soundsystem.CDPlayer"
      p:属性名-ref="bean的ID"/>

9.混合导入与混合配置
① 在javaConfig中引用XML配置

@Configuration
  @Import(CDPlayer.class)
  public class CDPlayerConfig {
    @Bean
    public CDPlayer cdPlayer(CompactDisc compactDisc) {
      return new CDPlayer(compactDisc);
    }
  }

  @Import 注解, 可以指定导入javaConfig
  @ImportResource("classpath:*.xml") 注解, 可以导入指定的XML文件
② 在XML中导入javaConfig
  <import resource="*.xml"/> ,导入指定的XML文件
  <bean class="javaConfig.class"/> , 导入javaConfig只需要以bean的方式配置在XML文件中

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值