Spring 的知识点

来源:互联网 发布:excel拆分数据 编辑:程序博客网 时间:2024/06/07 14:59

 在 WebApplicationContext中的特殊的bean

控制器 (Controllers)

控制器  实现的是 MVC 中的 C


处理器映射(Handler mapping )

处理器映射包含预处理器 ( pre-processor ),后置处理器(post-processor)和控制器的列表,他们在符合某种条件时才被执行。


视图解析器(view resolvers)

可以将视图名解析为对应的视图。


本地化解析器(Locale resolver )

能够解析用户正在使用的本地化设置,以提供国际化的视图。


主题解析器(Theme resolver)

能够解析你的web应用所使用的主题,一共个性化的布局。


文件上传解析器(Multipart File resolver)

提供HTML表单文件上传的功能


处理器异常解析器(Handler exception resolver)

可以将异常对应到视图,或者实现更加复杂的异常处理逻辑。


  Spring IOC 理论实现

org.springframework.beans及org.springframework.context包 是spring ioc 容器的基础。


基本原理 -- 容器和bean

在spring 中,那些组成你应用程序的主题及有spring ioc容器所管理的对象,被称之为bean。简单的说,bean 就是有spring 容器初始化,装配及管理的对象。除此之外,bean就与应用程序中的其他对象没有什么区别了,而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。

容器

org.springframework.beans.factory.BeanFacotry 是 spring ioc 容器的实际代表着,IOC 容器负责容纳此前所描述的bean,并对BEAN进行管理。 


实例化容器

spring ioc容器的实例化非常简单:

ApplicationContext context = new ClassPathXmlApplication(new String[]{"serices.xml","daos.xml"});

BeanFactory factory = context;


<beans>
    <import resource="services.xml"/>
        <import resource="resources/messageSource.xml"/>
<import resource="/resources/themeSource.xml"/>

    <bean id="bean1" class="..."/>
<bean id="bean2" class="..."/>
</beans>
使用容器
从本质上讲,beanfacotry仅仅只是一个维护bean定义以及相互依赖关系的高级工厂接口。通过beanfacotry我们可以访问bean定义。
Resource res = new FileSystemResource("beans.xml");
BeanFactory  factory = new XmlBeanFactory(res);
依赖
典型的企业应用不会只由单一的对象组成。毫无疑问,即使最简单的系统也需要多个对象共同来展示给用户一个整体的应用。接下来的内容除了阐述如何单独定义一系列bean外,还将描述如何让这些bean对象一起协同工作来实现一个完整的这是应用。
依赖注入
容器的工作就是创建bean时注入哪些依赖关系。相对于由bean 自己来控制器实例化,直接在构造器中指定依赖关系或者类似服务定位器模式,控制从根本上发生倒转。
Bean 的作用域
创建一个Bean定义,其实质是用该bean定义对应的类来创建真正实力的“配方”。把bean 定义看成一个配方很有意义,它与class很类似,只根据一张“处方”就可以创建多个实例。
singleton
在每个 spring ioc 容器中一个bean 定义对应一个对象实例
prototype
一个bean 定义对应多个对象实例。
request
在一次HTTP请求中,一个bean定义对应一个实例;
session
在一个HTTP Session 中,一个bean 定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
global session
在一个全局的HTTP Session中,一个bean定义对应一个实例。
定制bean特性
生命周期回调
spring 提供了几个标志接口,这些接口用来改变容器中bean的行为;它们包括InitializingBean 和 DisposeableBean。实现这两个接口的bean在初始化和析构时,容器会调用前者的afterPropertyiesSet() 方法,以及后者的destroy()方法。
一般不鼓励使用InitializingBean接口,因为会和spring耦合起来,不方便扩展。那现在我们可以再Bean的定义中指定一个普通的初始化方法,然后再XML配置文件中通过指定init-method属性来完成。
<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/>
public class ExampleBean {        public void init() {        // do some initialization work    }}
...效果与下面完全一样...
<bean id="exampleInitBean" class="examples.AnotherExampleBean"/>
public class AnotherExampleBean implements InitializingBean {        public void afterPropertiesSet() {        // do some initialization work    }}

析构回调
当然,初始化和析构是同样的道理,在前面我们放弃了继承spring的初始化接口,那么现在我们同样放弃析构的实现,原因和上面是一样的,因为不想跟spring 建立耦合关系,避免以后扩展时受阻。
那么,我们通过实例来说明:
<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup"/>

public class ExampleBean {    public void cleanup() {        // do some destruction work (like releasing pooled connections)    }}

...效果与下面完全一样...

<bean id="exampleInitBean" class="examples.AnotherExampleBean"/>

public class AnotherExampleBean implements DisposableBean {    public void destroy() {        // do some destruction work (like releasing pooled connections)    }}

待续...

0 0