java框架学习日志-3

这章主要是补充一些ioc创建对象的方式,ioc容器在写好<bean></bean>的时候就已经创建对象了。在之前的例子中,一直都是无参的构造方法。下面给出有参的构造方法的对象的创建,没有什么难点重点,只是记录一下。
有参构造函数构造方法有几种。
第一种方法,通过参数下标来设置。
java代码:

package cn.sxt.ov;

public class User {
    private String name;
    private int age;
    /**有参数函数构造方法*/
    public User(String name,int age){
        this.name=name;
        this.age=age;
    }
    public void show(){
        System.out.println("俺是"+name+",今年"+age);
    }
}

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-2.5.xsd">

    <bean id="user" class="cn.sxt.ov.User">
        <constructor-arg index="0" value="张三"/>
        <constructor-arg index="1" value="18"/>
    </bean>

</beans>

constructor-arg关键字就是用来构造有参函数时传参数的。index是参数的下标,从0开始,<constructor-arg index="0" value="张三"/>就是第一个参数传张三。
第二种,通过名字来传参数,就和以前给变量赋值一样:

<?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-2.5.xsd">

    <bean id="user" class="cn.sxt.ov.User">
        <constructor-arg name="name" value="张三"/>
        <constructor-arg name="age" value="18"/>
    </bean>

</beans>

第三种,通过参数类型来设置

<?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-2.5.xsd">

    <bean id="user" class="cn.sxt.ov.User">
        <constructor-arg type="String" value="吴彦祖"/>
        <constructor-arg type="int" value="15"/>
        <constructor-arg type="String" value="男"/>


    </bean>

</beans>

通过参数类型来设置,如果有一样的类型,就按照先后顺序,注意String可以换成java.lang.String。但是int换成java.lang.Integer或者Integer就会报错。不知道为什么。

通过工厂方法来创建对象

这里只需要简单了解一下就行了。知道有这么个东西,因为spring本身就提供了工厂类,可以用轮子,干嘛造轮子。

静态工厂:

先写一个简单的静态工厂,这是一个简单的静态工厂,通过newInstance方法来创建对象

package cn.sxt.factory;

import cn.sxt.ov.User;

public class UserFactory {
    private static User newInstance(String name,int age,String sex){
        return new User(name,age,sex);
    }
}

xml代码

<bean id="user1" class="cn.sxt.factory.UserFactory" factory-method="newInstance">
        <constructor-arg type="String" value="张曼玉"/>
        <constructor-arg type="int" value="15"/>
        <constructor-arg type="String" value="女"/>
    </bean>

结果:

动态工厂

新建动态工厂

package cn.sxt.factory;

        import cn.sxt.ov.User;

public class UserDynamicFactory {
    private  User newInstance(String name,int age,String sex){
        return new User(name,age,sex);
    }
}

xml文件,这里需要改一下静态工厂代码,将静态工厂的class改成factory-bean,然后引用动态工厂的id。

    <bean id="user1" factory-bean="user2" factory-method="newInstance">
        <constructor-arg type="String" value="张曼玉"/>
        <constructor-arg type="int" value="15"/>
        <constructor-arg type="String" value="女"/>
    </bean>

    <bean id="user2" class="cn.sxt.factory.UserDynamicFactory">
    </bean>

注意这里的值还是在user1里面设置的。

猜你喜欢

转载自my.oschina.net/u/4000133/blog/2987695
今日推荐