Spring学习笔记(网易博客整理版本)

来源:互联网 发布:注会考试网络培训哪好 编辑:程序博客网 时间:2024/05/22 15:27

框架概述:

 一、Spring框架的历史

两本书籍:

《Expert One-On-One J2EE Design and Development》

《Expert One on one J2EE Development Without EJB》


二、Spring框架是什么

框架的七个模块:

Spring学习笔记1:框架概述 - conanswp - Programing my life!

 
    三、Spring框架给我们带来了什么

1)         IOC(控制反转)和DI(依赖注入);

2)         灵活可供选择;

3)         Spring Web MVC框架;

4)         提供测试驱动开发模式;

5)         灵活的事物支持,通过AOP支持;

6)         消除各式各样的配置文件;


四、简单实例

         详见HelloSping工程;

         通过ClasspathxmlContext获取Beanfactory,然后通过Beanfactory的getBean方法获取对象实例,进而调用实例的方法。        


五、IOC和DI

1.       DI(依赖注入):

                  依赖关系:A->B说明A依赖于B,B的变化会给A带来改变;

                  new 建立依赖关系是在编程时期建立的,而Spring是在运行时期动态建立的;

                   DI的方式:

A.        Setter(设值注入):

<bean id="dbhellosetter" class="DISetter.DBHello">

                   <property name="dao">

                            <ref local="dictionaryDAO"/>

                   </property>

         </bean>

B.        Constructor(构造器注入):

<bean id="dbhelloconstructor" class="DISetter.DIConstructor">

                   <constructor-arg>

                            <ref local="dictionaryDAO"/>

                   </constructor-arg>

         </bean>

                   其中的<ref local=”dictionaryDAO”>表示在配置文件中查找;

<bean id="dictionaryDAO" class="DISetter.DictionaryDAOImpl"></bean>

2.       IOC(控制反转):

由容器决定对象的创建;

符合“好莱坞原则”:Don’t call me, I’ll call you!

DI是IOC的特例。


spring中的bean

 一、            JavaBean在Spring中的重要作用 

Spring中的一切组件都是有JavaBean构成的,Bean之间通过依赖注入确定关系。在Spring中JavaBean无处不在,主要分为系统提供Bean和自己写的Bean。Spring通过所谓的“容器”来管理Bean,我们可以将这个容器理解为注册表。BeanFactory通过容器(注册表)实例化Bean,并在内存中建立Bean的依赖关系网。

BeanFactory中最重要的方法:

       BeanFactory fac=new ClassPathXmlApplicationContext("applicationContext.xml");

       hello=(Hello)fac.getBean("hellotest");

hellotest为applicationContext.xml中的Bean的id。

<bean id="hellotest" class="IOCandDItest.EnglishHello"></bean>

Bean中常用配置项目:

A.        Bean的id:配置Bean的id属性在程序中使用;

B.        Bean的class:配置要创建的Bean的类型;

C.        Bean的init-method:制定Bean初试化方法。Bean实例化后调用该方法;

D.        Bean的destory-method:制定Bean的销毁方法。Bean被销毁后调用该方法。用于释放资源的处理;

E.         Bean的scope:代表Bean的声明周期;有四个:singleton、prototype、request、session和global session。后三个是Web系统中的相关配置。


二、            ApplicationContext

ApplicationContext是BeanFactory接口的一个重要的子接口。它能与Spring更紧密的结合,提供国际化支持、事件化支持等。

Spring提供的几个方法配置ApplicationContext对象:

A.        WebApplicationContext:通过Web服务器创建ApplicationContext;

B.        ClassPathXMLApplicationContext:配置一个XML ApplicationContext,文件放到类路径(src目录文件)下面;

C.        FileSystemXmlApplicationContext:配置XML ApplicationContext,文件放到文件系统路径(工程目录)下面;


三、            WebApplicationContext

WebApplicationContext是基于Web的ApplicationContext对象,通过Web服务器加载。在Web服务器启动时实例化xml的配置文件,然后在内存中建立起Bean的依赖关系。

                   对于不同的Servlet容器,加载的方法有两种:

A.        ContextLoaderListener:Servlet2.3后期版本;

在Web.xml中配置:

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/daoContext.xml /WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

B.        ContextLoaderServlet:Servlet2.3以前早起版本;

在Web.xml中配置:

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/daoContext.xml /WEB-INF/applicationContext.xml</param-value>
</context-param>

 

<servlet>
  <servlet-name>context</servlet-name>
  <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

监听器首先检查contextConfigLocation参数,如果它不存在,它将使用/WEB-INF/applicationContext.xml作为默认值。如果已存在,它将使用分隔符(逗号、冒号或空格)将字符串分解成应用上下文位置路径。ContextLoaderServlet同ContextLoaderListener一样使用'contextConfigLocation'参数。


spring 与松散耦合的软件系统

 一、            J2EE的分层设计

J2EE的分层设计一般分为四层:表示层、服务层、数据持久层、企业信息系统层;设计原则:高内聚,低耦合。下层为上层提供服务,上层依赖于下层。

企业信息系统层:系统的数据来源层,可以是数据库、数据文件等。

数据持久层:用于访问数据库,采用DAO设计模式。例如Hibernate等框架。

服务层:接受表示层请求,调用服务并进行数据池就成的操作。例如EJB或者JavaBean等。

表示层(Web层):用户与系统交互;用户提交请求,系统接受请求并提交处理。例如Struts等。


二、            紧耦合

危害:牵一发而动全身。

导致紧耦合的原因:

A.        系统没有分层;

B.        层之间没有借口;

C.        层之间采用传统的new方式;


三、            Spring的优势

1.      使用Spring的IOC容器,将对象之间的依赖关系交给Spring,降低组件之间的耦合性,让我们更专注于应用逻辑

2.      可以提供众多服务,事务管理,WS等。

3.      AOP的很好支持,方便面向切面编程。

4.      对主流的框架提供了很好的集成支持,如Hibernate,Struts2,JPA等

5.      Spring DI机制降低了业务对象替换的复杂性。

6.      Spring属于低侵入,代码污染极低。

7.      Spring的高度可开放性,并不强制依赖于Spring,开发者可以自由选择Spring部分或全部




0 0