zoukankan      html  css  js  c++  java
  • Spring框架(一)

    Spring概述

    Spring是一个分层的 JavaSE/JavaEE 一站式(full-stack)轻量级开源框架。

    Spring兴起于2003,前身来源于EJB架构,作者Rod Johnson

    Spring的优势

    • 方便解耦,简化开发

    • AOP编程的支持

    • 声明式事务的支持 编码式事务 转账 transfer方法手动植入进入 销户 DeleteAccount 事务支持

      提前在Spring的主配置文件/注解中applicationContext.xml去配置transfer deleteAccount

    • 方便程序的测试 Spring集成Junit

    • 方便集成各种优秀的框架 Jfinal、Mybatis Struts2 Hibernate...

    • 框架中的源码是需要借助学习的,经典的设计思想。设计模式....优秀的案例.....

    Spring Framework的体系架构

    spring体系

    schema讲解

     <beans  xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:context="http://www.springframework.org/schema/context"
             xsi:schemaLocation="http://www.springframework.org/schema/beans"   
                                "http://www.springframework.org/schema/beans/spring-beans.xsd"
            "http://www.springframework.org/schema/context
             http://www.springframework.org/schema/context/spring-context.xsd"
            ">

    配置约束的目的是为了在xml文件中进行配置的时候,能够按照提前约定好的约束进行标签的检验。

     

    xml ns--->namespace 命名空间

     

    一般配置一个xml文件最多只能有一个匿名的命名空间

    对于Spring框架来说,它把匿名的命名空间给beans使用了 。如果需要配置的话,xmlns:aa

    那么当使用beans中的标签的时候,需要在aa:bean

    因为我们要使用bean的约束,xml整体的约束采用schema约束,所以我们配置schema约束地址,

    schemaLocation 约束方式采用key-value键值对的方式,

    schemaLocation 约束依赖于http://www.w3.org/2001/XMLSchema-instance

    所以xml配置首先http://www.w3.org/2001/XMLSchema-instance给他起了个别名 别名的名字叫xsi

    IOC控制反转

      Inversion Of Control  控制反转,将对象的创建权交给了Spring,提前在Spring容器把该对象信息构建好,我们可以通过Spring容器调用getBean("name属性或者id属性")获取到对应的对象。
    • ApplicationContext,使用它需要借助于它的实现类ClassPathXmlApplicationContext,默认会在创建的时候,将内部配置的所有对象全部加载到Spring容器中

    • ClassPathXmlApplicationContext,将来我们可以从classpath的目录下加载到Spring主配置文件。

    bean元素的配置和创建

    凡是交给Spring容器管理的对象,都可以通过bean元素进行配置。

    Spring的本质就是对象管理容器】 

    name属性和class属性

    • name属性:作用就是给创建的对象起一个名字,将来在应用中通估这个名字获取到这个对象

    • class属性:创建该对象映射的那个类 反射机制 类名 = 包名+类名

    • id属性: id属性和name属性的作用是一样的,name属性的名称值可以重复,但是id值不允许重复,唯一

      id属性值不能含有特殊字符,但是在使用中,一般把name属性值在容器的设置也是唯一的。

    bean元素的创建

    bean元素的创建默认采用空参构造方法创建对象。如果没有空参构造,那么一般就会报错。

    • 空参构造方法创建

    <bean id="user" class="com.zhiyou100.pojo.User"></bean>
    • 静态工厂方式创建

    <bean id="userStatic" class="com.zhiyou100.pojo.BeanFactory" factory-method="getStaticBean"></bean>
    • 实例工厂方式创建

    <bean name = "UserBeanFactory" class="com.zhiyou100.pojo.BeanFactory"></bean>
    <bean name = "userFactory" factory-bean="UserBeanFactory" factory-method="getUser"></bean>

    scope属性

    scope 范围 指的设置bean元素创建对象的方式

    • singleton: 单例模式,当前的对象在容器中只会创建一次,容器只会保存该类的一个对象 默认采用的是单例模式

      Spring认为一个bean就应该有且仅有一个对象

    • prototype :多例模式,当前对象在容器中每次调用getBean返回的都是新对象。

      在Structs2容器中,采用的是多例模式。每一个action都要配置成prototype

    • request 请求域中

    • session 会话 在服务器中

    • globalSession 全局的,跨session存储的

    bean元素的生命周期

     生命周期 : 从生到死。从创建到消亡
    • init-method:初始化方法 初始化bean对象

      init-method bean对应的空参构造方法

    • destroy-method:销毁方法 当对象销毁的时候,会执行该方法。

      • 第一种情况,就是这个对象长期不用,GC就认为它是一个垃圾,GC就会清除掉

      • 第二种情况,当这个容器销毁/关闭的时候,存储在该容器中的bean对象也会销毁。

    • bean元素默认是交给Spring管理的。但是如果你把该bean元素的scope属性设置为多例模式,那么Spring只管生,不管死。在单例模式下,Spring管理bean元素的整个生命周期。

    依赖注入DI

     DI   Dependency Injection     依赖注入 ,有IOC环境的支持,Spring创建这个类的过程中,Spring将类的依赖的属性设置进去。

    注入方式

    如果是基本类型(String),则使用value,如果是引用类型使用ref

    • set方法注入

        该对象对应的类中必须有set方法,否则无法正常注入。

    <bean id="user" class="com.lk.pojo.User">
            <property name="id" value="1"/>
            <property name="username" value="若思"/>
            <property name="gender" value="false"/>
            <property name="birthday" ref="date"/>
            <property name="role" ref="role"/>
    </bean>
    <bean id="date" class="java.util.Date"/>
    • 构造方法注入

    <bean id="user3" class="com.lk.pojo.User">
            <constructor-arg name="id" value="3" type="java.lang.Integer" index="0"/>
            <constructor-arg name="username" value="若楠" type="java.lang.String" index="1"/>
            <constructor-arg name="gender" value="false" type="java.lang.Boolean" index="2"/>
            <constructor-arg name="birthday" ref="date" type="java.util.Date" index="3"/>
            <constructor-arg name="role" ref="role" type="com.lk.pojo.Role" index="4"/>
    </bean>

     

    • p名称空间注入

    <bean id="user2" class="com.lk.pojo.User" p:id = "2"
        p:birthday-ref="date" p:username="若涵" p:gender="false"/>
    • Spel 表达式注入

    <bean name="user4" class="com.lk.pojo.User">
            <property name="id" value="#{role.id == 1 ? 4 : 5}" />
            <property name="username" value="#{user.username.equals('阿南') ? '安安' : '囡囡'}"/>
            ......
    </bean>
    • 复杂类型注入【数组集合 List Set Map】

  • 相关阅读:
    死锁
    Notepad++源代码阅读——窗口封装与继承
    Notepad++源代码阅读——窗口元素组织与布局
    选择问题(selection problem)
    插入排序 | 冒泡排序 | 希尔排序 | 堆排序 | 快速排序 | 选择排序 | 归并排序
    编程之美2014---大神与三位小伙伴
    ulimit 修改 open files & core
    tmux手记
    匿名访问windows server 2008 R2 文件服务器的共享
    WINDOWS系统变量
  • 原文地址:https://www.cnblogs.com/lk625/p/14477324.html
Copyright © 2011-2022 走看看