Spring框架是一个java应用程序的开发提供了综合。广泛的基础支持java平台。
Spring框架集成了20多个模块,这些模块主要分为核心容器,数据访问/集成,WEB,AOP(面向切面编程),工具,消息和测试模块
核心模块:==================================================
Spring Core模块是spring的核心容器,它实现了IOC模式,提供了Spring基础功能,此模块中包含的BeanFactory类是spring的核心类,负责Bean的配置和管理,
它 采用Factory模式实现了IOC的依赖注入(依赖注入:注解,set,构造器等等)。
定义JavaBean是一种Java语言写成的可重用的组件,要编写JavaBean,类必须是具体类和公共类(实体类),并且有无参数的构造器
IOC:version Object Controller 控住反转
demo:
public interface Dao(){
}
public class DaoImpl impl Dao(){
public String getData(){
return "返回数据";
}
}
public void main
Dao dao = new DaoImpl();
把获取的数据过程给实现的代码,自己直接使用获取到的数据,繁琐的过程交给了第三方(交给了IOC容器)
javaBean和Bean的区别?
用处不同:
传统javabean更多的地作为值传递参数,而spring中的bean用处几乎随处可见,只要添加了注解在spring启动,在容器中就会有bean
写法不同:传统的javabean不接受任何容器管理器生命,spring中的bean有spring管理器生命周期
所用被spring实例化并管理的java类都是bean
bean的生命周期:
spring开启,spring容器中有了bean
在AppilcationContext中的Bean生命周期
Bean的生命周期
通过bean调用实现接口是为了先获取容器
1:需要所有的Bean根据bean定义的信息来实例化bean
2:使用依赖注入,spring按bean定义的信息配置bean的属性
3:若bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递bean的id
4:若bean实现BeanFactoryAware接口,工厂调用的setBeanFactory()方法,BeanFactory自身作为参数
5:若bean实现ApplicationContextAware接口,setApplicationContext().方法,bean作为参数
6:若BeanPostProcessor和bean关联
则他们的beanProcessAfterInitization()方法调用
7、若bean指定了init-method="init"方法、,它将被调用。
8、若有BeanPostProcessor和bean关联,
则它们的postProcessAfterInitialization()方法被调用
注意:通过已上操作,此时的Bean就可以被应用的系统使用,并讲保留在BeanFactory工厂中直到不再需要为止.但我们也可以通过9或者10进行销毁
9、若bean实现了DisposableBean接口,distroy()方法被调用
10、如果指定了destroy-method="close"定制的销毁方法,就调用这个方法
Spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过Spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是"控制反转"。通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员。
控制反转IoC是Inversion of Control的缩写,是说对象的控制权进行转移,转移到第三方,比如转移交给了IoC容器,它就是一个创建工厂,你要什么对象,它就给你什么对象,有了IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系
依赖注入:
注解注入,set注入,构造器注入,静态工厂的注入,实例工厂的注入
Context模块:======================================
获取apring context模块的详细介绍
http://www.cnblogs.com/davidwang456/p/5717972.html
并且添加了事物的处理,国际化,资源装载,透明装载,
以及数据效验,它还提供了框架式的Bean的访问方式和很多企业级的功能,如JNDI访问、支持EJB、远程调用、集成模板框架、Email和定时任务调度等。
重点类:
ApplicationContext是核心接口,它为应用提供了环境配置,当应用在运行时ApplicationContext只能读,但可以在该接口中来实现reload功能
定义:
public interface ApplicationContext extends EnvironmentCapable,ListableBeanFactory,HierachicaBeanFactory,MessageSource,
ApplicationEvenPublisher,ResourcePatternResolver{
}
特点:
提供了一个bean工厂方法访问应用组件,通过继承org.springframework.beans.factory.ListableBeanFactory来获得的;
通过通用的资源文件加载文件资源的能力,通过继承org.springframework.core.io.ResourceLoader来获得的;
发布事件到注册的监听的能力,通过继承ApplicationEventPublisher来获得的;
解析消息,支持国际化的的能力,通过继承MessageSource来获得的;
context的继承机制。定义在子context将优先级别更高。这意味着,例如:一个父context可以被整个web应用共享,而每个servlet可以有自己的子context,并且这些servlet彼此独立。例如http://www.cnblogs.com/davidwang456/p/4122842.html。
另外还有标准的org.springframework.beans.factory.BeanFactory的生命周期管理能力,ApplicationContext实现类发现和触发beanApplicationContextAware,还包括ResourceLoaderAware,ApplicationEventPublisherAware,MessageSourceAware bean。
Web模块:================================
此模块是建立在Spring Context 基础之上,它提供了Servlet监听器监听context和web的上下文,对现有的web框架,如JSF、Tapestry、Structs等,提供了集成。Structs是建立在MVC 这种公认的好的模式上的,Struts在M、V和C上都有涉及,但它主要是提供一个好的控制器和一套定制的标签库上,也就是说它的着力点在C和V上,因此,它天生就有MVC所带来的一系列优点,如:结构层次分明,高可重用性,增加了程序的健壮性和可伸缩性,便于开发与设计分工,提供集中统一的权限控制、校验、国际化、日志等等。