前言
Spring框架作为一个轻量级的控制反转(IoC)容器,为开发者提供了多种对象实例化的策略。通过这些策略,开发者可以更加灵活地控制对象的生命周期和依赖关系。无论是通过XML配置、注解配置还是Java配置,Spring都能轻松地实现对象的实例化。本文将介绍Spring实例化对象的几种常见方式。
前面的例子都是无参构造实例化,所以这里就不再赘述。
有参构造实例化
先提供一个有参的构造方法:
java
public UserService(String str){
System.out.println("有参构造实例化对象"+str);
}
然后在配置的xml文件使用constructor-arg 添加参数,value为参数的值:
XML
<bean id="text" class="com.cc.service.UserService" >
<constructor-arg name="str" value="hhhhhh"/>
</bean>
注意name的值要与形参相同:
运行结果如图:
在有多个参数的情况下,还需要使用index属性来配置参数的值(如果name属性都配置了也可以不用index):
java
public UserService(String str,int string){
System.out.println("有参构造实例化对象"+str+","+string);
}
XML
<bean id="text" class="com.cc.service.UserService" >
<constructor-arg name="str" index="0" value=""/>
<constructor-arg name="string" index="1" value="188"/>
</bean>
工厂方式实例化对象
静态工厂方式实例化对象
静态工厂方式实例化对象是通过属性factory-method来指定一个静态方法,在该静态方法中达到创建对象的目标并返回交给spring容器管理。
XML
<bean id="user" class="com.cc.entity.User" factory-method="createObj"></bean>
java
public class User {
public static Person createObj() {
return new Person();
}
}
java
public class Main {
public static void main(String[] args) {
ClassPathXmlApplicationContext a = new ClassPathXmlApplicationContext("test.xml");
Person user = (Person) a.getBean("user");
System.out.println(user);
}
}
采用静态工厂的方式去实例化对象,只需要在bean标签中指定一个静态方法 即可,用factory-method属性来指定,方面名自已取,反正由idea自动帮我们创建好。然后我们只需要在创建好的静态方法中返回一个对象就搞定了。
实例工厂方式实例化对象
实例工厂方式与静态工厂方式略有不同:
静态工厂方式是一个静态方法,它直接通过类名调用,并返回一个新的bean实例;
在xml配置文件中,使用<bean>标签定义bean实例,用factory-method属性指定静态工厂方法名称
实例工厂方式是一个非静态方法,它需要在已经创建了工厂对象的基础上,通过工厂对象来调用。factory-bean 指定已经创建好的工厂bean的id,再使用factory-method属性指定工厂方法的名称
XML
<bean id="user" class="com.cc.entity.User" ></bean>
<bean id="person" class="com.cc.entity.Person" factory-bean="user" factory-method="createObj"></bean>
java
public class User {
public User createObj() {
return new User();
}
}
java
public class Main {
public static void main(String[] args) {
ClassPathXmlApplicationContext a = new ClassPathXmlApplicationContext("test.xml");
Object bean = a.getBean("person");
System.out.println(bean);
}
}