Spring通过setter访问器实现对属性的赋值,这种做法称为设值注入;Spring还提供了通过构造方法赋值的能力,称为构造注入。使用设值注入时,Spring通过JavaBean的无参构造方法实例化对象。

public class UserServiceImpl implements UserService {
private UserDao dao; public UserServiceImpl(UserDao dao){
this.dao = dao;
}
}
<bean id="userDao" class="edu.cn.dao.Impl.UserDaoImpl"/>

<bean id="userService" class="edu.cn.service.Impl.UserServiceImpl">
<constructor-arg>
<ref bean="userDao"/>
</constructor-arg>
</bean>

在Spring的配置文件中将DAO对象以构造注入的方式赋值给业务实例中的UserDao类型的属性。

一个<constructor-arg>元素表示构造方法的一个参数,且使用时不区分顺序。当构造方法的参数出现混淆、无法区分时,可以通过<constructor-arg>元素的index属性指定该参数的位置索引,索引从0开始。<constructor-arg>元素还提供了type属性用来指定参数的类型,避免字符串和基本数据类型的混淆。

构造注入的时效性好,在对象实例化时就得到所依赖的对象,便于在对象的初始化方法中使用依赖对象;但受限于方法重载的形式,使用灵活性不足。设值注入使用灵活,但时效性不足,大量的setter访问器还增加了类的复杂性。Spring并不倾向于某种注入方式,用户应该根据实际情况进行合理的选择。当然Spring提供的注入方式不只这两种,只是这两种方式使用的最普遍。

Spring实现构造注入的更多相关文章

  1. spring之构造注入

    第一种:通过构造name和value属性(不常用) <!-- userAction --> <bean id="userAction" class="c ...

  2. Spring 设值注入 构造注入 p命名空间注入

    注入Bean属性---构造注入配置方案 在Spring配置文件中通过<constructor-arg>元素为构造方法传参 注意: 1.一个<constructor-arg>元素 ...

  3. spring 构造注入 异常 Ambiguous constructor argument types - did you specify the correct bean references as constructor arguments

    你可能在做项目的时候,需要在项目启动时初始化一个自定义的类,这个类中包含着一个有参的构造方法,这个构造方法中需要传入一些参数. spring提供的这个功能叫“构造注入”, applicationCon ...

  4. Spring注入值得2种方式:属性注入和构造注入

    Spring是一个依赖注入(控制反转)的框架,那么依赖注入(标控制反转)表现在那些地方了? 即:一个类中的属性(其他对象)不再需要手动new或者通过工厂方法进行创建,而是Spring容器在属性被使用的 ...

  5. Spring接口编程_设值注入和构造注入

    说明: UserManagerImp是设值注入,UserManagerImp2是构造注入 接口不注入,也就是在Spring配置文件中没有接口的<bean>,但是定义的时候是用接口 priv ...

  6. 7.28.1 Spring构造注入还是设置注入

    1. 构造方法注入代码如下:public UserManagerImpl(UserDao userDao) {                                              ...

  7. 【Spring学习笔记-2.1】Spring的设值注入和构造注入

    设值注入: 先通过无参数的构造函数创建一个Bean实例,然后调用对应的setter方法注入依赖关系: 配置文件: <?xml version="1.0" encoding=& ...

  8. 【Spring实战】—— 2 构造注入

    本文讲解了构造注入以及spring的基本使用方式,通过一个杂技演员的例子,讲述了依赖注入属性或者对象的使用方法. 如果想要使用spring来实现依赖注入,需要几个重要的步骤: 1 定义主要的类和需要分 ...

  9. spring构造注入

    Sping 结构体系结构4个核心组件 Beans:Bean是包装我们应用程序自定义对象Object的bject存有数据. Core: context在发现建立,维护Bean之间关系所需的一些工具.如资 ...

随机推荐

  1. 从零开始入门 K8s | Kubernetes 调度和资源管理

    作者 | 子誉  蚂蚁金服高级技术专家 关注"阿里巴巴云原生"公众号,回复关键词"入门",即可下载从零入门 K8s 系列文章 PPT. Kubernetes 调 ...

  2. Android中定义广播监听,其他页面发送

    private LocalBroadcastManager broadcastManager; /** * 注册广播接收器 */ private void receiveAdDownload() { ...

  3. Ubuntu——关于以root权限操作和启用root账户的讨论

    概括性的说,在Ubuntu下面,推荐用户加入到sudo之后,使用命令: sudo -i 来以管理员权限进行操作. 而不推荐用户直接登录root用户. 具体内参考:https://help.ubuntu ...

  4. oracle性能诊断sql

    --1.阻塞及等待事件信息查询-- 查询所有会话的状态.等待类型及当前正在执行的SQL脚本select t.SID, t.SERIAL#, t.Status, t.Action, t.Event, t ...

  5. AttributeError:module 'keras.engine.topology' has no attribute 'load_weights_from_hdf5_group_by_name

    在jupyter notebooks上运行tensorflow-keras的Mask R-CNN时遇到如下错误: 参考博客中写了两种解决方案: 解决方案一:报错是由于keras版本不对造成的.load ...

  6. Spring Annotations

    @Bean 这是一个方法注解,作用是实例化一个Bean并使用该方法的名臣命名.

  7. 装机、做系统必备:秒懂MBR和GPT分区表____转载网络

    装机.做系统必备:秒懂MBR和GPT分区表 科技美学 2016-10-17 16:36:23 阅读(3835) 评论(4) 很多网友询问MBR和GPT的问题,涉及到硬盘操作系统的安装,其实除了MBR和 ...

  8. linux中的i2c控制器驱动应该做些什么?

    答:完成读写功能即可,不要涉及任何针对从设备的特殊操作,这样就可以避免与从设备的代码产生冗余,linux中的i2c控制器驱动就做的特别棒,做好最简单的读写,然后其它的从设备驱动就是直接调用这些最简单的 ...

  9. 读懂react源码

    2019-11-06 1.最重要的两个目录,react,react-dom,(react-reconciler后续会很重要) 2.使用flow检查js的类型 3.react.createElement ...

  10. 求平面上N点最远两点和最近两点距离

    最近两点,二分法 最远两点,凸包+找对踵点