一、Spring引言

  Spring是一款轻量级框架,代码入侵量很小,并且还是众多优秀的设计模式的组合(工厂、代理、模板、策略)。

  特点:

  1、方便解耦,简化开发

    通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

  2、AOP编程的支持

    通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。

  3、声明式事务的支持

    在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。

  4、方便程序的测试

    可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。例如:Spring对Junit4支持,可以通过注解方便的测试Spring程序。

  5、方便集成各种优秀框架

    Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。

二、着手Spring

  1、环境搭建

    a、导入核心jar包跟第三方依赖jar包。

    b、配置文件

      spring的配置文件只有一个:applicationContext.xml,放置的位置随意。

  2、初识

    a、 核心API

      ApplicationContext工厂类。

      (1)ClassPathXmlApplicationContext(非web环境下)

      (2)WebXmlApplicationContext(web环境下)

      通过以上两个接口都可以获得工厂类,该工厂类是一个重量级资源,一个应用只应该创建一个。在运用了spring的项目中,所有用户所写的类,都应该通过ApplicationContext工厂类来生产。

    b、代码示例

      applicationContext.xml配置:

<bean id="first" class="xxxxx.xxxx.First"/>

      java代码:

ApplicationContext ctx = new ClassPathXmlApplicationContext("/xxxx/applicationContext.xml");
First first = (First)ctx.getBean("first");

      解释:

        第一行通过ClassPathXmlApplicationContext读取spring配置文件获取applicationContext工厂类,参数为Spring配置文件的路径。

        第二行则是由applicationContext工厂类来生产在配置文件中配置过的对象(根据id属性获得)。

    c、web环境中的基本配置

      在web.xml做以下配置

<!--配置spring配置文件的位置-->
 <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:/applicationContext.xml</param-value>
  </context-param>
 <!--配置spring核心监听器-->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

三、IOC和DI(控制反转和依赖注入)

  控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。

  简单点来说,就是将成员变量赋值的控制权,从代码中转移到xml文件中去。这样做的好处是解耦和,其原理是工厂+反射。

  1、JDK类型成员变量的注入

    a、8中基本类型+String    

<bean id="user" class="xxxxx.User">
    <property name="name">
        <value>tom</value>
    </property>
    <property name="password">
        <value>123456</>
    </property>
    <property name="age">
        <value>20</value>
    </property>
</bean>
<propery name="password" value="123123"/>

    两种写法都可以。 

   b、数组

<property name="emails">
    <list>
        <value>tom1@live.com</value>
        <value>tom2@live.com</value>
        <value>tom3@live.com</value>
    </list>
</property>

    c、set集合

<set>
    <value>123123</value>
    <value>123123</value>
    <value>123123</value>
 </set>

//set标签内部的标签,取决于存放的数据类型,不一定是value

    d、List集合

<list>
    <value>123123</value>
    <set>
        <value>123123</value>
    <ref local=""/>
</list>

//和set同理,内部的标签取决于存的数据类型

    e、map集合

<map>
    <entry>
        <key><value>tom</value></key>
        <value>123123</value>
    </entry>
</map>

//一个entry节点代表一个键值对。

    f、properties类型,等价于Map<Stirng,String>

<props>
    <prop key="key1" >value1</prop>
    <prop key="key2" >value2</prop>
</props>

  2、用户自定义类型

    首先要在spring配置文件中创建所对应的类<bean id="" class="" />。然后再将其注入。

//java类,示例代码
public class UserService{
    private UserDao userDao;
    get、set
}
//spring配置文件

<bean id="userDao" class="xxxx.UserDao"/>

<bean id="userService" class="xxxx.UserService">
    <property name="userDao">
        <ref local="userDao">
    </property>
</bean>

    用户自定义的类型要用<ref local="">标签来注入。

  3、构造注入(不常用)

<bean id="user" class="xxxx.User" >
    <constructor-arg>
        <value>xxxx</value>
    </constructor-arg>
</bean>

 四、spring创建复杂对象

  1、利用FactoryBean创建复杂对象

    spring创建复杂对象需要用一个FactoryBean接口来实现。

    a、实现FactoryBean接口

//代码仅为示例
public class MyFactoryBean implements FactoryBean{

    //1.用于书写创建复杂对象的代码,并把创建的复杂对象作为方法的返回值。
    public Object getObject(){
        InputStream is = Resources.getResourceAsStream("");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        return sqlSessionFactory;

    //2.用于返回所创建的复杂对象的Class对象。
    public Class getObjectType(){

        return SqlSessionFactory.class();

    }

    //3.用于控制复杂对象创建的次数。
    public boolean isSingleton(){

        return true; //只会被spring工厂创建一次。
        //return false;会被创建多次.

    }
}

    b、在Spring配置文件中进行配置

<!--与普通bean配置无异-->

<bean id="sqlSessino"class="xxx.xxx.MyFactoryBean"/>

        

浅谈Spring(一)的更多相关文章

