zoukankan      html  css  js  c++  java
  • spring自动装配

    spring提供了自动装配(autowiring)和自动检测(autodiscovery)用来减少XML的配置数量。

    自动装配bean属性

    • byName——把与Bean的属性具有相同名字(或ID)的其他Bean自动装配到Bean的对应属性中。

      示例:

    import com.springinaction.springdol.Instrumentalist;
    public class Instrumentalist{
        private String song;
        private Object instrument;
    }
    <bean id="instrument" class="com.springinaction.springidol.Saxophone"/>
    
    <bean id="kenny" class="com.springinaction.springdol.Instrumentalist"
        autowire="byName">
        <property name="song" value="Jingle Bells"/>
    </bean>
    • byType——把与Bean的属性具有相同类型的其他Bean自动装配到Bean的对应属性中。
    • constructor——把与Bean的构造器入参具有相同类型的其他Bean自动装配到Bean构造器的对应入参中。
    • autodetect——首先尝试使用constructor进行自动装配。如果失败,再尝试使用byType进行自动装配。

    使用注解装配

    从spring 2.5开始,最有趣的一种装配spring Bean的方式是使用注解自动装配Bean属性。spring容器默认禁用注解装配。所以在使用基于注解的自动装配前,我们需要在spring配置中启用它。最简单的启用方式是使用spring的context命名空间配置中的<context:annotation-config>元素。

    <?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"  
        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">  
      
        <context:annotation-config/>
        <!--bean declarations go here--> 
    </beans>

    这样配置,<context:annotation-config>元素告诉spring我们打算使用基于注解的自动装配。一旦配置完成,我们可以对代码添加注解。spring3支持如下几种注解:

    • @Autowired注解;
    • @Inject注解;
    • @Resource注解;
    @Autowired
    public void setInstrument(Instrument instrument){
        this.instrument = instrument;  
    }

    这样就可以移除对instrument通过属性<property>在XML中的装配了。

    另外还可以使用@Autowired注解直接标注属性,并删除setting方法:

    @Autowired
    private Instrument instrument;

    并且@Autowired不会受限于private关键字,仍然可以被自动装配。默认情况下,@Autowired具有强契约特征,如果没有Bean可以装配到@Autowired所标注的属性或参数中,自动装配就会失败,在这种情况下,可以通过设置@Autowired的required属性为false来配置自动装配是可选的。

    @Autowired(require=false)
    private Instrument instrument;

    当有多个Bean满足装配条件时,也会抛出异常,为了确保我们需要的Bean被装配,要使用@qualifier注解。

    @Autowired
    @qualifier("guitar")
    private Instrument instrument;

    如上,@qualifier注解将尝试注入ID为guitar的Bean。

    自动检测Bean

     为了配置spring自动检测,需要使用<context:component-scan>元素代替<context:annotation-config>:

    <?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"  
        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">  
      
        <context:component-scan
            base-package="com.springinaction.springidol">
        </context:component-scan>
        
        <!--bean declarations go here--> 
    </beans>

    <context:component-scan>元素会扫描指定的包及其所有子包,并查找出能够自动注册为spring Bean的类。base-package属性标识了<context:component-scan>元素所有的包。

    • @Component——通用的构造型注解,标识该类为spring组件;
    • @Controller——标识将该类定义为spring mvc controller;
    • @Repository——标识将该类定义为数据仓库;
    • @Service——标识将该类定义为服务;
  • 相关阅读:
    什么是JAVA?JAVA能做什么?
    vagrant 虚拟机搭建 以及virtualbox 安装 配置
    sourcetree跳过注册的方法
    layuiAdmin安装
    Navicat获取注册码
    laravel artisan命令大全
    vagrant命令
    安装python 3.7
    搭建golang webcron 定时任务管理平台
    mysql创建用户
  • 原文地址:https://www.cnblogs.com/cjingzm/p/5078498.html
Copyright © 2011-2022 走看看