`
nnwq
  • 浏览: 203596 次
社区版块
存档分类
最新评论

Spring经典总结<1>

阅读更多

1.Spring作用和优点

    a.Spring框架是解决方案级的框架或者说整合框架,是各种组件、技术

     的使用平台,可以在这个平台上使用Struts,Hibernate,JDBC技术并且可

     以可以实现各种开发技术的组合。Spring提供了IoC和AOP机制的实

     现,可以改善程序结构,提高系统的灵活性,便于维护和扩展。

 Spring主要作用:让组件之间实现低耦合(方便解耦),让程序结构更  

                  加灵活,方便日后的维护和扩展 

                 低耦合:组件与组件之间的关联度较低

Spring相当于主机中的主板,而struts、Hibernate、jsp相当于主板上

的cpu、内存、显卡之类的组件(主板特点:可插拔 ) 

       b.在SSH使用中,Spring提供了一个容器,该容器具有IOC和AOP机

         制,利用这个容器IOC机制管理程序中的DAO,Service等组件,采用

         AOP机制实现事务,异常日志记录等共通处理。

2.Spring容器简介

   1)Spring容器是Spring框架的基础和核心。该容器具有以下功能:

    a.可以创建和初始化一个Bean组件对象

      在spring里,任何java对象和java组件都被当成bean处理。

    b.可以管理Bean对象的生命期

    c.可以利用IoC机制建立Bean对象之间的关系

    d.可以利用扩展的AOP机制将共通组件和某一批目标组件对象建立关联。

      (需要引入AOP扩展jar包)

 

    2)Spring容器类型可以使BeanFactory或者ApplicationContext.

     --Spring容器实例化

      ApplicationContext ac =new ClasspathXmlApplicationContext(xml配置);

     --从Spring容器获取Bean对象

      接口类型 变量 =  (接口类型)ac.getBean("id属性");

     --销毁Spring容器

       使用AbstractApplicationContext类型的close();

       一般情况下,销毁容器对象由Spring管理完成,无需手动销毁。如果要

       手动销毁需要使用AbstractApplicationContext容器,调用

       AbstractApplicationContext容器的close()方法。

   3)Spring容器的使用方法

      --引入spring核心包

     --在src下添加spring配置文件

     --在spring配置文件定义Bean组件

    <bean id="标识符" class="包名.实现类名">

    </bean>

eg:

applicationContext.xml:

 <!-- 定义Bean组件 -->

<bean id="costDao" class="com.tarena.dao.JdbcCostDAO"></bean>

     --实例化spring容器,通过容器的getBean("标识符")方法获取

 

       eg:

public static void main(String[] args) {

// CostDAO costDao = new JdbcCostDAO();

// costDao.save();

// costDao.update();

// 获取Spring容器中的CostDAO

// 第一步实例化Spring容器

String conf = "applicationContext.xml";

// 用于加载src下的xml配置文件

AbstractApplicationContext ac = new 

          ClassPathXmlApplicationContext(conf);

// AbstractApplicationContext ac = new 

         FileSystemXmlApplicationContext 用于加载磁盘路径的xml配置

// 获取容器中的DAO

CostDAO costDao = (CostDAO) ac.getBean("costDao");

costDao.save();

costDao.update();

// ac.close();//销毁Spring容器

}

3.Spring容器对Bean组件的管理

 *1)创建Bean对象的方式

     Spring可以采用单例模式非单例模式创建Bean对象。

     默认情况下,采用单例模式创建Bean对象。

     在<bean scope="">中利用scope属性控制创建模式。

     scope="singleton"采用单例模式,

     scope="prototype"采用原型(非单例)模式

     (在JavaWeb环境中,scope属性值还可以指定request,session等范围)

 如果scope="singleton",Spring容器实例化时,会自动创建Bean组件

     对象。

     如果scope="prototype",Spring容器会在调用getBean方法时创建Bean

     对象。

scope属性的取值介绍:

在web(仅限于web项目)环境中,还可以设置所创建的bean对象的生命周期和request、session。

a.request 表示bean对象生命周期和request生命周期相同

b.session 表示bean对象生命周期和session生命周期相同

c.global session 相当于application

d.singleton 单例模式

e.prototype 原型模式

   2)Bean对象的创建时机

     默认是随着容器创建,可以使用lazy-init=true设置(在调用getBean()创建)

     延迟创建

   3)Bean对象的初始化和销毁

     使用<bean init-method="" destroy-method="">

     可以指定Bean对象创建和销毁时触发的方法。

     destroy-method只适用于scope="singleton"模式.

    当调用applicationcontext.close()时,容器会自动销毁所有单例对象,此时会  

    触发指定destory-method方法。

     init-method指定的初始化方法可以在构造方法执行后自动执行。

 4.如何使用Spring容器的IoC机制

  Spring提供的IoC主要是用于建立两个对象(组件、Bean)之间的关系,

  好处是低耦合方式。Spring经典总结

   1)DI(依赖注入技术)

     Dependency Injection 称为依赖注入。意思是采用注入技术建立两个组件

     的依赖关系。

      Spring通过DI技术实现了IoC思想。DI技术可以分成以下几类:

      --setter方式注入(依靠属性的set方法注入)

<property....></property>对应的注入方式只能是setter注入

 applicationContext.xml配置:

<!-- 定义Bean组件 -->

<bean id="costDao" scope="singleton" init-method="myinit"

destroy-method="mydestroy" class="com.tarena.dao.JdbcCostDAO">

</bean>

<bean id="hibernateCostDao" 

     class="com.tarena.dao.HibernateCostDAO">

</bean>

<!-- setter方式注入示例 -->

<bean id="costAction" scope="prototype" 

      class="com.tarena.action.CostAction">

<!-- 将ref指定的id属性Bean对象给costDao属性注入 -->

<property name="costDao" ref="hibernateCostDao"></property>

</bean>

其中,name=”costDao”中的costDao为要注入的属性,即public void 

setCostDao ....方法中的setCostDao()方法名中的除”set”之后的部分

  /** setter方式注入示例*/

public class CostAction {

private CostDAO costDao1;

// spring自动调用该方法,注入一个CostDAO对象

public void setCostDao(CostDAO costDao) {

this.costDao1 = costDao;

}

public String add() {

System.out.println("执行资费添加操作");

costDao1.save();

return "success";

}

}

      --构造方式注入(依靠构造方法注入)

  applicationContext.xml配置:

<!-- 定义Bean组件 -->

<bean id="costDao" scope="singleton" init-method="myinit"

destroy-method="mydestroy" class="com.tarena.dao.JdbcCostDAO">

</bean>

   <bean id="hibernateCostDao" 

  class="com.tarena.dao.HibernateCostDAO">

</bean>

<!-- 构造方式注入示例 -->

<bean id="costAction1" scope="prototype" 

     class="com.tarena.action.CostAction1">

<!-- 构造方式注入 -->

<!-- “0”为构造参数索引:构造参数索引;"costDao"为要注入的Bean对象的id -->

<constructor-arg index="0" ref="costDao">

</constructor-arg>

   </bean>

其中,<constructor-arg index="构造参数索引"

            ref="要注入的Bean对象的id">

      </constructor-arg>

 Spring经典总结

/**构造方式注入示例*/

public class CostAction1 {

private CostDAO costDao1;

// spring自动调用该方法,注入一个CostDAO对象

public CostAction1(CostDAO costDao) {

this.costDao1 = costDao;

}

public String add() {

System.out.println("执行资费添加操作");

costDao1.save();

return "success";

}

         }

      --接口方式注入(了解名称,可以参考spring文档)

   2)IoC思想

      Inverse of Controller 称为反向控制或控制反转,确切讲被称为控制转移,

      意思就是转交控制权。

     所谓控制及控制权:指的是负责对象的创建、初始化以及销毁等工作。

     两个组件,当A调用B时,原有方式需要在A里面编写控制权逻辑代码,

     当需要替换B组件时,需要修改控制权逻辑,因此A和B组件的耦合度比

     较高。

     采用IoC思想后,就是将A中的控制权逻辑转移给第三方容器或框架,有

     第三方框架负责A,B对象的创建,释放,初始化和关系指定等工作。

 

    *3)Action--->DAO采用Spring的IoC方式

       --在Action中定义一个DAO接口类型的变量

       --在Action中定义一个setter方法,主要作用是接收spring注入进

         来DAO对象。

       --将Action和DAO都交给Spring容器,Action配置如下:

        <bean id="action标识符" class="action实现类">

            <!--setter方式注入配置-->

            <property name="属性名" 

               ref="dao定义时的Bean组件Id值">

            </property>

        </bean>

        参见上例“setter方式注入”

     4)采用构造方式注入重构3示例

          --定义带参数构造方法替代setter方法

          --定义Action的<bean>时,采用

        <constructor-arg>替代<property>配置

       <constructor-arg index="构造参数索引"

           ref="要注入的Bean对象的id">

       </constructor-arg>

参见上例“构造方式注入”

6
3
分享到:
评论
1 楼 lijingshou 2013-11-25  
抄的也不注明一下出处,无语啊

相关推荐

    java文集

    &lt;br&gt;ext学习笔记一&lt;br&gt;小试iBatis&lt;br&gt;RIA(Rich Internet Application)的现状和未来&lt;br&gt;Java应用中域名解析不过期的解决方法&lt;br&gt;Java编程那些事儿45—数组使用示例1&lt;br&gt;一步步熟悉OFBiz&lt;br&gt;用Java做客户端调用.NET写...

    Spring + Hibernate + Struts 事务配置小例子(带提示框等小技巧)

    &lt;value&gt;WEB-INF/jdbc.properties&lt;/value&gt; &lt;/list&gt; &lt;/property&gt; &lt;/bean&gt; &lt;bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" dependency-check="none...

    DWR中文文档.pdf

    34&lt;br/&gt;4.2.4 使用Spring配置DWR 35&lt;br/&gt;4.3 DWR与JSF 36&lt;br/&gt;4.3.1 JSF Creator 36&lt;br/&gt;4.3.2 Servlet Filter 36&lt;br/&gt;4.4 DWR与Struts 37&lt;br/&gt;4.4.1 Struts creator 37&lt;br/&gt;4.4.2 开始顺序 37&lt;br/&gt;4.5 DWR与...

    輕量級 J2EE 企業應用實戰:Struts+Spring+Hibernate整合開發.part1

    本书所介绍的内容是作者多年J2EE 开发经验的总结,内容涉及Struts 、Hibernate 和Spring 三个开源&lt;br&gt;框架,还介绍了Tomcat 和Jetty 两个开源Web 服务器的详细用法,以及J2EE 应用的几种常用架构。&lt;br&gt;本书不仅是一...

    spring security 参考手册中文版

    Spring Security 参考 1 第一部分前言 15 1.入门 16 2.介绍 17 2.1什么是Spring Security? 17 2.2历史 19 2.3版本编号 20 2.4获得Spring安全 21 2.4.1使用Maven 21 Maven仓库 21 Spring框架 22 2.4.2 Gradle 23 ...

    网上书店(登陆注册,最近浏览,购物车,商品列表,商品详情)基于SSM框架开发+源代码+文档说明

    Dependence Injection:spring&lt;br&gt; ORM:mybatis&lt;br&gt; 数据库:mysql 首页地址 http://localhost:8080/index.do 后台管理地址 http://localhost:8080/backLoginPage.do ## 项目备注 1、该资源内项目代码都经过...

    freemarker总结

    ${x_index + 1}.${x}&lt;#if x_has_next&gt;,&lt;/if&gt; &lt;#if x="星期四"&gt;&lt;#break&gt;&lt;/#if&gt; &lt;/#list&gt; &lt;p&gt;We have these animals: &lt;table border=1&gt; &lt;tr&gt;&lt;th&gt;Name&lt;th&gt;Price &lt;#list animals as being&gt; &lt;tr&gt;&lt;td&gt;${...

    轻量级J2EE企业应用实战:Struts+Spring+Hibernate 整合开发.part1

    &lt;br&gt; 本书不仅仅是一本J2EE入门图书,还详尽而细致地介绍了JSP各个方面,包括JSP 2.0的规范、Struts的各种用法、Hibernate的详细用法,以及Spring的基本用法。书中所介绍的轻量级J2EE应用,是目前最流行、最规范的...

    Spring总结(四)

    Spring个人总结,基于Annotation注解的方式开发,配置

    springmybatis

    1.Configuration.xml 是 mybatis 用来建立 sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 &lt;typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/&gt; 这个别名...

    ssh(structs,spring,hibernate)框架中的上传下载

    1. <beans> 2. <!-- 数据源的配置 //--> 3. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 4. destroy-method="close"> 5. <property name="driverClassName" value="oracle.jdbc....

    modelAttribute详解

    对于自己的理解有误区的地方进行了纠正,现进行总结如下:&lt;br&gt; @ModelAttribute主要有如下两个功能:&lt;br&gt; 1绑定请求参数到实体对象(表单的命令对象):一是将请求参数的输入封装到POJO对象中;二是创建具体实例,以...

    Spring Security 中文教程.pdf

    2.4.1. &lt;global-method-security&gt; 元素 2.4.1.1. 使用protect-pointcut 添加安全切点 2.5. 默认的AccessDecisionManager 2.5.1. 自定义AccessDecisionManager 2.6. 验证管理器和命名空间 3. 示例程序 ...

    Spring MVC 学习记录总结1

    Spring MVC 学习记录总结Spring MVC 是目前主流的实现MVC设计模式的框架,是Spring 框架的一个分支产品,以 Spring IoC 容器

    spring总结1可以查看

    spring总结1可以查看

    Spring Security-3.0.1中文官方文档(翻译版)

    2.4.1. &lt;global-method-security&gt; 元素 2.4.1.1. 使用protect-pointcut 添加安全切点 2.5. 默认的AccessDecisionManager 2.5.1. 自定义AccessDecisionManager 2.6. 验证管理器和命名空间 3. 示例程序 ...

    SpringCloud总结PDF1

    1. Everything is jar, Everything is hMp 3. Spring boot Actuator 监控 4. Spring clo

    整合struts2和spring源代码(可以直接在tomcat中运行)

    &lt;constant name="struts.objectFactory" value="spring" /&gt; 注意:如果有了struts2-spring-plugin-2.3.8.jar文件可以不用配置(本源代码中是没有配置的) 3.配置spring的监听器: 在web.xml中添加 &lt;listener&gt; ...

    Spring Security 学习总结1_3

    NULL 博文链接:https://fengshen-xia.iteye.com/blog/293799

    SpringCloud视频教程全套百度网盘

    第1章 SpringCloud简介 第2章 SpringCache缓存详细讲解及应用 第3章 Redis高级缓存讲解及应用 第4章 SpringSecurity安全详细讲解及应用 第5章 RabbitMQ高级消息的讲解及应用 第6章 ElasticSearch详细讲解及应用 第7...

Global site tag (gtag.js) - Google Analytics