Spring依赖注入-装配

Spring提供了三种主要的装配机制:

  1. 使用XML文件显示装配
  2. 在Java中进行显示装配
  3. 隐式的bean发现机制和自动装配机制

Demo:

使用XML文件显示装配

<?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">

  <!--装配一个BraveKnight对象,并引用下面的quest作为构造器作为入参-->
  <bean id="knight" class="sia.knights.BraveKnight">
    <constructor-arg ref="quest" />
  </bean>

  <!--装配一个SlayDragonQuest对象,命名为quest-->
  <bean id="quest" class="sia.knights.SlayDragonQuest">
    <constructor-arg value="#{T(System).out}" />
  </bean>

</beans>

在Java中进行显示装配(效果同上XML配置)

/**
 * @Configuration 表示此类为Spring配置类
 * 项目启动时,Spring会加载此类中的配置内容
 */
@Configuration
public class KnightConfig {

  /**
   * @Bean 将函数返回的对象作为一个Bean加载到Spring容器中
   * @return
   */
  @Bean
  public Knight knight() {
    return new BraveKnight(quest());
  }
  
  @Bean
  public Quest quest() {
    return new SlayDragonQuest(System.out);
  }

}

隐式的bean发现和自动装配

需要使用组件扫描(component scan)和自动装配(auto wire)

/**
 * @Component 告知Spring要为此类创建一个bean
 */
@Component
public class SgtPeppers implements CompactDisc {
  private String title = "Sgt. Pepper's Lonely Hearts Club Band";  
  private String artist = "The Beatles";
  
  public void play() {
    System.out.println("Playing " + title + " by " + artist);
  }
  
}


/**
 * @Configuration 表示这是一个配置类
 * @ComponnentScan 表示开启Spring的组件扫描功能,并将bean装入spring容器中
 */
@Configuration
@ComponentScan
public class CDPlayerConfig { 
}


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfig.class)
public class CDPlayerTest {
  @Autowired
  private CompactDisc cd;           //将Spring容器中CompactDisc类的bean自动装配到cd
  
  @Test
  public void cdShouldNotBeNull() {
    assertNotNull(cd);
  }

}
//获取bean
@Test
public void getBeans(){
     //ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
     ApplicationContext context2 = new AnnotationConfigApplicationContext("unicom.com.unicom.kc.manage");
     IKmKnwlgIndexSV kmKnwlgIndexSV2 = context2.getBean(IKmKnwlgIndexSV.class);
     System.out.println(kmKnwlgIndexSV2);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值