Spring(1)

1.Spring简介

Spring是一个基于IOC【Inverse Of Control:反转控制】和Aop【Aspect Oriented Programing:面向切面编程】的企业级开发框架,框架都是半成品,是用来简化开发的。
Spring的官网:https://spring.io/projects/spring-framework#learn

1.1Spring在软件三层架构中的位置

在这里插入图片描述

1.2Spring的模块介绍[面试题]在这里插入图片描述

Spring框架大约有20个模块,而这20个模块又被重组为几个模块:
Core Container: 主要是IOC的一些相关概念、操作,其它模块都依赖了核心模块
AOP: 面向切面编程
Aspects: 和切面相关
Data Access/Integeration:和数据库打交道
Web模块:和请求相关的
Test: 和测试相关

1.3Spring重要知识点

在这里插入图片描述

1.4Spring插件安装

插件地址:
https://spring.io/tools/sts/all
http://dist.springsource.com/release/TOOLS/update/e4.5/

1.5Spring的第一个案例

第一步:导入jar包
在这里插入图片描述
第二步:创建一个类,并提供属性的getter、setter方法
在这里插入图片描述
第三步:在src目录下配置spring的配置文件【beans.xml或者applicationContext.xml】
第四步:在spring配置文件中配置一个类对象
在这里插入图片描述
第五步:写测试代码
1).根据配置文件获取容器对象
2).从容器对象中获取bean对象
在这里插入图片描述

2.Spring的IOC【面试题】

2.1简介

IOC:Inverse Of Control:反转控制
定义:具体指的是:将bean对象的创建、bean对象关联关系的维护由原来我们自己去创建,自己去维护关联关系 反转给了spring的容器,由spring的容器来创建并维护对象之间的关联关系。
解决:解决了上层建筑严重依赖下层建筑的问题,实现了上层建筑对下层建筑的控制。
具体实现:xml解析+反射+容器+设计模式

2.2获取容器的三种方式

获取容器的三种方式:
* 1.ClassPathXmlApplicationContext:只是加载类路径【src目录】下的xml配置文件【掌握】
* 2.FileSystemXmlApplicationContext:默认是从本地磁盘加载某个配置文件
* 3.XmlBeanFactory的方式:过时了,了解即可

2.3Bean标签

bean标签:生成类对象
class:指定生成类对象的类,根据这个类,生成该类的对象
id:identifier,表示该bean对象在spring的核心容器中的唯一标识,
name:bean对象的别名,该值也是唯一的

问题1:spring的容器是通过反射,调用无参构造器创建类对象的
问题2:容器中的bean对象默认是在我们创建容器对象的时候就已经创建了,注意:不是在获取该bean对象的时候才创建
问题3:bean对象会创建几次呢?1次,也即:默认容器中的对象都是单例的

2.4bean对象的scope属性

scope:属性:可以指定当前类对象是单例的还是多例的
singleton:表示该类对象是单例的,是随着容器的创建而创建,
prototype:表示该类对象是多例的,获取的时候再创建,获取几次就创建几次,structs2
request:表示每一次请求都会创建一个当前类对象
session:表示每一个会话都会创建一个当前类对象

2.5从容器中获取bean对象的两种方式及区别

从容器中获取bean对象的两种方式:
* 1.通过字节码的方式
* 2.通过容器中bean对象的id值的方式
这两种方式的区别:
* 1.参数不同,一个是字节码类型,一个是字符串类型
* 2.返回值不同:一个是具体的某个字节码类型的对象,另一个是Object类型
* 3.通过字节码的方式获取容器中的bean对象时,要求容器中有该类型的唯一Sbean对象【没有不行、有两个及两个以上也不行】

2.6容器中bean对象的创建时机、底层原理、是否单例

容器中bean对象的创建时机、底层原理、是否单例
* 1.创建时机:容器中的对象默认是在容器加载的时候,容器中的bean对象按着从到下的顺序创建的
* 2.底层原理:反射
* 3.是否单例:默认容器中的对象是单例的,如果想设置成多例的,可以设置bean标签的scope属性

我们把对象放入到容器中不是目的,目的是使用容器中的对象[尤其是交给Java应用程序来使用],那容器中有那么多对象,那么程序怎么能知道该将容器中的哪个对象赋值给该属性呢?这里肯定要遵循一套原则,这套原则就是:依赖注入
注入的原则就是:依赖注入【Dependency Injection】

<bean id="userServlet" class="com.offcn.crm.servlet.UserServlet">
   <!-- property属性赋值实际上是调用的该属性的set方法 -->
	   <property name="userService" ref="userService"></property>
</bean>

从上面可以看出IOC实际上是更为宽泛的概念、思想、而具体实现是DI,DI实现的仅仅是对象关系的维护!而对象本身的创建则属于IOC的范畴!
在这里插入图片描述
IOC有DL和DI两种实现方式,但是DL已经被抛弃,因为它需要用户自己去实现API

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值