您的位置:首页 > 编程语言 > Java开发

Spring 创建对象的问题,不同构造方法创建对象,使用工厂类类获取对象、单例或多例、延迟创建问题

2016-08-28 23:36 423 查看
创建实体类Student

package star.july.b_ioc;
public class Student {
private String name;
private int age;
public Student() {
System.out.println("执行了Student构造方法");
}
public Student(String name, int age) {
System.out.println("调用了有参构造方法");
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}

}


再创建工厂类,

package star.july.b_ioc;
public class StudentFactory {

public StudentFactory() {
//                 new Student();
System.out.println("调用StudentFactory构造方法");
}

public boolean setHaha(){
System.out.println("哈哈");
return true;
}

public Student getStudent(){
System.out.println("进入了StudentFactory的getStudent()方法");
return new Student();
}

public static Student getStu(){
System.out.println("调用静态方法");
return new Student();
}
}


配置Spring的xml,applicationContext.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.xsd" default-lazy-init="true"
>
<!--         <beanms default-lazy-init="true"/> -->
<!-- 配置一个javabean
id:对象的唯一标记
class:需要创建的对象
-->
<!-- 使用无参构造方法 -->
<!-- <bean id = "students" class="star.july.b_ioc.Student">
</bean>  -->
<!--
有参方法
index:构造方法的参数索引,从0开始
value:需要传递的参数值
type:参数类型
-->
<!--   <bean id ="students" class="star.july.b_ioc.Student">
<constructor-arg index="0"
value="小火"
type="String"
>
</constructor-arg>
<constructor-arg index="1"
value="20"
type="int"
>
</constructor-arg>
</bean> -->

<!-- 先创建工厂类的成员方法获取对象 -->
<!-- 1、先创建工厂类对象 -->
<bean  id="factory" class="star.july.b_ioc.StudentFactory" >
</bean>
<!-- 2、调用工厂类的成员方法
factory-bean:使用哪个工厂类的对象
factory-method:使用工厂类的哪个方法
-->
<bean id="invocation" factory-bean="factory" factory-method="setHaha" ></bean>

<!-- 调用工厂类的静态方法 -->
<bean  id="invokeStatic"  class="star.july.b_ioc.StudentFactory" factory-method="getStu"  ></bean>

<!-- 对象单例子
单例:singleton(默认)
多例:prototype
-->
<bean  id="s1"  class="star.july.b_ioc.StudentFactory"  scope="prototype" ></bean>

<!--
对象的延迟创建问题
lazy-init:是否延迟加载(创建)对象
false:在初始化工厂的时候(调用getBean()方法
true:在调用getBean()的时候创建对象
注意:该方法只能用在单例子
-->
<bean  id="s"  class="star.july.b_ioc.StudentFactory"  scope="singleton" lazy-init="true" ></bean>
</beans>


最后分别测试

package star.july.b_ioc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Demo {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("/star/july/b_ioc/applicationContext.xml");
//                Student s = (Student)ac.getBean("students");
StudentFactory s = (StudentFactory) ac.getBean("s");
//调用静态方法
//                StudentFactory s = (StudentFactory) ac.getBean("invokeStatic");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