spring框架---基本配置与bean装配:xml和注解,监听器

定位

spring框架在项目中的地位:
在这里插入图片描述
我目前只学了ssm框架但也类似于上图,主要管服务层,作用主要是创建bean (描述可能不太准确或者是错误的,但是目前写了一个项目后,这是真实的体会).

核心jar包 前期准备

在这里插入图片描述
(此教程用的3.2的spring 太老了 但核心包一样. 我学的spring4.2 也比较老了)

工厂结构图

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

个人理解:

1.spring就像一个大工厂,专门生产bean.applicationContext作为beanfactory的子类,对beanFactory进行了扩展,现在都用applicationContext作为工厂类了.
2.用applicationContext加载配置spring配置文件时,所有的单例bean都会被实例化(老的版本beanfactory 是调用一个getbean()就创建一个对象),默认是单例模式.他的实现类有两种
ClasspathApplicationContext:加载的是类路径下得配置文件.是相对路径较为灵活.我多数用的这个.
FileSystemXmlApplicationContext:加载的是文件系统下的配置文件,一般全路径 .较为固定,一旦项目挪位置,就要重写加载路径.

补充(资料来源六月的余晖博客)

(ApplicationContext是BeanFactory的子接口,也被称为应用上下文。BeanFactory提供了Spring的配置框架和基本功能,ApplicationContext则添加了更多企业级功能(如国际化的支持),他另一重要优势在于当ApplicationContext容器初始化完成后,容器中所有的 singleton Bean 也都被实例化了,也就是说当你需要使用singleton Bean 是,在应用中无需等待就可以用,而其他BeanFactory接口的实现类,则会延迟到调用 getBean()方法时构造,ApplicationContext的初始化时间会稍长些,调用getBean()是由于Bean已经构造完毕,速度会更快。因此大部分系统都使用ApplicationContext,而只在资源较少的情况下,才考虑使用BeanFactory。)

IOC与DI

IOC: Inversion of Control(控制反转)。
控制反转:将对象的创建权反转给(交给)Spring。
DI:依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。

补充(资料来源同上)

依赖注入或控制反转的定义中,调用者不负责被调用者的实例创建工作,该工作由Spring框架中的容器来负责,它通过开发者的配置来判断实例类型,创建后再注入调用者。由于Spring容器负责被调用者实例,实例创建后又负责将该实例注入调用者,因此称为依赖注入。而被调用者的实例创建工作不再由调用者来创建而是由Spring来创建,控制权由应用代码转移到了外部容器,控制权发生了反转,因此称为控制反转。

基本配置

介绍

首先引入约束文档:
在压缩包XXX-dist.zip/spring-framework-xxx-release/schema下找的到相关的

在这里插入图片描述

相关配置

在这里插入图片描述
id:使用了约束中的唯一约束。里面不能出现特殊字符的。
name:没有使用约束中的唯一约束(理论上可以出现重复的,但是实际开发不能出现的)。里面可以出现特殊字符。

生命周期

init-method:Bean被初始化的时候执行的方法
destroy-method:Bean被销毁的时候执行的方法(Bean是单例创建,工厂关闭)

scope

scope :Bean的作用范围
singleton :默认的,Spring会采用单例模式创建这个对象。 prototype :多例模式。(Struts2和Spring整合一定会用到)
request :应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。
session :应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中。
globalsession :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于session。

bean 实例化方式

默认是无参构造方法
静态工厂实例化方式

在这里插入图片描述
(配置文件中指定factory-mothod)

实例工厂实例化方式

在这里插入图片描述
先实例化beanfactory 再从工厂中获得bean3 指定factory-bean和factory-method

属性注入

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
区别:一个是 一个是
对象类型注入1.需要把对象托管给spring 2.ref=对象的id或者name
在这里插入图片描述
特点: 对原有方式优化了,可以对比得知不用再写标签了 直接在标签中配 p:某某属性=xxx
在这里插入图片描述
spEL以#{}作为定界符 框内都被认为是spEL 可以是基本类型也可以直接把对象(IOC环境下)注入例如上面的直接写类的id 也可以用引用对象的属性和方法
在这里插入图片描述
#{123}、#{‘jack’} : 数字、字符串
#{beanId} :另一个bean引用
#{beanId.propName} :操作数据
#{beanId.toString()} :执行方法
#{T(类).字段|方法} :静态方法或字段

(详细查看文档)

集合注入

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

注解方式注入(常用,适合小项目)

在这里插入图片描述
在这里插入图片描述
补充:
@value 普通属性注入(用途解硬编码时,读properties配置文件,用@value(“xxxx”))

理解:

1.注解就相当于说明书,三个衍生是因为官方说会对三个层进行功能扩展所以先用着,实际上和component作用目前是一样的 括号内加id就相当于 有id 不加就相当于没有id(id不是一定要有的,没有id就通过class类型获取,有则可以通过id名来获取) 这三个注解是注明将这个类托管给spring(补充:@repository 作用于持久层作为标记自动处理数据库操作异常,原生数据库异常只有几种,但实际原因却有很多,spring扩展了原生异常,标明异常原因更多)
2.autowired是自动注入,自动根据类型来注入.在扫描范围内默认是根据类型 也可以配置根据type name等()
在这里插入图片描述
** 特别注意** 当有多个类实现同一个接口时 则可以通过@Qualifier注解限定bean的名称。如:
案例:

在这里插入图片描述
3.@resource(“xxxxx”) 直接指定id 自动注入(用于对象属性)
在这里插入图片描述
4.可以注解是否是多例
在这里插入图片描述
5.@postconstruct
@preDestroy
在这里插入图片描述

使用注解方式需要开启扫描

在这里插入图片描述

监听器

原因:一个项目中应该只有一个spring工厂,所以在web.xml中配置一个监听器,当web项目启动时创建一个spring工厂.
1.先引入 spring-web.jar
maven中直接配pom
在这里插入图片描述

资料来源

自学的黑马,用途仅限于复习时顺带写个笔记加深印象.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值