发表于: 2017-04-21 21:10:22

3 1476


今天完成的事情:详细理解了Spring框架中DI(依赖注入)的相关知识,以下是部分知识总结:

Spring Bean装配的三种方式:所谓的装配我的理解就是先将组件进行扫描,然后对需要的bean进行创建并送到需要的地方。

  • 1.自动化装配bean

  • 2.通过JavaConfig装配

  • 3.通过XML文件装配

1. 自动化装配bean

  • 组件扫描(component scanning)  自动装配(autowiring)

@Component:组件声明 @ComponentScan:组件扫描                 ( XML的方式:<context:component-scan>  ) 

@ContextConfiguration: 

@Autowired:自动装配

为组件扫描的bean命名的几种方式:

  1. 1. Spring默认将类名第一个字母小写作为bean的ID

  2. 2. 将ID作为值传递给@Component,如:Component("beanname")

  3. 3. 使用Java依赖注入规范中的 @Named设置ID,如:@Named("beanname")

设置组件扫描的包(@ComponentScan):

  • 1. 单包:@ComponentScan("packagename")或@ComponentScan(basePackages = "packagename")

  • 2. 多包:@ComponentScan(basePackages = {"package1","package2",...})

  • 3. 指定包中的类或接口:@ComponentScan(basePackageClasses = {xxx.class , xxxx.class , ....})

自动装配:

@Autowired:自动装配,可用于构造函数,setter方法,非setter属性方法

@Autowired(required = false):不提示未配置的bean的异常 

@Inject:自动装配,Java依赖注入规范,与@Autowired差不多

2. 通过Java代码(JavaConfig)装配bean

@Configuration:声明这个类为配置类 

@Bean:声明简单bean。默认beanID为带@Bean的方法名,也可通过@Bean(name= " ")指定ID

借助JavaConfig实现注入的例子:

  • 1. 引用创建bean的方法

  • 2. 请求一个JavaConfig类作为参数(构造器)

  • 3. setter方法

注意:带有@Bean的方法可以通过任何必要的Java功能来产生bean实例

3. 通过XML文件装配Bean

创建XML配置文件,以<beans>为根,声明Bean:<bean id = " "  class = " " />

3.1借助构造器注入初始化bean(强依赖)的两种方式:

  • 1. <constructor-arg>

  • 2. c-命名空间

<constructor-arg>

<constructor-arg  ref = " " /> 

<constructor-arg  vlaue = " "> 

<constructor-arg> 

        <list>  

            <ref bean=" "/>  

           <ref bean=" "/>   

       </list> 

</constructor-arg>

c-命名空间(Spring3.0引入):

在XML顶部声明:xmlns:c = "http://www.springframework.org/schema/c"

<bean id = " " class = " " c:cd-ref = " "   /> 或 c:_0-ref = " " /> 

“c:”:前缀        “cd”:构造器参数名         “-ref”:注入bean引用             “"  "”:要注入的beanID

3.2 设置属性注入(可选依赖):

<property>属性: 

@Autowired 

public void setXXX (... , ...) { ... } 

<bean id = "  "      class = "  "  />      

      <property name = "  "  ref = "  " /> 

</bean> 

<property name = "  "/> 

      <list>  

            <value>  </value> 

            <value>  </value>

      </list> 

</property> 

<property><constructor-arg>对应 ,p-命名空间 与 c-命名空间对应 


p-命名空间: 在XMML中声明:xmlns:p = "http://www.springframework.org/schema/p" 

p:XXX-ref = "   " 

“p:”:前缀            “XXX”:属性名             “-ref”:注入bean应用             “" "”:所注入的beanID 

不能使用p-命名空间来装配集合,但能使用util-命名空间中的<util:list>元素创建列表bean: 先在XML中声明:xmlnd:util="http://www/springframework.org/schema/util" 

<util:list id = " "> 

      <value>  </value>

      <value>  </value>

</util:list>

Spring util-命名空间中的元素:

<util:constant>:引用某个类型的public static域,并将其暴露为bean 

<util:list>:创建java.util.List类型的bean,包含值或引用 

<util:map>:创建java.util.Map类型的bean,包含值或引用 

<util:properties>:创建java.util.Properties类型的bean,包含值或引用 

<util:property-path>:引用一个bean的属性,并将其暴露为bean 

<util:set>:创建java.util.Set类型的bean,包含值或引用

4 导入和混合配置:

在JavaConfig中引用XML配置:

 拆分JavaConfig: - @Import(xxx.class) 或 @Import({xxx1.class,xxx2.class}) - @ImoprtResource("CLASSPATH:XXXX.xml")

在XML配置中引用JavaConfig:

<bean class = "xxx.config"  /> 或者使用第三个配置文件: <import resorce = "xxxx.xml" />



明天打算做的事情:学习Spring Bean的高级配置,对这两天学习的关于Spring依赖注入的相关知识进行代码Demo整理总结


遇到的问题:在实际开发中,这三种装配方式哪一种比较常用


收获:对Spring的DI有了更加深入的理解,当然还需要大量的代码练习去熟悉


返回列表 返回列表
评论

    分享到