注入依赖对象的方式

手工装配

用法一:在xml配置文件中,通过bean节点配置(可使用P命名空间简化配置)。

 

             示例:通过P命名空间来简化配置文件                   

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
</beans>
 
<bean id="john-modern" class="com.mycompany.Person" p:name="John Doe" p:spouse- ref="jane"/>

注:如果主调类里有属性和xxx-ref相同,则会产生异常

xmlns:p="http://www.springframework.org/schema/p" :首先指定p命名空间;

<bean id="……" class="……" p:id="value"/> :常量setter注入方式,其等价于<property name="id" value="value"/>;

<bean id="……" class="……" p:id-ref="bean1"/> :引用setter注入方式,其等价于<property name="id" ref="bean1"/>。 

 

 

用法二:在java代码中使用@Autowired或@Resource注解方式进行装配

 

      在java代码中使用@Autowired或@Resource注解方式进行装配。需要在xml文件中配置:

<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-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
          <context:annotation-config/>
</beans>
n 这个配置隐式注册了多个对注释进行解析处理的处理器AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessor,RequiredAnnotationBeanPostProcessor
n 注: @Resource 注解在 spring 安装目录的 lib\j2ee\common- annotations.jar

 

         示例:在java中使用@Autowired注解方式进行装配

@Autowired

    private PersonDao  personDao ;/ / 用于字段上
@Autowired
    public void setOrderDao(OrderDao orderDao) { // 用于属性的 setter 方法上
        this.orderDao = orderDao;
    }
@Autowired  @Qualifier(“personDaoBean”)// 按名称装配
    private PersonDao  personDao;
É 默认按类型装配依赖对象。
É 此注解为 Spring 提供
É 设置required属性为false,允许依赖对象null值。
É 结合@Qualifier注解,按名称装配。

 

 

         示例:在java中使用@Resource注解方式进行装配

@Resource  private PersonDao  personDao ;/ / 用于字段上
@Resource public void setOrderDao(OrderDao orderDao) { // 用于属性的 setter 方法
        this.orderDao = orderDao;
    }
@Resource(name=“personDaoBean”)//按名称装配
    private PersonDao  personDao;
É 默认按 名称 装配依赖对象。
É 此注解为 java 本身提供,推荐使用
É 通过@Resource的name属性显式指定名称
É 如果没有指定name属性,当注解标注在字段上,即默认取字段的名称,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象.
注意:如果没有指定 name 属性,并且按照默认的名称仍然找不到依赖对象时, @Resource 注解会回退到按类型装配。但一旦指定了 name 属性,就只能按名 称装配了。

 

 

自动装配

使用autowire属性

<bean id="..." class="..." autowire="byType"/>
autowire属性取值如下:
n byType:按类型装配,可以根据属性的类型,在容器中寻找跟该类型匹配的bean。如果发现多个,那么将会抛出异常。如果没有找到,即属性值为null。
n byName:按名称装配,可以根据属性的名称,在容器中寻找跟该属性名相同的bean,如果没有找到,即属性值为null。
n constructor与byType的方式类似,不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。
n autodetect:通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。 如果发现默认的构造器, 那么将使用 byType 方式
n 不推荐使用。

 

注:在实际应用中建议使用手工装配,因为自动装配会产生未知情况。开发人员无法预见最终的装配结果。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值