一些关于Spring的随笔
Spring的IOC、AOP
IOC(Inversion of Control):
spring容器控制了所有的bean,不用spring以前,一个bean要依赖另一个bean就在这个bean里初始化另一个bean才能使用另一个bean,是这个bean在控制另一个bean。现在spring容器控制所有的bean,并把另一个bean注入给这个bean。反转:是指控制bean的权利转移给容器了。
"不要给我们打电话,我们会打给你的(don‘t call us, we‘ll call you)"这是著名的好莱坞原则。
在好莱坞,把简历递交给演艺公司后就只有回家等待。由演艺公司对整个娱乐项目完全控制,演员只能被动式的接受公司的差使,在需要的环节中,完成自己的演出。
这和软件开发有一定的相似性, 演员们就像一个个Java Object, 最早的时候自己去创建自己所依赖的对象, 有了演艺公司(Spring容器)的介入,所有的依赖关系都是演艺公司搞定的, 于是控制就翻转了
应用控制反转后,当对象被创建时,由一个调控系统内的所有对象的外界实体将其所依赖的对象的引用传递给它。也就是说,依赖被注入到对象中。所以控制反转是关于一个对象如何获取它所依赖的对象的引用的,在这里,反转指的是责任的翻转
AOP(Aspect Oriented Programming):
在做系统设计的时候,一个非常重要的工作就是把一个大系统做分解,按业务功能分解成一个个低耦合、高内聚的模块,分解后会发现有些东西是通用的,或者是跨越多个模块的:
日志:对特定的操作输出日志来记录
安全:在执行操作之前进行的操作检查
性能:要统计每个方法的执行时间
事务:方法开始前要开始事务,结束后要提交或回滚事务
等等....
如果每次用到他们都编写一遍代码过于麻烦还有大量的代码冗余,aop就是用来解决这个问题的。
大体可以理解为:把某一项功能的代码封装起来,在用到它的地方直接切入。
Spring 的 bean:
bean就相当于定义一个组件,这个组件是用于具体实现某个功能的。这里的所定义的bean就相当于给了你一个简洁方便的方法来调用这个组件实现你要完成的功能。
Spring的容器:
Spring容器可以帮助你管理所有的Bean对象,bean都放在容器里
Beanfactory 和 ApplicationContext 都可以看成是容器的具体表现形式。就像不同样子的桶。用户需要什么样就用什么样的。
Beanfactory: 最基本的接口类 设定了最基本的功能规范。(最简单的桶,能装水,有把手)
Spring通过定义BeanDifinition 来管理基于Spring的应用中各种对象以及他们之间的相互依赖关系。BeanDifinition 抽象了我们对Bean的定义,是让容器起作用的主要数据类型。
Beanfactory 定义了IOC容器的最基本的形式,并且提供了IOC容器所应该遵守的最基本的服务契约,也是我们使用IOC容器所应遵守的最底层和最基本的编程规范。并没有给出容器的具体实现。
用户使用容器时,可以使用转义符“&”来得到FactoryBean本身,用来区分通过容器来获取FactoryBean产生的对象和获取FactoryBean本身。举例来说,如果myJndiObject是一个FactoryBean,那么使用&myJndiObject得到的是FactoryBean,而不是myJndiObject这个FactoryBean产生出来的对象。
区分FactoryBean和BeanFactory这两个在Spring中使用频率很高的类,它们在拼写上非常相似。一个是Factory,也就是IoC容器或对象工厂;一个是Bean。在Spring中,所有Bean都是由BeanFactory(也就是IoC容器)来进行管理的。但对FactoryBean而言,这个Bean不是简单的Bean,而是一个能产生或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似。
最后给大家分享一个连接:
Spring 的本质系列(一):依赖注入
该连接来自于 码农翻身,码农翻身是一个非常赞的微信公众号。