构造方法与setter方法

Posted yimengxianzhi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构造方法与setter方法相关的知识,希望对你有一定的参考价值。

上一个随笔提到了constructor-arg子标签,此随笔将会介绍一些类型的赋值方法

String类型、基本数据类型或其包装类都可以使用value标签属性赋值

  String类型和基本类型的操作如下:

//User.java文件中的代码
public  User(int id){
    System.out.println("序号"+ id);
}
public  User(String name){
    System.out.println("姓名" + name);
}
<!-- application.xml文件中的代码-->
<bean class="com.zzj.ov.User">
    <constructor-arg type="int" value="21"></constructor-arg>
    <constructor-arg type="String" value="朱祖杰"></constructor-arg>
</bean>
//测试文件的代码
public class Test {
    public static void main(String[] args){
        new ClassPathXmlApplicationContext("application.xml");
    }
}

类类型(自定义类型)

类类型的操作如下(以Date类型为例):

//User.java文件中的代码
public  User(Date birth){
    System.out.println("生日" + birth);
}
<!-- application.xml文件中的代码-->
<!-- 将Date类引用 -->
<bean name="bi" class="java.util.Date"></bean>
<!-- 使用ref-->
<bean class="com.zzj.ov.User">
    <constructor-arg ref="bi"></constructor-arg>
</bean>
//测试文件的代码
public class Test {
    public static void main(String[] args){
        new ClassPathXmlApplicationContext("application.xml");
    }
}

数组类型

constructor-arg ——>array——>value(String类型、基本数据类型或其包装类),ref>bean类类型(自定义类型)

  数组类型的操作如下:

 

//User.java文件中的代码
public  User(Object[]  array){
  System.out.println("数组");
  for(Object object: array){
   System.out.println(object);
  }
 }
<!-- application.xml文件中的代码-->
<!-- 将Date类引用 -->
<bean name="bi" class="java.util.Date"></bean>
<bean class="com.zzj.ov.User"> <constructor-arg> <array> <!--同样的基本类型和String类型直接使用value赋值--> <value>12</value> <value>Tom</value> <!--类类型使用ref引用--> <ref bean="bi"/> <!--或者直接使用bean将类引用--> <bean class="java.lang.String"> <constructor-arg value="HAHA"></constructor-arg> </bean> </array> </constructor-arg> </bean>
//测试文件的代码
public class Test {
    public static void main(String[] args){
        new ClassPathXmlApplicationContext("application.xml");
    }
}

④集合类型

  List:constructor-arg ——>list——>value(String类型、基本数据类型或其包装类),ref>bean类类型(自定义类型)

//User.java文件中的代码
public
User(List<Object> list){ System.out.println("List集合"); for(Object object: list){ System.out.println(object); } }
<!--application.xml文件中的代码-->
<bean name="bi" class="java.util.Date"></bean>
<
bean class="com.zzj.ov.User"> <constructor-arg> <list> <value>12</value> <value>Tom</value> <ref bean="bi"/> <bean class="java.lang.String"> <constructor-arg value="HAHA"></constructor-arg> </bean> </list> </constructor-arg> </bean>
//测试文件的代码
public class Test {
    public static void main(String[] args){
       new ClassPathXmlApplicationContext("application.xml");
  }
}

  Set:constructor-arg ——>set——>value(String类型、基本数据类型或其包装类),ref>bean类类型(自定义类型)

 

//User.java文件中的代码
public  User(Set<Object> set){
    System.out.println("Set集合");
    for(Object object: set){
        System.out.println(object);
    }
}
<!--application.xml文件中的代码-->
<bean name="bi" class="java.util.Date"></bean>
<bean class="com.zzj.ov.User">
    <constructor-arg>
    <set>
        <value>12</value>
        <value>Tom</value>
        <ref bean="bi"/>
        <bean class="java.lang.String">
            <constructor-arg value="HAHA"></constructor-arg>
        </bean>
    </set>
    </constructor-arg>
</bean>
//测试文件的代码
public class Test {
    public static void main(String[] args){
       new ClassPathXmlApplicationContext("application.xml");
  }
}

  

  Map:constructor-arg ——>map——>

  entry:key或value是String类型、基本数据类型或其包装类,则分别使用entry标签中key和value标签属性

  entry:key或value是类类型(自定义类型),应该使用对相应的key-refvalue-ref

 

//User.java中的代码
public User(Map<String,Object> map){
    System.out.println("Map集合");
    Set<String> keys = map.keySet();
    for(String key : keys){
        System.out.println(key + ":" + map.get(key));
    }
}
<!--application.xml文件中的代码-->
<bean name="bi" class="java.util.Date"></bean>
<bean class="com.zzj.ov.User">
    <constructor-arg>
    <map>
        <entry key="name" value="Tom"></entry>
        <entry key="age" value="12"></entry>
        <entry key="birth" value-ref="bi"></entry>
    </map>
    </constructor-arg>
</bean>
//测试文件的代码
public class Test {
    public static void main(String[] args){
       new ClassPathXmlApplicationContext("application.xml");
  }
}

Properties:constructor-arg ——>props——>prop 只能配置String类型

 

//User.java文件中的代码如下
public User(Properties properties){
    System.out.println(properties.get("driver"));
    System.out.println(properties.get("userName"));
    System.out.println(properties.get("password"));
    System.out.println(properties.get("url"));
}
<!--application.xml文件中的代码-->
<bean name="bi" class="java.util.Date"></bean>
<bean class="com.zzj.ov.User">
    <constructor-arg>
    <props>
        <prop key="driver">com.mysql.jdbc.Driver</prop>
        <prop key="userName">root</prop>
        <prop key="password">root</prop>
        <prop key="url">jdbc:mysql://127.0.0.1:3306/test</prop>
    </props>
    </constructor-arg>
</bean>
//测试文件的代码
public class Test {
    public static void main(String[] args){
       new ClassPathXmlApplicationContext("application.xml");
  }
}

⑥setter方法(两种,需要在命名空间中选中p)

//User.java中的代码
private String id;
public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
    
private String name;
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
<!--application.xml文件中的代码-->
<!--第一种直接在bean标签里用p方法,第二种使用property标签-->
<bean class="com.zzj.ov.User" p:id-ref="bi" p:name="Tom"> 
    <property name="name" value="Tom"></property>
    <property name="id" ref="bi"></property>
</bean>
//测试文件的代码
public class Test {
    public static void main(String[] args){
       new ClassPathXmlApplicationContext("application.xml");
  }
}

以上是关于构造方法与setter方法的主要内容,如果未能解决你的问题,请参考以下文章

Java面向对象_封装思想——构造器和setter方法选用

Spring设置注入和构造注入的区别

java的idea快捷键生成getter和setter有构造参数无构造参数重写toString方法

Spring 框架中 Setter 注入 和 构造器注入 方式的区别 与优劣

Java的类与对象

Java的类与对象