Spring框架学习,转自http://blog.csdn.net/lishuangzhe7047/article/details/20740209

Spring框架学习(一)

1、什么是Spring框架?

  Spring是J2EE应用程序框架,是轻量级的IOC和AOP的容器框架,主要针对JavaBean的生命周期进行管理的轻量级容器,可以单独使用,也可以与Struts2,Hibernate和ibatis等框架组合使用。

2、架构概述,

1)IOC(Inversion of Control)控制反转,对象创建责任的反转,在Spring中BeanFactory是IOC容器的核心接口,负责实例化、定位,配置应用程序中的对象及建立这些对象间的依赖。XmlBeanFactory实现BeanFactory接口,通过获取XML配置文件数据,组成应用对象及应用对象间的依赖关系。

  Spring中有三种注入方式,一种是Set注入、一种是接口注入、另一种是构造方法注入。

2)AOP面向切面编程

  AOP是面向纵向的编程。例如,业务一和业务二都需要一个共同的操作,与其往每个业务中都添加同样的代码,不如写一遍代码,让两个业务共同使用这段代码。

  Spring中面向切面的编程有两种实现方式,一种是CGLIB,动态代理必须要提供接口,而CGLIB实现是有继承。

3、为什么要使用Spring框架?

  在不使用Spring框架之前,我们的Service层中要使用dao层的对象,不得不在Service中new一个新的对象。如下:

  

    //dao层对象
    public class UserDao{
       publicvoid insert(User user){}
    }  

    //service层对象
    public classUserService{
       public void insert(User user){
           UserDao userdao = new UserDao();
           userdao.insert(user);
       }
    }  

存在的问题:层与层之间的依赖

使用框架后,如下

  

    //dao层对象
    public class UserDao{
        publicvoid insert(User user){}
    }  

    //service层对象
    public classUserService{
       private UserDao userdao;  

       publicUserDao getUserdao() {
          returnuserdao;
       }
       publicvoid setUserdao(UserDao userdao) {
          this.userdao= userdao;
       }  

       publicvoid insert(User user){
          userdao.insert(user);
       }  

    }  

  Service层要用到dao层对象需要配置到XML配置文件中吗,至于对象是怎么创建的,关系是怎么组合的都交给了Spring框架去实现

4、框架优点

  轻量级的容器框架没有侵入性

  使用IOC容器更加容易组合对象间直接关系,面向接口组合,降低耦合

  AOP可以更加容易的进行功能扩展,遵循OCP开发原则

  创建对象默认是单例的,不需要再使用单例模式进行处理。

5、缺点:业务功能依赖Spring特有的功能,依赖于Spring环境

Spring框架学习(二) 依赖注入

  Spring框架为我们提供了三种注入方式,分别是set注入,构造方法注入,接口注入。接口注入不作要求,下面介绍前两种方式。

1、缺点:set注入

  采用属性的set方法进行初始化,就成为set注入。

  1)给普通字符类型赋值

  

    public class User{
       private String username;  

       public String getUsername() {
           returnusername;
       }
       public void setUsername(String username) {
          this.username= username;
       }
    }  

  我们只需要提供属性的set方法,然后去属性文件中去配置好让框架能够找到applicationContext.xml文件的bean标签。标签beans中添加bean标签。指定id,class值,id值不做要求,class值为对象所在的完整路径。bean标签再添加property标签,要求,name值与user类中对应的属性名称一致,value值就是我们要给username属性中赋的值。

  

    <bean id="userAction"class="com.lsz.spring.action.User" >
    <span style="white-space:pre">  </span><property name="username" value="admin"></property>
    </bean>

 

  2)给对象赋值

  同样提供对象的set方法

  

    public class User{
         private UserService userservice;
         public UserService getUserservice() {
              returnuser;
         }
         public void setUserservice(UserService userservice){
             this.userservice= userservice;
         }
    }  

  配置文件中要增加UserService的bean标签声明及User对象对UserService引用

  

    <!--对象的声明-->
    <bean id="userService" class="com.lsz.spring.service.UserService"></bean>  

    <bean id="userAction"class="com.lsz.spring.action.User" >
       <property name="userservice" ref="userService"></property>
    </bean>  

  这样的配置,框架就会将UserService对象注入到User类中。

  3)给list集合赋值

  同样提供set方法

  

    public class User{
        private List<String> username;
        public List<String> getUsername() {
            returnusername;
        }
        public void setUsername(List<String> username) {
            this.username= username;
        }
    }  
    <bean id="userAction"class="com.lsz.spring.action.User" >
         <propertynamepropertyname="username">
               <list>
                   <value>zhang,san</value>
                   <value>lisi</value>
                   <value>wangwu</value>
                   </list>
        </property>
    </bean>  

  4)给属性文件中的字段赋值

  

    public class User{
        private Properties props ;
        public Properties getProps() {
            returnprops;
        }
        public void setProps(Properties props) {
            this.props= props;
        }
    }  
    <bean>
        <propertynamepropertyname="props">
            <props>
               <propkeypropkey="url">jdbc:oracle:thin:@localhost:orl</prop>
               <propkeypropkey="driverName">oracle.jdbc.driver.OracleDriver</prop>
               <propkeypropkey="username">scott</prop>
               <propkeypropkey="password">tiger</prop>
            </props>
        </property>
    </bean>  

<prop>标签中的key值是.properties属性文件中的名称

2、构造方法注入

  1)构造方法一个参数

  

    public class User{
        privateString usercode;
        publicUser(String usercode) {
            this.usercode=usercode;
        }
    }  
    <bean id="userAction"class="com.lsz.spring.action.User">
        <constructor-argvalueconstructor-argvalue="admin"></constructor-arg>
    </bean>  

  2)构造方法两个参数

   当参数为非字符串类型时,在配置文件中需要制定类型,如果不指定类型一律按照字符串类型赋值。当参数类型不一致时,框架是按照字符串的类型进行查找的,因此需要在配置文件中制定参数的位置。

  

