带你走进spring的世界

spring有两大特性,其一为ioc,其二为aop

1.ioc的理解

ioc为依赖注入,他的好处就是把创建对象的权利交给spring去管理,这样的好处是 将应用程序中的对象解耦,传统的方式程序中的对象与对象引用的对象相互依赖,这样就使得依赖性增高,增加耦合性。

di为控制反转,以前创建对象的权利由应用程序,现在交给spring来管理 从应用层到ioc这就为控制反转。

ioc提供了两种容器:

1)bean工厂(BeanFactory),采用工厂模式,负责创建和分发bean对象,bean工厂还参与到bean的生命周期中,调用用户定义的初始化方法和销毁方法。

  bean工厂延迟加载所有bean,知道getBean方法被调用时才创建bean

2)应用上下文(ApplicationContext)建立在bean工厂之上,提供了系统架构服务。

  ApplicationContext提供了更多功能:

  文本信息解析工具,包括对国际化的支持

  载入文件资源的通用方法,如载入图片

  向注册为监听器的Bean发送事件

  是BeanFactory的完全超集

  ApplicationContext的三种常用实现:

  ClassPathXmlApplicationContext

  FileSystemXmlApplicationContext

  XmlWebApplicationContext

  如:ApplicationContext context=new ClassPathXmlApplicationContext(“xxx.xml”);

  可以通过ApplicationContext获得BeanFactory:

  BeanFactory factory=(BeanFactory)context;

下边重点说一些bean的生命周期

  容器寻找Bean的定义信息并将其实例化

  使用依赖注入

  如果Bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法

  如果Bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法

  如果有BeanPostProcessor和Bean关联,那么它们的postProcessBeforeInitialzation()方法被调用

  如果Bean实现了InitializbaleBean接口,那么调用他的afterPropertiesSet方法

  如果Bean指定了init-method方法,他将被调用

  如果有BeanPostProcessor和Bean关联,那么它们的postProcessorAfterInitialization()方法被调用

  Bean已经实例化出来了,可以被应用使用了

  如果Bean实现了DisposableBean接口,destroy()方法被调用

  如果指定了定制的销毁方法,就调用这个方法

首先BeanPostProcessor接口的作用是在处理bean的时候增加一些业务逻辑,InitializebaleBean接口和bean标签中的init-method是用于初始化bean,

<bean id="" class="" init-method="init"/>

关于bean的一些内容

  单例:通过getBean方法返回的对象总是一个对象

  多例:返回不同的对象

  <bean>的scope属性设置为singleton为单例,prototype为原型(多例)

  scope =singleton(单例,默认值) lazy-init才有效

  lazy-init=true 第一次getBean方法执行时创建bean

  vazy-init=false(默认值) 创建beanFactory时创建bean

  scope=prototype(多例) lazy-init无效 ,每次调getBean时都会创建bean

在ioc容器中配置bean的方式

 1)直接配置bean

  <bean id="target" class="target"></bean>

 2)通过静态工厂

  <bean id="target" class="factory" factory-method=""></bean>

 3)通过实例工厂

  <bean id="target" factory-class="factoryId" factory-method=""></bean>

  <bean id="factoryId" class="factory"></bean>

在bean中注入对象的方式

1)利用set/get方法注入

  <bean id="" class="">

    <property name="" ref=""></property>

  </bean>

 2).通过构造器注入

  <bean id="" class="">

    《constructor-arg index="" ref=""></constructor-arg>

  </bean>

 3).通过注解注入

谈一下ioc中用到的一些设计模式和方式

beanFactory采用的工厂模式,

如果配置bean  scope =singleton,则bean采用的是单例模式

在获取bean对象时采用的反射方式,通过反射类的class路径进行实例化,在该实例化过程中通过判断lazy-init来判断是生成目标对象还是代理对象,其中代理对象采用的是jdk代理。(hibernate中的懒加载采用的是cglib代理)

简单说一下两者的区别:

jdk代理为jdk自带的代理方式,通过实现InvocationHandler接口重写invoke方法,该代理类和目标类实现了同一接口。代理类生成方式是通过反射生成的。

cglib代理通过显示MethodInteceptor接口重写inteceptor方法,该代理类为目标类的子类。

随着jdk版本的不断升级,jdk代理的源码一部分被修改,jdk1.8中的效率已经远远大于cglib

具体代码请看文档

2.spring中的aop

aop就是面向切面编程的意思,采用的是动态代理模式,进行对方法的拦截,可以动态的添加方法,实现了功能上的解耦,一般用于管理事务和日志记录。

其中切面指的是一些你需要执行的公共方法,比如事务,日志

连接点为目标类的集合,比如service中的方法

切点为目标类

时间: 2024-08-26 18:04:23

带你走进spring的世界的相关文章

【密码学】一万字带您走进密码学的世界(下)

