目前这里能调用是因为,在service的实现类里面,new了一个dao的对象

正常情况下 这里不应该是new一个对象,应该等于null或为空

设置为空侯再运行就会报错

出错的原因是这里为null

需要讲完Bean的细节后。再来看上面的代码。

新建一个项目


配置打包方式

加入spring 的依赖


复制03里面的代码进来。

复制到04的里面

dao的包整个删除

service中不再调用dao类。都删除


复制bean.xml到新项目里

spring对bean的管理细节

第一种方式创建bean


Service的Impl类有个默认构造函数,加上name参数

执行main方法


提示没有默认构造函数

当类里面没有默认构造函数,配置文件也开始报错


当写了id和class后,没有别的标签就会去找默认构造函数,如果没有就不能创建

当时使用别人写好的类,存在于jar包中,我们该如何使用呢?我们也不确定他有没有构造函数。
如何在配置文件中得到一个document对象
新建一个class

假设这个类是在jar包中的,怎么去得到这个对象呢?这列里面我们定义了一个方法返回IAccountService这个对象。

在bean配置文件内这么配置,这里就需要用到第二种方式

第二种方式创建Bean


accountService不在是通过InstanceFactory得到的,我们要用工厂里面的方法
FactoryBean属性:指定是哪个工厂Bean

Factory-method属性执行类的方法

下面的factory-bean配置的值就会去上面找id为instanceFacotory

运行测试类。可以正常的运行,没有任何问题

第三种方式创建Bean


复制InstanceFactory改名叫做StaticFactory

把方法改成static的

依然使用一个class的属性。、

这样和我们的摄像是不符合的。我们的想法是

还需要用到factory-method这个方法已经不是一个普通的方法,而是一个静态方法

jar里面类的方法有的有可能用static修饰,有的可能不用static修饰。所以这里spring都给我们提供了支持。右键执行看到的结果是一样的

把这两个类看做是jar中的类,不是.java文件。是class文件我们没法去修改。如果想用它某个方法的返回值存入spring容器中。bean对象的创建的第二种和第三种就是解决这个问题

jar包中的某个类的方法

阶段3 2.Spring_03.Spring的 IOC 和 DI_6 spring中bean的细节之三种创建Bean对象的方式的更多相关文章

  1. spring:bean的细节之三种创建Bean对象的方式

    <!--创建Bean的三种方式--><!--第一种方式,使用默认构造函数创建 在spring的配置文件中使用bean标签,配以id和class属性之后,且没有属性和标签时. 采用的就 ...

  2. 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法

    Java提供了Class类,可以通过编程方式获取类别的字段和方法,包括构造方法    获取Class类实例的方法:   类名.class   实例名.getClass()   Class.forNam ...

  3. spring mvc中几种获取request对象的方式

    在使用spring进行web开发的时候,优势会用到request对象,用来获取访问ip.请求头信息等 这里收集几种获取request对象的方式 方法一:在controller里面的加参数 public ...

  4. 阶段3 2.Spring_03.Spring的 IOC 和 DI_3 spring基于XML的IOC环境搭建和入门

    创建新项目 修改为jar包的方式 把上一个工程内的代码 java下的com复制过来 由于配置文件没有,所以一运行就会报错 factory文件夹整个删除 dao的实现类 这里删除 测试类保留这两行代码 ...

  5. 【SSH进阶之路】Spring的IOC逐层深入——Spring的IOC原理[通俗解释一下](三)

    1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械 ...

  6. Spring框架几种创建bean的方式

    Spring框架下,Bean的创建和装配非常的灵活,提供了三种主要的方式,并且相互见可以互相看见,也就是你可以随意地采用你喜欢且合适的方式创建Bean,而不用担心他们之间的兼容问题. 一.使用XML显 ...

  7. spring源码阅读笔记06:bean加载之准备创建bean

    上文中我们学习了bean加载的整个过程,我们知道从spring容器中获取单例bean时会先从缓存尝试获取,如果缓存中不存在已经加载的单例bean就需要从头开始bean的创建,而bean的创建过程是非常 ...

  8. 阶段3 2.Spring_03.Spring的 IOC 和 DI_2 spring中的Ioc前期准备

    适应配置的方式解决我们刚才的编码操作 -dist结尾的就是spring 的开发包 解压好的 这里面是约束 libs是扎包 三个为一组,实际上只有21个 自己在使用需要导入jar包的时候,选择这种没有任 ...

  9. 阶段3 2.Spring_03.Spring的 IOC 和 DI_9 spring的依赖注入

    新建工程 改成jar包 加入spring的依赖 复制之前的工程代码 再复制配置文件 fac factory整个删除 构造函数也删除.删除后的代码.如下 配置文件中的注释都删除掉 spring中的依赖注 ...

随机推荐

  1. SAP中MM模块基础数据之Quota Arrangement(配额协议)的解析

    有的时候我们的采购部门有这样的需求, 同一颗物料有几个供应商同时供料, 这个时候就涉及到一个问题, 避免出现总是和一家供应商购买物料的情况,我们需求把这些物料按照一定的比列分配给供应商.在SAP系统中 ...

  2. PAT Basic 1010 一元多项式求导 (25 分)

    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小 ...

  3. 度限制MST

    POJ1639 顶点度数限制的最小生成树 做法:首先把和顶点相连的X条边全部删掉 得到顶点和 X个连通块 然后求出这X个连通块的MST 再把X条边连接回去这样我们就首先求出了X度MST 知道了X度MS ...

  4. 欧拉函数 || Calculation 2 || HDU 3501

    题面: 题解:欧拉函数的基础应用,再套个很 easy 的等差数列前 n 项和就成了. 啊,最近在补作业+准备月考+学数论,题就没怎么写,感觉菜得一匹>_< CSL加油加油~! 代码: #i ...

  5. Kendo UI for jQuery使用教程:小部件DOM元素结构

    [Kendo UI for jQuery最新试用版下载] Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support ...

  6. Mac 安装RN android开发环境

    前言 前面介绍了MAC 安装,再来讲讲mac 安装 安卓的开发环境 首先貌似很多Mac自带安卓JDK ,你可以在终端上输入java -version 看是否已经有java开发环境. 如果没有java开 ...

  7. 【51nod 1824】染色游戏

    题目 有 n 个红球, m 个蓝球,从中取出 x 个红球和 y 个蓝球排成一排的得分是 rx⋅by ,其中 r0=b0=1 . 定义 f(t) 表示恰好取出 t 个球排成一排的所有可能局面的得分之和. ...

  8. struts2没有打印日志原因和No result defined for action XXXAction and result input

    在项目中调用一个action的方法的时候发生了一个错误,但是在catalina.out和配置的log4j都没有打印异常,后来在执行的action中加了logger.error("XXXXX& ...

  9. centos 修改时区以及修正时间

    1.查看系统当前的时区 [app@127-0-0-1 shine]$ timedatectl Local time: Wed 2019-10-23 17:56:17 CST Universal tim ...

  10. JavaScript RegExp ——对象,语法,修饰符,方括号,元字符,量词,对象方法,对象属性

    ㈠RegExp 对象 正则表达式是描述字符模式的对象. 正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具. ㈡语法 var patt=new RegExp(pattern,m ...