<constructor-argvalueconstructor-argvalue="admin"index="0"></constructor-arg>
<constructor-argvalueconstructor-argvalue="23" type="int"index="1"></constructor-arg>  

  这样制定,就是构造函数中,第一个参数为String类型,第二个参数为int类型。

  

Spring框架学习一的更多相关文章

  1. spring框架学习(三)junit单元测试

    spring框架学习(三)junit单元测试 单元测试不是头一次听说了,但只是听说从来没有用过.一个模块怎么测试呢,是不是得专门为一单元写一个测试程序,然后将测试单元代码拿过来测试? 我是这么想的.学 ...

  2. Spring框架学习1

    AnonymouL 兴之所至,心之所安;尽其在我,顺其自然 新随笔 管理   Spring框架学习(一)   阅读目录 一. spring概述 核心容器: Spring 上下文: Spring AOP ...

  3. spring 框架学习网站

    spring 框架学习网站 NO1 http://www.mkyong.com NO2 https://spring.io/docs/reference

  4. Spring框架学习之IOC(二)

    Spring框架学习之IOC(二) 接着上一篇的内容,下面开始IOC基于注解装配相关的内容 在 classpath 中扫描组件 <context:component-scan> 特定组件包 ...

  5. Spring框架学习之IOC(一)

    Spring框架学习之IOC(一) 先前粗浅地学过Spring框架,但当时忙于考试及后期实习未将其记录,于是趁着最近还有几天的空闲时间,将其稍微整理一下,以备后期查看. Spring相关知识 spri ...

  6. Spring框架学习笔记(5)——Spring Boot创建与使用

    Spring Boot可以更为方便地搭建一个Web系统,之后服务器上部署也较为方便 创建Spring boot项目 1. 使用IDEA创建项目 2. 修改groupid和artifact 3. 一路n ...

  7. Spring框架学习总结(上)

    目录 1.Spring的概述 2.Spring的入门(IOC) 3.Spring的工厂类 4.Spring的配置 5.Spring的属性注入 6.Spring的分模块开发的配置 @ 1.Spring的 ...

  8. Spring框架学习笔记(8)——spring boot+mybatis plus+mysql项目环境搭建

    之前写的那篇Spring框架学习笔记(5)--Spring Boot创建与使用,发现有多小细节没有提及,,正好现在又学习了mybatis plus这款框架,打算重新整理一遍,并将细节说清楚 1.通过I ...

  9. Spring框架学习笔记(1)

    Spring 框架学习笔记(1) 一.简介 Rod Johnson(spring之父) Spring是分层的Java SE/EE应用 full-stack(服务端的全栈)轻量级(跟EJB比)开源框架, ...

随机推荐

  1. iOS开发 - OC - PCH文件使用

    一. PCH文件的作用 Xcode中,PCH文件在程序编译的时候会自动包含进去.也就是说PCH中的内容是全局的,可以使用在程序的任何地方,通过这个特性,我们可以概括到PCH的作用有以下几个方面: (1 ...

  2. 因为此控件已在 web.config 中注册并且与该页位于同一个目录中

    在web.config文件配置了用户控件 <pages> <controls> <add tagPrefix="my" tagName="l ...

  3. WinForm中TreeView控件实现鼠标拖动节点(可实现同级节点位置互换,或拖到目标子节点)

    ;//1:不同级, 不为1:拖同级 private void treeView1_ItemDrag(object sender, ItemDragEventArgs e) { if (e.Button ...

  4. C语言获得文件一行

    C语言获得一行的数据还是比较麻烦的,这里讲一下几种曾经用过的方法. 第一种,是最笨的方法,就是一个一个字符的读取,也是最容易想到的方法.具体实现如下:void   read_line(char   l ...

  5. Java中的闪光点:ThreadLocal是线程Thead的局部变量,可替代同步机制的设计,值得学习和研究

    线程局部变量ThreadLocal,是Java支持的一种线程安全机制,目的是解决多线程的并发问题. 具体来讲,就是多个线程访问该实例对象的变量时,该实例对象将其存储为键值对的形式,保证各个线程(键)分 ...

  6. Bootstrap框架(基础篇)之按钮,网格,导航栏,下拉菜单

    一,按钮 注意:虽然在Bootstrap框架中使用任何标签元素都可以实现按钮风格,但个人并不建议这样使用,为了避免浏览器兼容性问题,个人强烈建议使用button或a标签来制作按钮. 框架中提供了基础按 ...

  7. JAVA 判断Socket 远程端是否断开连接

    最近在做项目的时候,遇到这样一个问题,如何判断 Socket 远程端连接是否关闭,如果关闭的话,就要重建连接Socket的类提供了一些已经封装好的方法, 如  isClosed().isConnect ...

  8. pthread 学习

    1. 创建线程 int pthread_create (pthread_t* thread, pthread_attr_t* attr, void* (*start_routine)(void*), ...

  9. 移动端WEB页面

    百度前端技术学院第一阶段任务十一,关于移动端WEB页面布局,参考资料如下(都是一些网页链接): MDN:手机网页开发 MDN:在移动浏览器中使用viewport元标签控制布局 移动前端开发和 Web ...

  10. LR12.53—第3课:重播Vuser脚本

    第3课:重播Vuser脚本 在前面的教训,你记录了一组典型的用户行为,并准备重播脚本. 重播脚本之前,您可以配置脚本的运行时设置,它定义了Vuser的行为. 注:记录与基于Web的协议的地方WebTo ...