引文 密码学是研究编制密码和破译密码的技术科学.研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学:应用于破译密码以获取通信情报的,称为破译学,总称密码学. 在<一万字带您走进密码学的世界(上)>的文章中我们探讨了对称密码体系,哈希函数等技术,本文继续探讨密码学剩余的部分,本文的主要内容包括,非对称密码体系,签名算法等,因为本部分是区块链技术的基石,所以我会讲的更加详细一点,虽然我已经尽最大努力使思想简化,但是其中的数学理论对于很多人还是很晦涩,建议读者开始之前先读下数论的有关

详解C++引用——带你走进引用的世界

 一.介绍引用 首先说引用是什么,大家可以记住,引用就是一个别名,比如小王有个外号叫小狗,他的妈妈喊小狗回家吃饭,那就是在喊小王回家吃饭. 接下来我们用两行代码来声明一个引用(就拿小王和小狗来说吧): int xiaoW; int &xiaoG=xiaoW; 上面就是一个引用,说明几点要注意的地方: 1.&不是取地址符,而是引用运算符: 2.xiaoG是xiaoW的别名,所以这两个变量的值和地址都是一样的: 3.引用只能初始化,而不能先声明再赋值,因为引用就相当于一个常量: 4.在声明

【密码学】一万字带您走进密码学的世界(上)

引文 密码学是研究编制密码和破译密码的技术科学.研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学:应用于破译密码以获取通信情报的,称为破译学,总称密码学. 为了使读者对密码学有一个整体的认识,本文简述了常见的密码学的概念,其中本文包括对称密码,哈希函数.<一万字带您走进密码学的世界(下)>包括非对称密码,数字签名,数字认证等,需要指出的是文中并没有深入探讨加密算法原理,关于此部分内容,后续的文章会详细阐述.本文的主要内容如下图所示: 对称密码 在对称密码体系中,相同的密码用来

带你走进rsync的世界

导读 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录.rsync共有3种使用方法,在配置rsync也是有6个步骤的.下面我们就从rsync的介绍,rsync的使用和rsync的配置带你走进rsync的世界 一.rsync简介 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地

小丁带你走进git的世界三-撤销修改(转)

一.撤销指令 git checkout还原工作区的功能 git reset  还原暂存区的功能 git clean  还没有被添加进暂存区的文件也就是git还没有跟踪的文件可以使用这个命令清除他们 git revert 撤销本次提交. 二.指令讲解 Git checkout 首先我们对文件的一个修改,对master.txt进行了修改 修改结果我们利用上面的知识来进行查看. 新增加了Test这么一段话,如果我们想要将工作区的内容添加到暂存区会使用git  add这个命令,如果我们想要还原工作区内容

小牛带你走进Spring的事务

摘要本文摘抄了Spring事务相关的一些理论,主要讲述事务的特性.事务的传播行为.事务的隔离规则. 关键词:事务特性,事务传播,事务隔离 一.什么是事务事务是用来保证数据的完整性和一致性,正如金钱转账,金钱总数不会增加也不会减少. 数据库 事务管理有四个特性(ACID): 特性描述原子性(Atomicity)事务作为一个整体被执行,要么全部被执行,要么都不执行.一致性(Consistency)事务应确保数据的状态从一个一致状态转变为另一个一致状态,数据不应该被破坏.隔离性(Isolation)多

一个"收纳箱"带你走进数据库的世界

一个"收纳箱"带你走进数据库的世界 一.前言 1.1时势造英雄--数据时代,未来已来 ? 如今,我们已然"从IT时代迈入DT时代",马云也说过:未来的资源不是石油,不是天然气,而是"数据".这是因为,在信息技术迭代如此之快的时代,会产生各种各样的大量数据.信息,那么伴随而来的问题就是:我们应该如何实现安全.有效地存储.检索以及管理数据? ? 数据时代,对数据的有效存储.高效访问.方便共享和安全控制已经成为目前亟待解决的问题. 1.2问题引出--如

Linux新手入门怎么学?这些知识带你走进云的世界

云计算的大名,不说是妇孺皆知,但知道跟互联网行业沾点儿亲带点儿故的,怎么着也得算是家喻户晓了.当然来说,云计算毕竟是一个术语,是一个专业名词,很多朋友听说是听说过,也知道它现在的火热,更是知道搞云计算的一个个都又有闲又有钱的样子,但就是不知道云计算是个什么东西-- 什么是云计算?就像用电不需要家家装备发电机,只需直接从电力公司购买一样."云计算"带来的就是这样一种变革.由谷歌.IBM这样的专业网络公司来搭建计算机存储.运算中心,用户依靠一根网线借助浏览器就可以很方便的访问,把"

带你走进汇编的世界

本文所做的实验是用汇编实现字符串逆向排序的功能. 其实就相当于C语言中的reverse( ) 函数. 简要叙述: 将字符串 ''abcdefghij" 放到指定的内存位置,同时分配一段内存作为栈 然后将字符串入栈再出栈,以此实现字符串逆向排序功能 一下就是代码: 编译: 连接: 调试: 初始化阶段: 观察右边内存中的数据, 入栈结束: 字符串“abcdefghij” 已经存进内存中 出栈结束: 字符串逆向排序完成. 实现原理: 首先在内存中定义数据段和栈: 将字符串内容放到内存中数据段和栈中: