spring基础知识

spring基础知识三大块
一、IOC控制反转几个主要的知识点
(IOC:把我们原先手动new对象的控制权交个了spring容器)

1、spring容器
核心优势:轻量级的IOC容器
一致的事务管理
面向切面编程(AOP)
体系结构:核心容器 =(核心 + Bean + 上下文 + 表达是语言)
类型:
1、spring BeanFactory容器
new XmlBeanFactory(new ClassPathResource(“配置文件名”);
2、spring ApplicationContext容器
new ClassPathXmlApplicationContext(“配置文件名”);
new FileSystemXmlApplicationContext(“配置文件名”);

二、Bean的相关操作
1、定义Bean 的属性

属性描述
Class这个属性是强制性的,并且指定用来创建 bean 的 bean 类
Name这个属性指定唯一的 bean 标识符。在基于 XML 的配置元数据中,你可以使用 ID 和/或 name 属性来指定 bean 标识符
Scope(是bean标签的数据,它的作用是用来指定作用域的)这个属性指定由特定的 bean 定义创建的对象的作用域
Constructor-arg它是用来注入依赖关系的
Properties它是用来注入依赖关系的
Autowiring mode它是用来注入依赖关系的
Lazy-initialization mode延迟初始化的 bean 告诉 IOC 容器在它第一次被请求时,而不是在启动时去创建一个 bean 实例
Initialization方法在 bean 的所有必需的属性被容器设置之后,调用回调方法
destruction方法当包含该 bean 的容器被销毁时,使用回调方法

2、Bean的作用域
概念:当在Spring中定义一个bean时,你必须声明该bean作用域的选 项,例如,为了强制Spring在每次需要时都产生一个新的bean实例,你应该声明bean的作用域的属性为prototype,同理,如果你想让Spring在每次需要时都 返回同一个bean实例,你应该声明bean的作用域属性为singleton
定义Bean的作用域:

作用域描述
Singleton该作用域将bean的定义的限制在每一个 Spring IOC 容器中的一个单一实例(默认)。(通俗来讲创建一个对象)
Prototype该作用域将单一 bean 的定义限制在任意数量的对象实例。
Request该作用域将 bean 的定义限制为 HTTP 请求。只在web-aware Spring ApplicationContext 的上下文中有效。
Session该作用域将 bean 的定义限制为 HTTP 请求。只在web-aware Spring ApplicationContext 的上下文中有效。
Global-session该作用域将 bean 的定义限制为全局 HTTP 会话。只在 web-aware Spring ApplicationContext 的上下文中有效。

3、 Bean的生命周期与继承
1.生命周期的概述: init-method初始化 destroy-method销毁
当一个bean被实例化时,他可能需要执行一些初始化使他转换成可用状态,同样, 当bean不在需要,并且从容器中移除时,可能需要做一些清除工作,这样状态转换的过程就是bean的生命周期,生命周期体现的两种方式分别为代码方法实现和XML配置文件实现,由于配置文件实现方式更加灵活,所以我们更多采取配置文件
2.继承的概述:
Bean定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等。子bean的定义继承父定义的配置数据。子bean定义可以根据需要重写一些值,或者添加其他值。Spring Bean定义的继承与Java类的继承无关,但是继承的概念是一样的,你可以定义一个父bean的定义作为模板和其他子bean就可以从父bean中继承所需的配置,但你使用基于XML的配置元数据时,通过使用父属性,指定父bean作为该属性的值来表明子bean的定义
3.补充说明:
定义一个bean时,如果用abstract=”true”属性的话则表明该bean自身不能实例化,仅仅只是作为一个纯粹的模板bean定义来使用的,充当子定义的父定义使用
三、注入的三种方式
1、set方法注入
2、构造器注入(构造器就是构造方法)
3、注解注入
四、spring事件处理
1、概述:
在我们之前的例子中,我们都是使用ApplicationContext,该容器负责管理bean的生命周期,其实,当容器加载管理的bean是会伴随着一系列的事件发生和处理,例如启动、停止、监听等。

ContextStartedEvent 容器启动
ContextStoppedEvent 容器停止
ApplicationEvent 容器事件
Applicationlistener 容器事件监听

2、Spring内置标准事件:

名字描述
ContextRefreshedEventApplicationContext被初始化或刷新时,该事件被发布,这也可以在ConfigurableApplicationContext接口中使用,refresh()方法来发生 刷新事件
ContextStartedEvent当使用ConfigurableApplicationContext接口中start()方法启动ApplicationContext时,该事件发布,你可以调查你的数据库,或者你可以在接受到这个事件后重启任何停止的应用程序 开始事件
ContextStoppedEventContextClosedEvent 当使用ConfigurableApplicationContext接口中的close()方法关闭ApplicationContext时,该事件被发布,一个已关闭的上下文到达生命周期末端,它不能被刷新或重启 关闭事件
RequestHandledEvent这是一个Web-specific事件,告诉所有bean HTTP 请求已经被服务 发送请求

3、特别注意:
Spring事件处理单线程的,所以如果一个事件被发布,直至所有的接受者得到该消息,或者该进程被阻塞,否则流程将不会停止。

五、spring自动装配
1、基本介绍:
前面我们已经学习了通过元素来声明bean和xml配置文件中和元素来注入bean,其实spring容器可以在不使用注入和元素的情况下自动装配相互协作的bean之间的关系,这有助于减少编写一个大的基于spring的应用程序的xml配置的数量。
2、自动装配的模式
1、用于指示spring容器为来使用自动装配进行依赖注入,使用元素的autowire属性为一个bean定义指定自动装配模式。
2、模式表

模式名称描述
No默认的设置,他意味着没有自动装配
byName由属性名自动装配,Spring容器看到在XML配置文件中bean的自动装配的属性设置为byName,然后尝试匹配,并且将他的属性与在配置文件中被定义为相同名称的beans的属性进行连接
byType由属性数据类型自动装配。Spring容器看到在XML配置文件中bean的自动配置的属性设置为byType,然后如果他的类型匹配配置文件中的一个确切的bean名称,他将尝试匹配和连接属性的类型,如果存在不止一个这样的bean,则一个致命的异常将会被抛出
Constructor类似于byType,但该类型适用于构造函数参数类型,如果在容器中没有一个构造函数参数类型的bean,则一个致命的错误将会发生
autodetectSpring首先尝试通过constructor使用自动装配来连接,如果他不执行,Spring尝试通过byType来自动装配

3、自动装配的局限性
1、重写的可能性:可以使用总是重写自动装配的和 设置来指定依赖关系
2、原始数据类型:不能自动装配所需的简单类型包括基本类型
3、混乱的本质:自动装配不如显式装配精确,所以如果可能的话尽可能使用显式装配

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值