zoukankan      html  css  js  c++  java
  • spring框架搭建(一)

    spring介绍

      spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,它主要是为了解决企业应用开发复杂性而诞生的。

      简单来说spring是一个一站式轻量级开源框架。

      IOC:Inverse Of Control 反转控制 - 将我们创建对象的方式反转

        以前对象的创建以及依赖关系是我们开发人员自己维护-->使用spring之后,对象的创建以及依赖关系可以由spring完成创建以及注入

        反转控制就是反转了对象的创建方式,从自己创建反转给了程序spring

      DI:Dependency Injection 依赖注入 - 实现IOC思想需要DI做支持

        注入方式:set、构造方法、属性字段 注入

        注入类型:值类型、引用类型(对象) 注入

    spring框架搭建

      1.导包 5.0.6.RELEASE 

        核心包:core 、 beans 、 context 、 expression 

       2.创建一个User类 

    package com.david.bean;
    
    public class User {
        private String name;
        private Integer age;
        ...
    }

      3.新建配置文件 注册对象到spring容器 applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           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">
        <!--User对象交给spring容器管理 -->
        <bean name="user" class="com.david.bean.User"></bean>
    </beans>

      4.测试

            ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
            User u = (User) ac.getBean("user");
            System.out.println(u);

    BeanFactry接口(已过时)

      spring最原始接口,针对原始结构的实现类功能较为单一。此接口实现类的容器,特点是每次获得对象时才会创建对象。

    ApplicationContext

      每次容器启动时就会创建容器中配置的所有对象,并提供更多功能。

        从类路径下加载配置文件:ClassPathXmlApplicationContext

      从硬盘绝对路径下加载配置文件:FileSystemXmlApplicationContext

    spring配置文件

        <!--bean元素:使用该元素描述需要spring容器管理的对象
                name:给被管理的对象起个名字,获得对象时根据该名称获得
                class:被管理对象的完整类名 名称可以重复,可以使用特殊字符
                id:早期使用,与name属性一模一样,名称不可重复,不能使用特殊字符/
         -->
        <bean name="user" class="com.david.bean.User"></bean>
        <!--scope元素:
                singleton(默认):单例对象 在spring容器中只会存在一个实例
                prototype:多例原型 每次在获得时才会创建并且每次都是新的对象
                request:web环境下 对象与request生命周期一致 每次请求完就会从spring中移除(了解)
                session:web环境下 对象与session生命周期一致 一次会话内有效(了解)-->
        <bean name="user" class="com.david.bean.User" scope=""></bean>

    在与struts2结合时,spring用来存aciton,scope需要声明为prototype多例模式 ,因为每次请求action 都是新的

    生命周期属性: 配置一个init-method方法作为生命周期初始化方法,spring会在对象创建后立即调用。

            配置一个destroy-method方法作为生命周期的销毁方法,spring容器在关闭并销毁所有容器中的对象之前调用。

    <bean name="user" class="com.david.bean.User" init-method="init" destroy-method="destroy"></bean>

    模块化配置

        <!--可以导入其他spring配置文件 -->
        <import resource="com/david/spring/applicationContext.xml"></import>

    创建对象的方式

        <bean name="user" class="com.david.bean.User"></bean>
        <!--创建方式2:静态工厂创建(了解)-->
        <bean name="user2" class="com.david.bean.UserFactory" factory-method="createUser"></bean>
        <!--创建方式3:实例工厂创建(了解)-->
        <bean name="user3" factory-bean="userFactory" factory-method="createUser2"></bean>
        <bean name="userFactory" class="com.david.bean.UserFactory"></bean>
            //方式1:空参构造函数
            User u = (User) ac.getBean("user");
            System.out.println(u);
    
            //方式2:静态工厂
            User u1 = (User) ac.getBean("user2");
            System.out.println(u1);
    
            //方式3:实例工厂
            User u2 = (User) ac.getBean("user3");
            System.out.println(u2);
    public class UserFactory {
        public static User createUser(){
            return new User();
        }
        public User createUser2(){
            return new User();
        }
    }

    属性注入

      1.set方法注入

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           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">
        <bean name="user" class="com.david.bean.User">
            <!--值类型注入 -->
            <property name="name" value="david"></property>
            <property name="age" value="27"></property>
    
            <!--引用类型(对象)注入 -->
            <property name="car" ref="car"></property>
        </bean>
    
        <bean name="car" class="com.david.bean.Car">
            <property name="name" value="奥拓"></property>
            <property name="color" value="Black"></property>
        </bean>
    </beans>
    package com.david.bean;
    
    public class User {
        private String name;
        private Integer age;
        private Car car;
    
        ...
    }
    package com.david.bean;
    
    public class Car {
        private String name;
        private String color;
    
        ...
    }

      2.构造函数注入

        <!--构造函数注入 -->
        <bean name="car" class="com.david.bean.Car">
            <constructor-arg name="name" value="奥拓"></constructor-arg>
            <constructor-arg name="color" value="red"></constructor-arg>
        </bean>

    还可以通过在constructor-arg元素中 添加index属性 来指定当前是第几个参数 type指定数据类型

      3.p名称空间注入(了解)

        <!--导入p名称空间 xmlns:p="http://www.springframework.org/schema/p" -->
        <bean name="user" class="com.david.bean.User" p:name="david" p:age="27" p:car-ref="car"></bean>

      4.spel注入(了解)

        <!--spel注入:spring Expression Language spring表达式语言 -->
        <bean name="user" class="com.david.bean.User">
            <property name="name" value="${user.name}"></property>
            <property name="age" value="${user.age}"></property>
            <property name="car" ref="car"></property>
        </bean>

    复杂类型注入

    package com.david.bean;
    
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;
    
    public class CollectionBean {
        private Object[] arr; //数组注入
        private List list;//list/set注入
        private Map map;//map注入
        private Properties prop; //properties注入
        ...    
    }
    <bean name="cb" class="com.david.bean.CollectionBean">
    
            <property name="arr">
                <array>
                    <value>tom</value>
                    <value>jerry</value>
                    <ref bean="user"></ref>
                </array>
            </property>
    
            <property name="list">
                <list>
                    <value>abc</value>
                    <value>efe</value>
                </list>
            </property>
    
            <property name="map">
                <map>
                    <entry key="name" value="tom"></entry>
                    <entry key="age" value="18"></entry>
                </map>
            </property>
    
            <property name="prop">
                <props>
                    <prop key="name">tom</prop>
                    <prop key="age">18</prop>
                </props>
            </property>
    
        </bean>
  • 相关阅读:
    DSP EPWM学习笔记2
    DSP EPWM学习笔记1
    DSP
    DSP bootloader学习笔记1
    Source Insight 中使用 AStyle 代码格式工具
    DSP基础学习-ADC同步采样
    DSP算法学习-过采样技术
    救救一个只会用万能头的孩子!
    传参(转)
    return
  • 原文地址:https://www.cnblogs.com/baidawei/p/9072687.html
Copyright © 2011-2022 走看看