框架

来源:互联网 发布:php开发微信步骤 编辑:程序博客网 时间:2024/06/10 09:29

context->lisener->filter(chain.doFilter(),可以搞cors)->servlet

Spring MVC 的入口是 DispatcherServlet, 而 Struts2 是 FilterDispatcher.

Struts2:

Struts 2框架由3个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。Struts 2框架获得了*.action请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件.

Struts 2应用中的Action都被定义在struts.xml文件中,在该文件中定义Action时,定义了该Action的name属性和class属性,其中name属性决定了该Action处理哪个用户请求,而class属性决定了该Action的实现类。 

 

Spring:

依赖注入是在编译阶段尚未知所需的功能是来自哪个的类的情况下,将对象所依赖的功能对象实例化的模式。依赖注入是控制反转的基础。依赖注入是一种实例化对象的方式。

控制反转(IoC/Inverse Of Control):   调用者不再创建被调用者的实例,由spring框架实现(容器创建)所以称为控制反转。容器创建对象

依赖注入(DI/Dependence injection) :   容器创建好实例后再注入调用者称为依赖注入。容器注入对象

 

service是业务层,dao是数据访问层。面向接口编程,表示层调用控制层,控制层调用业务层,业务层调用数据访问层。

Spring的核心是IoC控制反转,AOP面向切片的编程。

jeecms:SpringMVC3+Spring3+Hibernate3+Freemarker(模板引擎)+HTML5

IOC容器:管理对象的创建及依赖关系。

applicationcontext.xml:Spring的配置文件。注意dtd约束及版本号。

 

通过该配置文件的<beans><bean>给IOC容器设置元素。<bean>中的一个<propertyname>表示该bean的set属性,<ref bean>表示该bean引用的bean.

配置好beans以后,通过beanFactory去getBeans取得对应的bean。

BeanFactory 可以理解为含有bean集合的工厂类。BeanFactory 包含了种bean的定义,以便在接收到客户端请求时将对应的bean实例化。将bean自身与bean客户端的配置中解放出来。BeanFactory还包含了bean生命周期的控制,调用客户端的初始化方法(initialization methods)和销毁方法(destruction methods)。

 

ApplicationContext就是由BeanFactory派生出来的。有拥有BeanFactory的功能及一些配置文件,参数的读写性质。各种beans就配置在它当中,可以通过ApplicationContextgetBeans取得各种beans

Spring可以通过<list>,<map>,<set>,<props>注入Collection。

Spring容器可以自动装配合作关系bean之间的关联关系(自动装配),但是默认禁止的,开发者需要自行在bean定义中用标签明确的设置依赖关系。

 

默认情况时,IoC容器内的对象时单实例的。这些实例在IoC初始化时就生成好了,并非在读取时生成。

设值注入:被IoC控制的类,提供默认的无参构造器,属性通过set name 注入。这样需改类(属性值,引用class)时,仅需该配置文件。可以不需保证某种依赖已经注入,即依赖对象可能是不完整的。解决了循环依赖。

构造注入:不提供属性的set方法,而提供带初始化参数的构造函数。<bean>内提供一个<construct-arg>即可。A,B对象循环引用就会出问题。

 

Spring的是设计模式有:代理,工厂,单例等。可以监听ApplicationContext 发布的事件:上下文的开始,关闭,更新,停止;请求更新等事件。

 

IoC:Inverse of Control:被调用对象不是调用对象new的,而是通过容器注入的。

控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。依赖注入是控制反转的基础.

 

IoC容器管理的关键点:1必须将对象定义到spring的配置文件中;2必须定义注入属性的set,将spring对象注入。这些set属性并未通过硬编码,而是以bean配置组合在一起。(DIDepend Injection,依赖注入,解耦。)

通过IoC可以注入String,int,各种类,数组(array,value),list(list,value),set(set,value),map(map,entry)等。IoC是DI的基础,仅有IoC只能application.get取得对象,有了DI,就可以AutoWired。

 

<bean>属性:

id不能重复,name可以重复,scope默认是singleton,scope为prototype时,申请一次,产生一个新的对象。

bean的生命周期:singleton时在IoC容器初始化时就出现,直到容器销毁。

 

Spring Bean的作用域?

1.singleton:这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bean的实例,单例的模式由bean factory自身来维护。故Spring Bean不是线程安全。

2.prototype:原形范围与单例范围相反,为每一个bean请求提供一个实例。

3.request:在请求bean范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。

4.Session:与请求范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。

5.global-session:global-session和Portlet应用相关。