Spring-01

作者: 50ef8076d671 | 来源:发表于2017-07-14 22:24 被阅读0次

    Spring是一个开源框架 并且是轻量级别的框架(模块化)

    Spring 是一个IoC 和 AOP 的容器框架

    MyBatis ORM框架 持久层框架
    SpringMVC是隶属Spring框架中的一个WEB层框架
    Spring是一个容器框架
    IoC: 控制反转
    AO && OOP: 面向切面编程 && 面向对象编程:
    OOP针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分
    AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。
    整体包目录如下:
    image
    创建核心配置文件
    <?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-4.3.xsd">
        <!-- Spring是一个IoC的容器框架 -->
        <!-- IoC控制反转:将权力移交出去   对类进行实例化  替我们服务 -->
        <!-- 容器:主要是来管理Bean的生命周期(创建   使用   销毁) -->
        <!-- 使用Bean标签 -->
        <!-- 
              <bean id="User" class="com.test.model.User"></bean>
                                            等同于
              User u1 = new User();
              
                            当本xml文件被加载    所有的Bean标签所指代的Bean 都会被进行实例化
         -->
        <bean id="User" class="com.test.model.User" scope="singleton">
            <!-- scope="singleton"   单例模式 (默认值)-->
            <!-- scope="prototype"   多例模式                 -->     
            <property name="name" value="bajie"/> 
            <property name="sex" value="男"/>
            <property name="hobby_array">
               <array>
                    <value>篮球</value>
                    <value>足球</value>
               </array>
            </property>  
              <property name="hobby_list">
               <list>
                    <value>篮球</value>
                    <value>足球</value>
                    <value>篮球</value>
                    <value>足球</value>
               </list>
            </property>
              <property name="set">
               <set>
                    <value>篮球</value>
                    <value>足球</value>
                    <value>篮球</value>
                    <value>足球</value>
                    <value>篮球</value>
                    <value>足球</value>
               </set>
            </property>
            
            <property name="map">
                <map>
                    <entry key="hobbysmap" value="MAP" />
                    <entry key="hobbys">
                         <list>
                            <value>篮球</value>
                            <value>足球</value>
                            <value>篮球</value>
                            <value>足球</value>
                       </list>
                    </entry>
                </map>
            </property>
            <property name="properties">
                <props>
                    <prop key=""></prop>
                </props>
            </property>
        </bean>
    
    </beans>
    

    加载核心配置文件 并获取对象

    ApplicationContext接口
    @Test
    public void DuQuConfig(){
        //接口 xx = new 类路径+接口(“xml配置文件位置”)
        ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
        //获取对象  ac.getBean("User")此处User指向xml文件中的Bean的id
        //返回到Object类型  所以进行强制转换
        //User user1 = (User) ac.getBean("User");
        //或者 
        //第一个参数依然指向id   后一个参数指向类路径   即可返回想要的类型
        User user1= ac.getBean("User",User.class);
        System.out.println(user1);
    }
    

    当进行加载的时候 默认只会实例化一个对象 即如下图:
    ![image](http://upload-images.jianshu.io
    ![Uploading 01_414987.png . . .]
    /upload_images/6903669-a8989b453e904f88?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    查看帮助文档:

     Attribute : scope
    
    The scope of this bean: typically "singleton" [ 单例模式  只实例化一次 ] 
    
    (one shared instance, which will be returned by all calls to getBean with the given id), or "prototype"  [  多例模式  ]   
    
    (independent instance resulting from each call to getBean).   [  每一次调用都会独立进行实例化  ]  
    
     By default, a bean will be a singleton, unless the bean has a parent bean definition in which case it will 
    
     inherit the parent's scope. Singletons are most commonly used, and are ideal for multi-threaded 
    
     service objects. Further scopes, such as "request" or "session", might be supported by extended bean 
    
     factories (e.g. in a web environment). Inner bean definitions inherit the scope of their containing bean 
    
    definition, unless explicitly specified: The inner bean will be a singleton if the containing bean is a 
    
    singleton, and a prototype if the containing bean is a prototype, etc.
     Data Type : string
    
    
    
    
    
    
     在进行配置的时候   scope属性的默认值就是  singleton 单例模式   
    
    可进行重新配置   scope = "prototype"
    
    IoC 控制反转 ---- DI 依赖注入(注入的是值)
    方式一:使用setter注入方式 注意在Bean里面必须有Set()方法

    在xml文件内进行配置的时候
    <property name="xxxx">
    这里的name可以进行补全 实际上是框架自动映射了Bean里面的Set()方法的首字母小写

    [在这里只介绍java的内置类型的注入]
    <bean id="User" class="com.test.model.User" scope="singleton">
            <property name="name">
            //此处只能注入 字符串 整型等 简单的数据类型  
            //<value>标签里的内容两端不能存在空格 spring是识别空格的
            //因此等号两边不允许有空格  属性和属性之间通过空格进行分隔
                <value>bajie</value>
            </property>  
            //存在一种简写方式  如下
             <property name="name" value="bajie"/> 
    </bean>
    
    除却简单数据类型   下面代码演示注入Array  List  Set  Map类型的数据
    
    Bean里的属性如下所示:
    
    private String name;
    private String sex;
    private String [] hobby_array;
    private List<String> hobby_list;
    private Set<String> set;
    private Map<String,Object> Map;
    private Properties Properties;
    

    xml文件内的配置如下所示:

    <property name="hobby_array">
           <array>
                <value>篮球</value>
                <value>足球</value>
           </array>
        </property>  
        
          <property name="hobby_list">
           <list>
                <value>篮球</value>
                <value>足球</value>
                <value>篮球</value>
                <value>足球</value>
           </list>
        </property>
        
          <property name="set">
           <set>
           //set类型依然会有去重的功能
                <value>篮球</value>
                <value>足球</value>
                <value>篮球</value>
                <value>足球</value>
                <value>篮球</value>
                <value>足球</value>
           </set>
        </property>
        
        <property name="map">
            <map>
                <entry key="vip" value="会员" />
                //或者如下写法  指定key后 value为List类型
                <entry key="hobbys">
                     <list>
                        <value>篮球</value>
                        <value>足球</value>
                        <value>篮球</value>
                        <value>足球</value>
                   </list>
                </entry>
            </map>
        </property>
        
        //跟map对应的 存在一个properties  这个是HashTable的实现类  HashTable又是对Map类的实现
        //所以properties也是Map的一种
        
        <property name="properties">
            <props>
            //此时value内只能存在String类型的值
                <prop key="vip">String</prop>
            </props>
        </property>

    相关文章

      网友评论

          本文标题:Spring-01

          本文链接:https://www.haomeiwen.com/subject/ggoohxtx.html