spring装配bean

最近在看《spring实战》一书,记录下spring装配bean这一章中自己学到的一些知识点。

下面简单说明下bean和装配这两个概念的意思。

  • bean:在spring中代表组件,通过bean将不同的组件联系在一起。
  • 装配:是指创建应用对象之间协作关系的行为

配置方案

  • 在xml中显式配置
  • 在java中显式配置
  • 隐式的bean发现机制和自动装配(最方便)

详细介绍一下三种配置方式

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"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

    <!--声明使用注解-->
    <context:annotation-config/>
    //声明CatTest为名为cat的bean
    <bean id="cat" class="com.vdian.CatTest">
    </bean>
    </beans>

注入初始化值 
在Spring中可以使用元素配置Bean的属性,在实例化bean时调用setAge方法给age的属性赋值为10。

<bean id="cat"   
      class="com.vdian.CatTest">   
    <property name="age" value="10" />   
</bean>   

比如我们在测试dubbo接口时,也是通过这种xml装配引入被测方接口。 
以xml形式配置被测service:

    <dubbo:reference id="mcItemService" interface="com.vdian.MCItemService" version="1.0"/>

然后通过@Autowired注解引入被测service:

 @Autowired
    MCService mcService;

java装配

@Configuration
public class CDPlayerConfig { 
}
//@Configuration注解表示该类是一个配置类,要创建的bean的信息要放到这个类中。

然后通过注解@Bean声明bean。

@Bean
  public CompactDisc sgtPeppers() {
    return new SgtPeppers();
  }

自动化装配 
自动化装配bean实现原理 
组件扫描:spring自动识别应用上下文中的bean 
自动装配:spring自动满足bean之间的依赖

组件扫描流程是: 
定义bean–>扫描bean–>注入bean 
通过注解@component可以定义bean,如:

@Component
public class Car(){
//省略
}

然后通过注解@ComponentScan或者xml扫描bean,找到并创建bean。 
注解方式:

@Configuration
@ComponentScan
public class Carfig(){
//省略
}

不配置时默认扫描同个package下面的bean,也可显示定义扫描的包名。

@ComponentScan(basePackages={"packageName"})

xml形式: 
一般在工程中,我们更倾向在applicationContext.xml统一配置扫描路径,如下,扫描这个package下的所有bean。

    <context:annotation-config/>
    <context:component-scan base-package="com.vdian.test"/>

这里对spring注解类做一个小说明: 
@component 是所有受Spring管理组件的通用形式(把普通pojo实例化到spring容器中,相当于配置文件中的)。 
而@Repository、@Service和 @Controller则是@Component的细化,用来表示更具体的用例(例如,分别对应了持久化层、服务层和表现层)

自动装配: 
通过spring注解@Autowired实现,表示该类依赖@Autowired注解的bean。


整体上推荐以自动装配为主,遇到第三方库无法自动装配时,采用java或xml装配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值