A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tfy 中级黑马   /  2012-12-27 22:54  /  1647 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文




Spring 总结Spring结构:
Spring 7大组成模块:
1:Spring core:提供了Spring 的核心功能,BeanFactory是Spring核心容器的主要组件,它通过Ioc把程序的配置和依赖性与实际的代码分开,是整个Spring的基础。
2:Spring context:通过配置文件向Spring提供上下文信息,它构建在BeanFactory之上,另外增加了国际化和资源访问等功能。
3:Spring dao:提供了一个简单有效的JDBC应用。
4:Spring aop:提供了面向方面编程的功能。
5:Spring orm:Spring除了有自己的JDBC以外还提供了对其他ORM框架的支持,如Hibernate,都可以和Spring进行良好的结合。
6:Spring web:提供了简化的处理多部分请求以及把请求参数绑定到域的任务。
7:Spring MVC:提供了MVC2模式的实现,也可以和struts良好的集成在一起。
  这七大模块可以单独使用,不需要其他模块的支持!


Spring IoC :
IoC(控制反转):主要作用于依赖注入。
org.springformework.beans 和 org.springformework.context  是Spring Ioc的基础。
ApplicationContext是BeanFactory的扩展。
BeanFactory是IoC的核心接口:负责实例化、定位、配置应用程序中的对象及建立这些对象之间的依赖关系。

Spring实例化容器:
1.小应用程序使用
Resource resource=new FileSystemResource("beans.xml");
或  Resource resource=new ClassPathResource("applicationContext.xml");
BeanFactory factory=new XmlBeanFactory(resource);
2.用于测试或者桌面应用程序使用
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
Bean bean= (Bean) context.getBean("beanId");
3.在web容器中使用的工厂
WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
Bean bean= (Bean) context.getBean("beanId");

DI(依赖注入):主要有四种。
1.Setter注入
2.构造器注入
3.接口注入
4. 属性注入(注解autowire)

AutoWire:主要有五种类型
1.no
2.ByName        ——根据属性名字装配
3.ByType        ——根据属性类型装配
4.Constructor   ——根据构造参数装配(更ByType相似)
5.autodetect    ——根据反射机制来决定使用Constructor或ByType

ApplicationContext中事件:
1.ContextRefreshedEvent:初始化或刷新时发送事件。如果使用CofigurableApplicationContext接口的refresh()方法:所有bean装载后处理bean被检测和激活,ApplicationContext就绪,刷新在Context关闭时会触发多次。
2.ContextStartedEvent:启动时发送事件;
3.ContextStoppedEvent:停止时发送事件;
4.ContextClosedEvent :关闭时发送事件;
5.RequestHandledEvent:Web事件通知所有bean有一个Http Request请求结束后会发送一个事件(作用在SpringDispartcherServlet的Web应用)


Spring bean的作用域 :
spring 的作用域都是来自org.springframework.beans.factory.config.Scope  接口的定义
作用域有一下几种:

作用域描述
singleton
在每个Spring IoC容器中一个bean定义对应一个对象实例。(默认)

prototype
一个bean定义对应多个对象实例。

request
在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效。

session
在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

global session
在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的Spring ApplicationContext情形下有效。


还有自定义作用域(不建议!) 须实现org.springframework.beans.factory.config.Scope   
注意:假如你在编写一个标准的基于Servlet的web应用,并且定义了一个或多个具有global session作用域的bean,系统会使用标准的HTTP Session作用域,并且不会引起任何错误。
作用域bean与依赖:
能够在HTTP request或者Session(甚至自定义)作用域中定义bean固然很好,但是Spring IoC容器除了管理对象(bean)的实例化,同时还负责协作者(或者叫依赖)的实例化。如果你打算将一个Http request范围的bean注入到另一个bean中,那么需要注入一个AOP代理来替代被注入的作用域bean。也就是说,你需要注入一个代理对象,该对象具有与被代理对象一样的公共接口,而容器则可以足够智能的从相关作用域中(比如一个HTTP request)获取到真实的目标对象,并把方法调用委派给实际的对象。 假如你在编写一个标准的基于Servlet的web应用,并且定义了一个或多个具有global session作用域的bean,系统会使用标准的HTTP Session作用域,并且不会引起任何错误。 <aop:scoped-proxy/>不能和作用域为singleton或prototype的bean一起使用。为singleton bean创建一个scoped proxy将抛出BeanCreationException异常。



bean特性:
初始——>销毁
Spring提供了几个标志接口(marker interface),这些接口用来改变容器中bean的行为;它们包括InitializingBean和DisposableBean。实现这两个接口的bean在初始化和析构时容器会调用前者的afterPropertiesSet()方法,以及后者的destroy()方法。
或者如果你需要自定义特性或者生命周期行为,你可以实现自己的BeanPostProcessor,因为Spring在内部是使用BeanPostProcessor实现来处理它能找到的任何标志接口并调用相应的方法。
1.实现org.springframework.beans.factory.InitializingBean接口允许容器在设置好bean的所有必要属性后,执行初始化事宜。实现org.springframework.beans.factory.DisposableBean接口的bean允许在容器销毁该bean的时候获得一次回调。
2.通常,要避免使用InitializingBean用DisposableBean接口(而且不鼓励使用该接口,因为这样会将代码和Spring耦合起来)可以在Bean定义中指定一个普通的方法,即在XML配置文件中通过指定init-method或destroy-method属性来完成。

注意:还可以用顶层<beans/>元素'default-init-method'属性的使用。该属性的出现意味着Spring IoC容器会把bean上名为'default-init-method'属性里面的方法识别为初始化方法回调,并且当bean被创建和装配的时候,如果bean类具有这样的方法,它将会在适当的时候被调用。  如果实际的回调方法与默认的命名约定不同,那么可以通过在<bean/>元素上使用'init-method'和'destroy-method'属性指定方法名来覆盖缺省设置。


在非web应用中优雅地关闭Spring IoC容器:


  • AbstractApplicationContext ctx
  •             = new ClassPathXmlApplicationContext(new String []{"beans.xml"});
  •         // add a shutdown hook for the above context...  
  •         ctx.registerShutdownHook();


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马