• spring学习笔记(一)


    1、spring概述

    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。

    EE开发分成三层结构:

    * WEB层:Spring MVC.

    * 业务层:Bean管理:(IOC)

    * 持久层:Spring的JDBC模板.ORM模板用于整合其他的持久层框架.

    Expert One-to-One J2EE Design and Development             :J2EE的设计和开发:(2002.EJB)

    Expert One-to-One J2EE Development without EJB           :J2EE不使用EJB的开发.

    1.2    Spring优势:

    方便解耦,简化开发

      Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理

    AOP编程的支持

      Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能

    声明式事务的支持

      只需要通过配置就可以完成对事务的管理,而无需手动编程

    方便程序的测试

      Spring对Junit4支持,可以通过注解方便的测试Spring程序

    方便集成各种优秀框架

      Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持

    降低JavaEE API的使用难度

      Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低

    2、springIOC

    IOC:Inversion of Control 控制反转. 指的是 对象的创建权反转(交给)给Spring.

    作用是实现了程序的解耦合.

    2.1、 IOC的底层实现原理

    2.2、DI

    IOC :控制反转,将对象的创建权交给了Spring.

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

    3、spring中的工厂

    3.1、applicationContext

    ApplicatioContext接口有两个实现类:

     

    ClassPathXmlApplicationContext      :加载类路径下Spring的配置文件.

    FileSystemXmlApplicationContext     :加载本地磁盘下Spring的配置文件.

     3.2、BeanFactory

     

     3.3、BeanFactory和ApplicationContext的区别

    BeanFactory     :是在getBean的时候才会生成类的实例.

    ApplicationContext  :在加载applicationContext.xml时候就会创建.

     4、spring的相关配置

    4.1、id属性和那么属性标签的配置

    id  :Bean起个名字.   在约束中采用ID的约束:唯一. 必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号    id:不能出现特殊字符.

    <bean id=”bookAction”>

    name:Bean起个名字.   没有采用ID的约束. name:出现特殊字符.如果<bean>没有id的话 , name可以当做id使用.

    * 整合struts1的时候(历史遗留的项目中):

    <bean name=”/loginAction” >

    4.2、scope属性:Bean的作用范围

    * singleton     :默认值,单例的.

    * prototype     :多例的.

    * request       :WEB项目中,Spring创建一个Bean的对象,将对象存入到request域中.

    * session       :WEB项目中,Spring创建一个Bean的对象,将对象存入到session域中.

    * globalSession :WEB项目中,应用在Porlet环境.如果没有Porlet环境那么globalSession相当于session.

     

     4.3、Bean的生命周期的配置

    通过配置<bean>标签上的init-method作为Bean的初始化的时候执行的方法,配置destroy-method作为Bean的销毁的时候执行的方法。

    销毁方法想要执行,需要是单例创建的Bean而且在工厂关闭的时候,Bean才会被销毁.

    5、spring的Bean的管理XML方式

    5.1、Spring的Bean的属性注入:一般类型

    【构造方法的方式注入属性】

       

        <!-- 第一种:构造方法的方式 -->    

    <bean id="car" class="cn.xxxxx.spring.demo4.Car"> <constructor-arg name="name" value="保时捷"/> <constructor-arg name="price" value="1000000"/> </bean>

    【set方法的方式注入属性】

        <!-- 第二种:set方法的方式 -->
    
        <bean id="car2" class="cn.xxxxx.spring.demo4.Car2">
    
            <property name="name" value="奇瑞QQ"/>
    
            <property name="price" value="40000"/>
    
        </bean>

    5.2、Spring的Bean的属性注入:对象类型注入

        <!-- 注入对象类型的属性 -->
        <bean id="person" class="cn.xxxxx.spring.demo4.Person">
            <property name="name" value="会希"/>
            <!-- ref属性:引用另一个bean的id或name -->
            <property name="car2" ref="car2"/>
        </bean>

     5.3、名称空间p的属性注入的方式:Spring2.x版本后提供的方式.

    第一步:引入p名称空间
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:p="http://www.springframework.org/schema/p"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    第二步:使用p名称空间.
        * 普通属性:            p:属性名称=””
        * 对象类型属性:    p:属性名称-ref=””
    
    <!-- p名称空间的属性注入的方式 -->
        <bean id="car2" class="cn.xxxxx.spring.demo4.Car2" p:name="宝马7" p:price="1200000"/>
    <bean id="person" class="cn.xxxxx.spring.demo4.Person" p:name="思聪" p:car2-ref="car2"/>

     5.4、SpEL的方式的属性注入:Spring3.x版本后提供的方式

    SpEL:Spring Expression Language.
    语法:#{ SpEL }
    
        <!-- SpEL的注入的方式 -->
        <bean id="car2" class="cn.xxxxx.spring.demo4.Car2">
            <property name="name" value="#{'奔驰'}"/>
            <property name="price" value="#{800000}"/>
        </bean>
    
        <bean id="person" class="cn.xxxxx.spring.demo4.Person">
            <property name="name" value="#{'冠希'}"/>
            <property name="car2" value="#{car2}"/>
        </bean>
    
        <bean id="carInfo" class="cn.xxxxx.spring.demo4.CarInfo"></bean>
        
         引用了另一个类的属性
        <bean id="car2" class="cn.xxxxx.spring.demo4.Car2">
    <!--         <property name="name" value="#{'奔驰'}"/> -->
            <property name="name" value="#{carInfo.carName}"/>
            <property name="price" value="#{carInfo.calculatePrice()}"/>
        </bean>

    5.5、注入复杂类型:

    <!-- Spring的复杂类型的注入===================== -->
        <bean id="collectionBean" class="cn.xxxxx.spring.demo5.CollectionBean">
            <!-- 数组类型的属性 -->
            <property name="arrs">
                <list>
                    <value>会希</value>
                    <value>冠希</value>
                    <value>天一</value>
                </list>
            </property>
            
            <!-- 注入List集合的数据 -->
            <property name="list">
                <list>
                    <value>芙蓉</value>
                    <value>如花</value>
                    <value>凤姐</value>
                </list>
            </property>
            
            <!-- 注入Map集合 -->
            <property name="map">
                <map>
                    <entry key="aaa" value="111"/>
                    <entry key="bbb" value="222"/>
                    <entry key="ccc" value="333"/>
                </map>
            </property>
            
            <!-- Properties的注入 -->
            <property name="properties">
                <props>
                    <prop key="username">root</prop>
                    <prop key="password">123</prop>
                </props>
            </property>
        </bean>

     6、  Spring的分配置文件的开发

    一种:创建工厂的时候加载多个配置文件:
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml","applicationContext2.xml");
    
    二种:在一个配置文件中包含另一个配置文件:
    <import resource="applicationContext2.xml"></import>
  • 相关阅读:
    88. 合并两个有序数组
    680. 验证回文字符串 Ⅱ
    345. 反转字符串中的元音字母
    633. 平方数之和
    分支程序设计
    scanf函数(初学者)
    输入与输出(初学者)
    C语句详细(初学者)
    算术运算符和算术表达式(初学者)
    变量赋值(初学者)
  • 原文地址:https://www.cnblogs.com/arjenlee/p/9806683.html
Copyright © 2020-2023  润新知