zoukankan      html  css  js  c++  java
  • Spring框架(第二天)

    一、 注入

    a)  set

      i. JDK

        1.八种基本类型(+包装类)+String

          

    <bean id="User" class="com.dsl.test2.User">
        <property name="age">
            <value>18</value>
        </property>
        <property name="name">
            <value>dsl</value>
        </property>
    </bean>

        2.数组

          

    <list>
        <value>1111</value>
        <value>2222</value>
        <value>3333</value>
    </list>

        3.List

    <list>
        <value>1111</value>
        <value>2222</value>
        <value>3333</value>
    </list>
    

      

        4.Set

    <set>
        <value>aaa</value>
        <value>bbb</value>
        <value>ccc</value>
    </set>

        5.Map

    <map>
        <entry>
            <key><value>001</value></key>
            <value>dsl</value>
        </entry>
        <entry>
            <key><value>002</value></key>
            <value>dsl2</value>
        </entry>
    </map>

        6.Properties 集合HashTable的子类 类似于Map<String,String>

        

    <property name="age" value="18"/>
    <property name="name" value="dsl"/>

      ii. 自定义类型(程序员自己定义+开源框架提供的类型) 成员变量注入

      

    UserService{
       UserDao ud;        
    }
    
    
    
    //spring配置文件
        <bean id="UserDao" class="xxx.UserDao"/>
        <bean id="UserService class="xxx.UserService">
            <property name="ud">
                       <ref local="UserDao"/>
            </property>
        </bean>

        

    b) 构造

    <constructor-arg>
        <value>18</value>
    </constructor>
    <constructor-arg>
        <value>dsl</value>
    </construcyor>

      根据标签的个数, 自动匹配对应的构造方法

      注意:构造重载

      构造方法参数不同

      通过标签个数匹配构造方法

      构造方法参数相同

      通过为标签体检type属性  区分调用哪个类型的构造方法

    <constructor-arg type="int">
        <value>18</value>
    </constructor-arg>

    二、 目的为成员变量赋值,优势是:解耦和

    三 、Spring创建对象和注入的原理

      a) 创建对象

        <bean id="User" class="xxx.User"/> User{int age;String name}

          1.读取配置文件,加载类信息

          2.通过反射创建对应类的对象,反射调用无参构造函数。

      b) 注入

    <bean id=”User” class=”xxxx.User”>
        <property name=”age”>
             <value>18</value>
        </property>
        <property name=”name”>
             <value>dsl</value>
        </property>
    </bean>
    User user =new User();
    user.setAge(18);
    user.setName(“dsl”)

    四、FactoryBean技术

     对象(简单对象 可以通过构造方法直接创建的对象)

      对象(复杂对象 不能通过构造方法直接创建的对象,由若干步骤组成)

       Connection : 

         Class.forName(“oracle.jdbc.OracleDriver”) //com.mysql.jdbc.Driver  

         Connection conn = DriverManager.getConnection();   

      SqlSession:

        Resources.getResourceAsStream(“Myabtis-config.xml”)

        New SqlSessionFactoryBuilder().build(is);

        Ssf.openSession()

     a) FactoryBean开发过程

      i. 类 实现 FactoryBean接口: class ConnectionFactoryBean implements FactoryBean

      ii. 覆盖接口中的所有方法 FactoryBean  方法有3 

    1. //用于书写复杂对象的创建过程的代码,并将创建的复杂对象返回

        public Object getObject(){

        Class.forName(“oracle.jdbc.OracleDriver”) //com.mysql.jdbc.Driver  

        Connection conn = DriverManager.getConnection();  

        return conn;

        }

      2.//用于返回复杂对象的实际类型

        public Class getObjectType(){

        return Connnection.class

        }

      

      3.//用于控制复杂对象的创建次数

        public Boolean isSingleton(){

        return true;//工厂只会创建一次当前对象  SqlSessionFactory

        return false;//每次创建一个新的对象   connection

        }

      iii.配置文件进行配置

        <bean id=”conn” class=”xxx.ConnectionFactoryBean”/>  Connection

        获取复杂对象:

        Connection  conn = (Connection)ApplicationContext.getBean(“conn”);

     

        注意:如果创建的是复杂对象(实现了FactoryBean接口),通过bena标签ID值获取的对象就是要创建的复杂对象

            1、 isSingleton方法返回值怎么确定  看需求 根据对象的特点定

            2、 获取ConnectionFactoryBean类的对象?

     

              ConnectionFactoryBean cfb = (ConnectionFactoryBean)ApplicationContext.getBean(“&conn”);

     

       

        

        

     

  • 相关阅读:
    Hbase­优化方案
    ssh 登录
    微软2017校招笔试题3 registration day
    微软2017校招笔试题2 composition
    STL中的查找算法
    leetcode-188 买卖股票4
    leetcode-306 Additive Number
    网络安全(3): 数据完整性校验
    网络安全(2)-数据加解密
    linux共享库
  • 原文地址:https://www.cnblogs.com/dslnn/p/8902314.html
Copyright © 2011-2022 走看看