对Spring 白话文理解

Java Bean
每一个类实现了Bean的规范才可以由Spring来接管,那么Bean的规范是什么呢?

  • 必须是个公有(public)类
  • 有无参构造函数
  • 用公共方法暴露内部成员属性(getter,setter)
    实现这样规范的类,被称为Java Bean。即是一种可重用的组件。

在这里插入图片描述
在这里插入图片描述

从图中我们可以看出Spring通过反射创建Springone 的对象,注意这里需要进行无参构造,并且测试数据输出了Spring one Runing 也证实了这一猜想,图中的id是Spirngone这个类的唯一标识,也可以叫做它的别名吗,所以既然叫做唯一标识就不允许重复

在这里插入图片描述
Bean的作用域
Spring定义了多种Bean作用域,可以基于这些作用域创建bean,包括:

  • 单例(Singleton):在整个应用中,只创建bean的一个实例。
  • 原型(Prototype):每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例。
  • 会话(Session):在Web应用中,为每个会话创建一个bean实例。
  • 请求(Rquest):在Web应用中,为每个请求创建一个bean实例。

详细讲解:
在这里插入图片描述
在这里插入图片描述
可以发现在测试数据中两个对象的地址是相同的,说明是单例的,而通过debug也可以发现,单例模式在容器创建的时候,也就是ApplicationContext context =new ClassPathXmlApplicationContext(“applicationContext.xml”);这句话运行的时候会创建对象,并且每次获得都是这个对象,而当是多例模式的时候,会发现在容器创建的时候不会创建这个对象,而是会在 Springone springone = (Springone) context.getBean(“springone”);这句话运行的时候才会创建对象,并且地址不同,如下图

此图是单例的例子
在这里插入图片描述
此图是多例的
此图是多例的

在bean中配置初始化方法和销毁方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
销毁方式是没有来得及打印

创建JavaBean的方法

注:主要是依靠工厂

上面所说的创建对象需要的是无参构造,而下面是利用有参的构造
静态工厂:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
如图,我们都知道调用静态方法,只需要拿到类即可,而不需要拿到他的实例化对象,所以此块得到的是他的类对象,所以我们可以理解为在一个bean的标签里面直接写geUsertDao方法,是类对象直接调用静态方法,也就是说这一个标签起到的作用获得工厂的类对象并调用getUserdao方法,返回Userdao实例化对象,就是如下图所示
在这里插入图片描述

动态工厂
在这里插入图片描述

而工厂去调用非静态的方法创建实例的userDao对象,必须先new一个工厂对象再去调用它的方法,所以这两个标签所起到的作用就是第一个标签先创建工厂的类对象,然后第二个标签
创建工厂的实例对象并调用工厂的getUserdao方法,获得Userdao的对象。如下图
在这里插入图片描述


Spring依赖注入

不管是JavaBean还是像我们在原生JavaEE中写的业务层Service都可以把实例化对象这部交给Spring创建,而创建对象过程中,像上面的通过写方法去创建对象,有点麻烦,可以通过Spring的依赖注入进行创建,而创建一个对象的方法无非有两种,一种是Set的方法一种是构造器构造下面先介绍一个set方法构造

set构造

在这里插入图片描述
在这里插入图片描述
根据如上所说进行优化
在这里插入图片描述
通过在UserService中通过Set方法获得Userdao对象,而通过Spring的依赖注入,即依赖注入(property),将UserDao注入到set方法中,而property的name不是service中的属性名,而是set方法后面的英文,并且首字母要小写

还有一种方法就是P命名空间
在这里插入图片描述
可以省去写property的步骤,但是感觉作用不大,不详细进行解析和记笔记

通过构造器构造注入

在这里插入图片描述

注意:这里面的name和ref意义不同,name是set的属性名,但是ref是spring容器中Bean的id名字。


上面都是对Bean的注入即对象的注入,下面将介绍其实Spring的构造还可以对普通数据构造或者一些复杂的集合,数组构造等等如下图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201103211005366.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzQ1NDUx,size_16,color_FFFFFF,t_70#pic_center)

开发时的建议:
在这里插入图片描述

将每个层的xml文件分开写,最后引入到一个总的xml文件中是更好的选择
在这里插入图片描述


数据库连接源往往需要代码去设置用户名密码等等,在Spring中通过xml解决了如果后期需要更改数据库还要去更改代码的麻烦。但是需要配置数据源 配置数据源,连接数据库 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201104103136801.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzQ1NDUx,size_16,color_FFFFFF,t_70#pic_center)

用注解进行Spring开发

在这里插入图片描述
Controller,Service,Repository这这个注解和Component的作用是一样的,都是实例化Bean,只不过可以给我们一个提示作用,这个Bean处于哪个层
Autowired,Qualifier,Resource,用于注入的,相当于Property里面的ref的,而Value是替代里面的value的
Scope是作用范围
最后两个第一个是初始化方法,第二个是销毁方法
在这里插入图片描述

实践:

在这里插入图片描述
注意要使用组件扫描:因为Spirng不知道你要到哪去找这个注解,这个组件扫描就是告诉Spring在哪个包下的Bean需要Spring扫描
在这里插入图片描述
在这里插入图片描述
如果有多个类型的Userdao,那么要用如下图的方法进行注入
在这里插入图片描述
还可以只用一注解,如下图
在这里插入图片描述
而Value如果只是给类的属性注入值显得苍白无力,实际开发中也不是这样用的,具体用法,如下图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

新注解

在这里插入图片描述
新注解是为了那些无法进行注解的标签而产生的
在这里插入图片描述
通过新注解可以将Java文件作为配置文件,并且一个java文件可以当作主配置文件,还有很多子的java文件。如下图
在这里插入图片描述
在这里插入图片描述




Spring整合Junit对测试的简化

在这里插入图片描述

在这里插入图片描述
使用xml作为配置文件则使用如下方式
在这里插入图片描述

使用java文件作为配置文件则使用如下配置
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值