码迷,mamicode.com
首页 > 编程语言 > 详细

Spring框架(第二天)

时间:2018-04-21 19:30:50      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:ssi   rda   object   方法参数   次数   java   const   加载   接口   

一、 注入

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”);

 

   

    

 

    

 

Spring框架(第二天)

标签:ssi   rda   object   方法参数   次数   java   const   加载   接口   

原文地址:https://www.cnblogs.com/dslnn/p/8902314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!