当前位置:   article > 正文

[Spring学习]04 Spring IOC创建Bean的几种方式_spring ioc 创建java bean创建几种方式

spring ioc 创建java bean创建几种方式

一、调用构造器创建Bean对象

通过调用构造器创建Bean对象是我们在实际开发中最常用的方式,而构造器创建Bean对象又有两种方式:

1)通过无参构造方法创建

其本质是 SpringContext 利用无参的构造函数创建一个对象,然后利用setter方法进行赋值,所以要提供无参数构造函数,并定义对应字段的setter方法。如果无参构造函数不存在,Spring上下文创建对象的时候便会报错。
类User.java示例代码:

package priv.ioc.bean;

public class User {
	
	private String name;
	public User() {
        System.out.println("User的无参构造方法");
    }
	public void setName(String name) {
        System.out.println(name);
        this.name = name;
    }
	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

xml配置bean时使用:

<property  name="属性名"  value="值" ></property>
  • 1

标签对属性进行赋值。

Bean.xml示例代码:

 <!--无参构造,执行set方法-->
    <bean id="user" class="priv.ioc.bean.User">
        <property name="name" value="张三"/>
    </bean>
  • 1
  • 2
  • 3
  • 4

好像是执行的有参构造,但其实是执行了无参构造方法,然后通过set方法将name赋值进去的,类似执行了这样的代码:

User user = new User();
user.setName("张三");
  • 1
  • 2

2)通过有参构造方法创建

通过有参构造方法创建,有三种方式:

  1. 通过参数下标进行赋值

类User.java示例代码:

package priv.ioc.bean;

public class User {
	
	private String name;
	private int age;
	public User(String name, int age) {
        System.out.println("User的有参构造方法");
        this.name = name;
        this.age = age;
    }
	
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

Bean.xml示例代码:

    <!--有参构造:下标进行赋值-->
    <bean id="user" class="priv.ioc.bean.User">
         <constructor-arg index="0" value="张三"/>
         <constructor-arg index="1" value="28"/>
    </bean>
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 通过参数名称进行赋值

类User.java示例代码:

package priv.ioc.bean;

public class User {
	
	private String name;
	private int age;
	public User(String name, int age) {
        System.out.println("User的有参构造方法");
        this.name = name;
        this.age = age;
    }
	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

Bean.xml示例代码:

    <!--有参构造:名称进行赋值-->
    <bean id="user" class="priv.ioc.bean.User">
         <constructor-arg name="name" value="张三"/>
         <constructor-arg name="age" value="28"/>
    </bean>
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 通过参数类型进行赋值

类User.java示例代码:

package priv.ioc.bean;

public class User {
	
	private String name;
	private int age;
	public User(String name, int age) {
        System.out.println("User的有参构造方法");
        this.name = name;
        this.age = age;
    }
	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

Bean.xml示例代码:

    <!--有参构造:类型进行赋值-->
    <bean id="user" class="priv.ioc.bean.User">
         <constructor-arg type="java.lang.String" value="张三"/>
         <constructor-arg type="java.lang.Integer" value="28"/>
    </bean>
  • 1
  • 2
  • 3
  • 4
  • 5

二、调用静态工厂方法创建Bean对象

类User.java示例代码:

package priv.ioc.bean;

public class User {
	
	private String name;
	private int age;
	public User(String name, int age) {
        System.out.println("User的有参构造方法");
        this.name = name;
        this.age = age;
    }
	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

定义静态工厂方法:

package priv.ioc.factory;

import priv.ioc.bean.User;

public class UserFactory {

	public static User createPerson(String name,Integer age) {
		return new User(name, age);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Bean.xml示例代码:

    <!-- 静态工厂方法 -->
	<bean id="user" class="priv.ioc.factory.UserFactory" factory-method="createPerson">
	    <constructor-arg name="name" value="张三" />
	    <constructor-arg name="age" value="28" />
	</bean>
  • 1
  • 2
  • 3
  • 4
  • 5

class:priv.ioc.factory.UserFactory,指定静态工厂的实现类( 即包名.类名 )

factory-method:createPerson,该属性指定静态工厂的方法(方法名)

三、调用实例(动态)工厂方法创建Bean对象

类User.java示例代码:

package priv.ioc.bean;

public class User {
	
	private String name;
	private int age;
	public User(String name, int age) {
        System.out.println("User的有参构造方法");
        this.name = name;
        this.age = age;
    }
	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

定义动态工厂方法:

package priv.ioc.factory;

import priv.ioc.bean.User;

public class UserFactory {

	public User createPerson(String name,Integer age) {
		return new User(name, age);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Bean.xml示例代码:

     <!-- 先配置工厂Bean,class指定该工厂的实现类,该Bean负责产生其他Bean实例 --> 
	 <bean id="userFactory" class="priv.ioc.factory.UserFactory"/> 
	 
	 <!-- 再引用工厂Bean来配置其它的Bean -->
	 <bean id="user"  factory-bean="userFactory"  factory-method="createPerson">
	    <constructor-arg name="name" value="张三" />
	    <constructor-arg name="age" value="28" />
	 </bean>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

factory-bean :userFactory,该属性指定工厂Bean的id

factory-method:createPerson,该属性指定实例工厂的方法(方法名)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/241604
推荐阅读
相关标签
  

闽ICP备14008679号