  1. 浅谈Spring中的Quartz配置

    浅谈Spring中的Quartz配置 2009-06-26 14:04 樊凯 博客园 字号:T | T Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在 ...

  2. 浅谈Spring的两种配置容器

    浅谈Spring的两种配置容器 原文:https://www.jb51.net/article/126295.htm 更新时间:2017年10月20日 08:44:41   作者:黄小鱼ZZZ     ...

  3. 1.1浅谈Spring(一个叫春的框架)

    如今各种Spring框架甚嚣尘上,但是终归还是属于spring的东西.所以在这里,个人谈一谈对spring的认识,笔者觉得掌握spring原理以及spring所涉及到的设计模式对我们具有极大的帮助.我 ...

  4. 浅谈Spring MVC知识

    关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:“MVC框架是什么?你说一说.”其实我们都知道这个问题还需要问的,只要你是一个开发人员 ...

  5. 浅谈Spring发展史

    1 码农的春天----------Spring来了 Spring官网 :http://www.springframework.org 关于Spring的发展起源要回溯到2002年,当时正是Java E ...

  6. 浅谈spring 声明式事物

    此处主要讲讲事物的属性. 事物属性包含了五个方面: 1.传播行为 2.隔离规则 3.回滚规则 4.事物超时 5.是否只读 一.传播行为 事务的第一个方面是传播行为(propagation behavi ...

  7. 浅谈spring security 403机制

    403就是access denied ,就是请求拒绝,因为权限不足 三种权限级别 一.无权限访问 <security:http security="none" pattern ...

  8. [SSH 3]以网上商城项目浅谈spring配置

    导读:在做ITOO项目的时候,就用到了容器+反射,从而运用了依赖注入和依赖查找.如果看过WCF端的配置文件,那么对于这个spring的配置就很容易理解.本篇博客,是对于自己做的一个小项目中所运用到的s ...

  9. 浅谈Spring(四)

    一.Spring+MyBatis整合 spring大大简化了Mybatis的开发步骤. 1.MyBatis的开发要点: mybatis-config.xml配置文件:配置与数据库的链接.mapper文 ...

  10. 浅谈Spring(三)

    一.基础Spring的标准测试 1.导入spring与junit继承的jar 2.引入注解 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfig ...

随机推荐

  1. PHP和JAVASCRIPT判断访客终端是电脑还是手机

    当用户使用手机等移动终端访问网站时,我们可以通过程序检测用户终端类型,如果是手机用户,则引导用户访问适配手机屏幕的移动站点.本文将介绍分别使用PHP和JAVASCRIPT代码判断用户终端类型. PHP ...

  2. 用事件与CSS改变按钮不同状态下的颜色

    目标效果: 表单的群发按钮,在鼠标悬停时为深蓝色,鼠标离开时为淡蓝色. HTML代码: <button id="submitBtn"  class="btn&quo ...

  3. iOS多态 动态绑定

    多态和动态绑定是为了解决父类调用子类的问题 首先,声明三个类aa bb cc 都继承于fist类 #import <Foundation/Foundation.h> @interface ...

  4. ios 中的构造方法(二)

    在之前有简单介绍了构造方法的结构,以及构造方法的作用,那么我们现在来讨论一下: 对象的创建分为两步:+ alloc 分配内存空间和 -init 进行初始化 那么在继承自 NSObject 的类当中,我 ...

  5. json(转)

    转自:http://www.cnblogs.com/mcgrady/archive/2013/06/08/3127781.html 阅读目录 JSON的两种结构 认识JSON字符串 在JS中如何使用J ...

  6. js——事件

    焦点:使浏览器能够区分用户输入的对象,当一个元素有焦点的时候,那么他就可以接收用户的输入. 我们可以通过一些方式给元素设置焦点 1.点击 2.tab 3.js 不是所有元素都能够接收焦点的.能够响应用 ...

  7. js——DOM操作(一)

    DOM:Document Object Model  文档对象模型 文档:html页面 文档对象:页面中元素 文档对象模型:定义  为了能够让程序(js)去操作页面中的元素 DOM会把文档看作是一棵树 ...

  8. DooDigestAuth php(后台)授权管理类 web浏览器授权

    <?php /** * DooDigestAuth class file. * * @author Leng Sheng Hong <darkredz@gmail.com> * @l ...

  9. C++ Primer 读书笔记: 第9章 顺序容器

    第9章 顺序容器 引: 顺序容器: vector 支持快速随机访问 list 支持快速插入/删除 deque 双端队列 顺序容器适配器: stack 后进先出栈 queue 先进先出队列 priori ...

  10. java.util.List org.apache.struts2.components.Form.getValidators(java.lang.String) threw an exception

    在使用ajax主题时出现上述错误的解决办法是将form表单中的action属性值改为*.action后就可以解决.至于为什么会这样不太明白.但是修改action的属性值以后就会出现另一个错误即 对应的 ...