Spring笔记

来源:互联网 发布:淘宝推广佣金 编辑:程序博客网 时间:2024/06/06 19:55

Spring特点
1、一个框架
2、低侵入式设计,代码的污染低
3、独立于各种应用服务器,基于Spring跨级啊的应用,可以真正实现一次书写,导出运行的承诺。
4、ioc容器降低了业务对象替换的复杂性,提高了组件之间的解耦
5、aop支持允许将一些通用任务,如安全、事物、日志等进行集中式管理,从而提供了更好的复用。
6、orm和dao提供了与第三方持久层跨级啊的良好整合,并简化了底层的数据库访问。
7、高度开放性,并不强制应用全完起来与spring,开发者可以自由选用spring框架的部分或者全部。

spring核心机制
管理bean
程序主要通过spring容器来访问容器bean.ApplicationContext是Spring容器最常用的接口,实现类:
ClassPathXmlApplicationContext:从类路径下搜索配置文件,并根据配置文件来创建spring容器。
FileSystemXmlApplicationContext:从文件系统的相对路径或绝对路径下搜索配置文件,并根据配置文件来创建Spring容器。

依赖注入
spring负责创建管理所有的bean.
bean之间的依赖关系,使用依赖注入的方式管理。
使用依赖注入,不仅可以为bean注入普通的属性值,还可以注入其他bean的引用。依赖注入是一种优秀的解耦方式,其可以让bean以配置文件组织在一起,而不是以硬编码的方式耦合在一起。

设值注入
设值注入是指ioc容器通过成员变量的setter方法来注入被起来的对象。
优点:
直观、自然
对于复杂对于的依赖关系,应该采用设值注入。因为如果采用构造注入,会导致构造器过于臃肿,难以阅读。spring在创建bean实例时,需要同时实例化器依赖的全部实例,因而导致性能下降,而设值注入可以避免此问题。

构造注入
spring底层以反射的方式执行带指定参数的构造器,当执行带参数的构造器时,就可利构造器参数对成员变量执行初始化。
优点:
构造注入可以在构造器中决定依赖关系的注入顺序,优先依赖的优先注入;对于依赖关系无序变化的bean,构造注入更有用,因为没有setter方法,所有的依赖关系全部在构造器内设定,无序担心后续的戴安对依赖关系产生破坏;依赖关系只能在构造器中设定,则只有组件的创建者才能改变组件的依赖关系,对组件的调用者而言,组件内部的依赖关系完全透明,更符合高内聚的原则。
对于依赖关系无序变化的注入,尽量采用构造注入,而其他依赖关系的注入,则考虑设值注入。

spring容器中的bean
开发者使用spring主要是做:开发bean;配置bean
对于spring来说,它要做的就是根据配置文件来创建bean实例,并调用bean实例的方法完成依赖注入。

容器中bean的作用域
当通过spring容器创建一个bean实例,不仅可以完成bean实例的实例化,还可以为bean指定特定的作用域。

spring支持的作用域
singleton 单例模式,在spring 容器中,bean将只生成一个。
prototype 每次通过容器的getBean()方法获取,都将产生一个新的bean实例。
request 对于一次http请求,request作用域的bean将只生成一个实例,同一个http其你去内,每次请求该bean,拿到的是同一个实例,只有在web应用中使用时,才生效。
session 对于一次http会话,session作用于的bean将只生成一个实例。
global session 每个全局的http session对应一个bean实例,在典型的情况下,尽在使用portlet context的时候有效,同样只在web应用中有效。

如果不指定bean的作用于,spring默认使用singleton作用域。prototype作用域的bean创建、销毁代价较大。

自动装配注入合作者bean
spring可以自动装配bean之间的依赖关系,而无需使用ref显示指定以依赖的bean,而是有spring容器检查xml配置文件内容,根据某种规则,为调用者bean注入被依赖的bean.




Spring自动装配可通过元素的default-autowire属性指定,该属性对配置文件中所有的Bean起作用;也可通过对元素的autowire属性指定,该属性只对该Bean起作用。
autowire和default-autowire可以接受如下值:
no: 不使用自动装配。Bean依赖必须通过ref元素定义。这是默认配置,在较大的部署环境中不鼓励改变这个配置,显式配置合作者能够得到更清晰的依赖关系。
byName: 根据setter方法名进行自动装配。Spring容器查找容器中全部Bean,找出其id与setter方法名去掉set前缀,并小写首字母后同名的Bean来完成注入。如果没有找到匹配的Bean实例,则Spring不会进行任何注入。
byType: 根据setter方法的形参类型来自动装配。Spring容器查找容器中的全部Bean,如果正好有一个Bean类型与setter方法的形参类型匹配,就自动注入这个Bean;如果找到多个这样的Bean,就抛出一个异常;如果没有找到这样的Bean,则什么都不会发生,setter方法不会被调用。
constructor: 与byType类似,区别是用于自动匹配构造器的参数。如果容器不能恰好找到一个与构造器参数类型匹配的Bean,则会抛出一个异常。
autodetect: Spring容器根据Bean内部结构,自行决定使用constructor或byType策略。如果找到一个默认的构造函数,那么就会应用byType策略。

当一个bean即使用自动装配依赖,又使用ref显示指定依赖时,则显示指定的依赖覆盖自动装配依赖。

创建bean
1、使用构造器创建bean
使用构造器来创建bean实例时最常见的,如果不采用构造注入,spring底层会调用bean类的午餐构造器来创建实例,因此要求该bean类提供无参数的构造器。
采用more的构造器创建bean实例,sprig对bean的所有属性执行默认初始化,即所有的基本类型的值初始化为0或者false;所有的引用类型的值初始化为null
2、使用静态工厂方法创建bean
使用静态工厂方法创建bean实例,class属性必须制定,但是此时class属性并不是制定bean实例的实现类,而是静态工厂类。
spring通过该属性知道由哪个工厂类来创建bean.
还需要设置factory-method属性来制定静态工厂方法,spring将调用静态工厂方法返回一个bean实例,一旦获得了制定bean实例,spring后面的处理步骤与采用普通方法创建bean实例完全一样。如果惊天方法需要参数,则使用

原创粉丝点击