热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringIOC、AOP、Bean入门了解(简单笔记)

文章目录Spring概述Spring框架SpringIOC及Bean容器IOCBean作用域Bean装配生命周期AwareBean的自动装配SpringAOP基本概念AOP基本概念

文章目录

  • Spring概述
    • Spring框架
  • Spring IOC 及Bean容器
    • IOC
    • Bean作用域
  • Bean装配
    • 生命周期
    • Aware
    • Bean的自动装配
  • Spring AOP基本概念
    • AOP基本概念
    • advice
    • Spring的AOP实现
    • 有无接口的Spring AOP实现区别


Spring概述

Spring框架


  • 框架的特点
    • 半成品
    • 封装了特定的处理流程和控制逻辑
    • 成熟的、不断升级的软件
  • 框架和类库的区别
    • 框架一般是封装了逻辑、高内聚的,类库则是松散的工具组合
    • 框架专注于某一领域,类库则是更加通用
  • 为什么使用框架
    • 软甲系统日趋复杂
    • 重用度高,开发效率和质量提高
    • 专注于对领域的了解,使需求分析更充分
    • 易于上手、快速解决问题

Spring IOC 及Bean容器

IOC


  • 面向接口编程
    • 面向接口编程中的“接口”适用于隐藏具体实现和实现多态性的组件
  • IOC概念
    • IOC:控制反转,控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护
    • DI(依赖注入)是一种实现方式
    • 目的:创建对象并且组装对象之间的关系
    • 类比



  • IOC利处
    • 不用创建对象
    • IOC能自己管理对象

Bean作用域


作用域描述
singleton(默认)单例,指一个Bean容器中只存在一份
prototype每次请求创建新的实例,destroy方式不生效
requestHTTP request中有效
session当前会话有效
global seesion基于protlet的web中有效,如果是在web中,同session

Bean装配

生命周期


  • 定义

  • 初始化→\rightarrow配置init-method 或者 实现接口

    org.springframework.beans.factory.InitializingBean

  • 使用

  • 销毁→\rightarrow配置destroy-method 或者 实现接口

    org.springframework.beans.factory.DisposableBean

  • 配置全局默认初始化、销毁方法

    <bean id&#61;"beanLifeCycle" class&#61;"com.imooc.lifecycle.BeanLifeCycle" init-method&#61;"start" destroy-method&#61;"stop"></bean>


Aware


  • Spring中提供了一些以Aware结尾的接口 ,实现了Aware接口的bean在被初始化之后,可以获取相应资源
  • 通过Aware接口,可以对Spring相应资源进行操作( 一定要慎重)
  • 为对Spring进行简单的扩展提供了方便的入口

Bean的自动装配


方式描述
No根据属性名自动装配
byName根据属性名装配
byType如果容器中存在一个与指定属性类型相同的bean ,那么将与该属性自动装配;如果存在多个该类型bean ,那么抛出异常,并指出不能使用byType方式进行自动装配;如果没有找到相匹配的bean ,则什么事都不发生
constructor与byType方式类似,不同之处在于它应用于构造器参数。如果容器中没有找到与构造器参数类型一致的bean&#xff0c;那么抛出异常



Spring AOP基本概念

AOP基本概念


  • AOP概念→\rightarrowAspect Oriented Programming的缩写&#xff0c;意为:面向切面编程&#xff0c;通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术

  • 主要功能→\rightarrow日志记录&#xff0c;性能统计&#xff0c;安全控制&#xff0c;事务处理&#xff0c;异常处理等等

  • AOP实现方式

    • 预编译→\rightarrowAspectJ
    • 运行期动态代理( JDK动态代理、CGLib动态代理)

名称说明
切面一个关注点的模块化,这个关注点可能会横切多个对象
连接点程序执行过程中的某个特定的点
通知在切面的某个特定的连接点上执行的动作
切入点匹配连接点的断言,在AOP中通知和一一个切入点表达式关联
引入在不修改类代码的前提下,为类添加新的方法和属性
目标对象被一个或者多个切面所通知的对象
AOP代理AOP框架创建的对象,用来实现切面契约(aspectcontract)(包括
通知方法执行等功能)
织入把切面连接到其它的应用程序类型或者对象上&#xff0c;并创建一个被
通知的对象,分为:编译时织入、类加载时织入、执行时织入

advice


名称说明
前置通知(Before advice)在某连接点( join point )之前执行的通知,但不能阻止连接点前的执行(除非它抛出一个异常)
返回后通知(After returning advice)在某连接点( join point )正常完成后执行的通知
抛出异常后通知(After throwing advice)在方法抛出异常退出时执行的通知
后通知(After(finally)advice)当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)
环绕通知(Around Advice)包围一个连接点( join point )的通知

Spring的AOP实现


  • 纯java实现,无需特殊的编译过程,不需要控制类加载器层次
  • 目前只支持方法执行连接点(通知Spring Bean的方法执行)
  • 不是为了提供最完整的AOP实现(尽管它非常强大) ;而是侧重于提供- -种AOP实现和SpringIoC容器之间的整合,用于帮助解决企业应用中的常见问题
  • Spring AOP不会与AspectJ竞争,从而提供综合全面的AOP解决方案

有无接口的Spring AOP实现区别


  • Spring AOP默认使用标准的JavaSE动态代理作为AOP代理,这使得任何接口(或者接口集)都可以被代理

  • Spring AOP中也可以使用CGLIB代理(如果一个业务对象并没有实现一个接口)


推荐阅读
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文介绍了在go语言中利用(*interface{})(nil)传递参数类型的原理及应用。通过分析Martini框架中的injector类型的声明,解释了values映射表的作用以及parent Injector的含义。同时,讨论了该技术在实际开发中的应用场景。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
author-avatar
凌亂的回譩
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有