阶段3 2.Spring_03.Spring的 IOC 和 DI_6 spring中bean的细节之三种创建Bean对象的方式
目前这里能调用是因为,在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对象的方式的更多相关文章
- spring:bean的细节之三种创建Bean对象的方式
<!--创建Bean的三种方式--><!--第一种方式,使用默认构造函数创建 在spring的配置文件中使用bean标签,配以id和class属性之后,且没有属性和标签时. 采用的就 ...
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
Java提供了Class类,可以通过编程方式获取类别的字段和方法,包括构造方法 获取Class类实例的方法: 类名.class 实例名.getClass() Class.forNam ...
- spring mvc中几种获取request对象的方式
在使用spring进行web开发的时候,优势会用到request对象,用来获取访问ip.请求头信息等 这里收集几种获取request对象的方式 方法一:在controller里面的加参数 public ...
- 阶段3 2.Spring_03.Spring的 IOC 和 DI_3 spring基于XML的IOC环境搭建和入门
创建新项目 修改为jar包的方式 把上一个工程内的代码 java下的com复制过来 由于配置文件没有,所以一运行就会报错 factory文件夹整个删除 dao的实现类 这里删除 测试类保留这两行代码 ...
- 【SSH进阶之路】Spring的IOC逐层深入——Spring的IOC原理[通俗解释一下](三)
1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械 ...
- Spring框架几种创建bean的方式
Spring框架下,Bean的创建和装配非常的灵活,提供了三种主要的方式,并且相互见可以互相看见,也就是你可以随意地采用你喜欢且合适的方式创建Bean,而不用担心他们之间的兼容问题. 一.使用XML显 ...
- spring源码阅读笔记06:bean加载之准备创建bean
上文中我们学习了bean加载的整个过程,我们知道从spring容器中获取单例bean时会先从缓存尝试获取,如果缓存中不存在已经加载的单例bean就需要从头开始bean的创建,而bean的创建过程是非常 ...
- 阶段3 2.Spring_03.Spring的 IOC 和 DI_2 spring中的Ioc前期准备
适应配置的方式解决我们刚才的编码操作 -dist结尾的就是spring 的开发包 解压好的 这里面是约束 libs是扎包 三个为一组,实际上只有21个 自己在使用需要导入jar包的时候,选择这种没有任 ...
- 阶段3 2.Spring_03.Spring的 IOC 和 DI_9 spring的依赖注入
新建工程 改成jar包 加入spring的依赖 复制之前的工程代码 再复制配置文件 fac factory整个删除 构造函数也删除.删除后的代码.如下 配置文件中的注释都删除掉 spring中的依赖注 ...
随机推荐
- linux发行版及版本号
1991年8月:Linus Torvalds宣布成立Linux 遵行GPL: Kernel:底层监控程序又叫通用程序,即我们所说的操作系统 Kernel的作用: ...
- AT&T 和 Intel
- Linux修改mysql配置文件
1.首先需要知道mysql数据库安装在什么位置 2.查找配置文件位置 然后在根据这个目录,查看配置文件在哪里了(路径后面加上 --verbose --help|grep -A 1 'Default o ...
- ie浏览器css兼容样式实例
background-color:#f00;/*all*/background-color:#0ff\0;/* ie 8/9 */background-color:#0f0\9\0;/* ie9 */ ...
- CodeForces - 1175E Minimal Segment Cover (倍增优化dp)
题意:给你n条线段[l,r]以及m组询问,每组询问给出一组[l,r],问至少需要取多少个线段可以覆盖[l,r]区间中所有的点. 如果贪心地做的话,可以求出“从每个左端点l出发选一条线段可以到达的最右端 ...
- Ubuntu安装opencv 为调用gpu模块
也真够折腾的. 事件背景:为了一个光流的提取处理,本来是3.1的opencv在include一些模块上出错,原因是opencv3.0以上的版本对模块进行了再分离,要contribute,但是contr ...
- Dubbo搭建HelloWorld-搭建服务提供者与服务消费者并完成远程调用(附代码下载)
场景 Dubbo简介与基本概念: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103555224 Dubbo环境搭建-ZooKe ...
- 2019春Python程序设计练习6(0423--0429)
1-1 定义Python函数时,如果函数中没有return语句,则默认返回空值None. (2分) T F 1-2 在函数内部没有任何声明的情况下直接为某个变量赋值,这个变量一定是函数 ...
- JAVA记录 Spring 两大特性
1.IOC控制反转 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象 ...
- Spring 动态多数据源
spring springmvc mybatis 多数据源配置时的重点: 1. 注意事务拦截器的配置 Spring中的事务管理与数据源是绑定的,一旦程序执行到Service层(事务管理)的话,由于在进 ...