Spring 创建对象的三种方式以及给 Bean 的属性赋值

Spring 创建对象的三种方式

    通过构造方法方法创建 无参构造创建:默认情况下 有参构造创建:需要明确的配置 需要在实体类中创建有参构造 需要在applicationContext.xml 中详细配置 如果设定的条件匹配多个构造方法,执行配置中最后一个
<bean id="peo" class="com.mak.pojo.People">
	<constructor-arg index="0" name="id" type="int" value="123">
	</constructor-arg> 
	<constructor-arg index="1" name="name" type="java.lang.String" value=" 张 三 ">
	</constructor-arg> 
</bean>
    测试
public static void main(String[] args) {
          
   
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		People people = ac.getBean("peo",People.class);
		System.out.println(people);
	}

>>> People [id=123, name=张三]
    实例工厂 工厂设计模式:帮助创建类对象,一个工厂可以生产多个对象 需要先创建工厂,才能生产对象
public class PeopleFactory {
          
    
	public People newInstance(){
          
   
		return new People(1,"测试");
	}
}
    xml
<bean id="factory" class="com.mak.pojo.PeopleFactory"></bean> 
<bean id="peo1" factory-bean="factory" factory-method="newInstance"></bean>

测试方法一样

    静态工厂 使用时,不需要创建工厂,快速创建对象 编写一个静态工厂(在方法上添加 static)
public class PeopleFactory {
          
    
	public static People newInstance(){
          
   
		return new People(1,"测试");
	}
}
    xml
<bean id="peo2" class="com.mak.pojo.PeopleFactory" factory-method="newInstance"></bean>

Spring 给 Bean 的属性赋值(注入)

    通过构造方法设置值 设置注入(通过 set 方法) 如果属性是基本数据类型或 String
<bean id="peo" class="com.mak.pojo.People"> 
	<property name="id" value="222"></property>
	<property name="name"> 
		<value>zhangsan</value> 
	</property> 
</bean>
    属性是Set<?>
<property name="sets"> 
	<set> 
		<value>1</value>
		<value>2</value>
		<value>3</value> 
		<value>4</value> 
	</set> 
</property>
    属性是List<?>
<property name="list"> 
	<list> 
		<value>1</value> 
		<value>2</value> 
		<value>3</value> 
	</list> 
</property>
    属性是数组
<property name="strs" > 
	<array> 
		<value>1</value> 
		<value>2</value>
		<value>3</value> 
	</array> 
</property>
    属性是map
<property name="map"> 
	<map> 
		<entry key="a" value="b" > </entry> 
		<entry key="c" value="d" > </entry> 
	</map> 
</property>
    属性是Properties
<property name="demo"> 
	<props> 
		<prop key="key">value</prop> 
		<prop key="key1">value1</prop> 
	</props> 
</property>

DI

    依赖注入 (Dependency Injection) DI 和 IoC 是一样的 当一个类(A)中需要依赖另一个类()对象时,把 B 赋值给 A 的过程就叫做依赖注入
<bean id="peo" class="com.mak.pojo.People"> 
	<property name="desk" ref="desk"></property> 
</bean>
<bean id="desk" class="com.mak.pojo.Desk"> 
	<property name="id" value="1"></property> 
	<property name="price" value="12"></property> 
</bean>
经验分享 程序员 微信小程序 职场和发展