(二)Spring 配置bean实例化有哪些方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiangshangchunjiezi/article/details/88816175

一、构造方法实例化:XML配置使用bean构造器

这种创建方式使我们使用最多的一种创建方式,直接配置bean节点即可,比如我有一个User类,如下:

public class User {
    public void add() {
        System.out.println("add()---------");
    }
}

然后通过简单配置一个bean节点就可以获取实例了,如下:

<bean class="org.sang.User" id="user"/>

OK,我们通过如下代码进行一个简单的测试:

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = (User) context.getBean("user");
        System.out.println(user);

 所以在像如上这种没有配置构造参数使用无参构造方法进行实例化时一定要保证对应的Class拥有一个public的无参构造方法。如果我们的构造方法是有参数的,则需要通过constructor-arg来指定对应的参数,如下这种就是通过配置构造参数使用构造方法进行实例化的。

​
<bean class="org.sang.User" id="user"/>

​    <constructor-arg value="hello"/>
</bean>

二、静态工厂实例化:XML配置+factory类,使用静态工厂方法实例化

如果我们的bean是通过指定Class的静态方法进行实例化的,则我们可以通过指定Class为拥有对应静态方法的Class,指定factory-method为对应的实例化静态方法。

public class HelloBeanFactory {   
public static Hello createHelloBean() {   
return new HelloBean();   
}   
}
  ﹤bean id="sayhello" class="test.service.impl.HelloBean"/﹥  
  ﹤bean id="sayhello2" class="test.service.impl.HelloBeanFactory" factory-method="createHelloBean"/﹥

从以上定义我们可以看到在通过静态方法实例化对应的bean时是不需要指定对应的bean的类型的,指定的class是对应静态方法所在的Class。实例化的bean的类型Spring将根据factory-method指定方法的返回值决定。

三、实例工厂实例化

有时候我们的bean可能是需要通过某个对象进行实例化的,这个时候我们可以通过factory-bean指定用来实例化该bean的对应对象,通过factory-method指定factory-bean中用来实例化该bean的方法。factory-bean必须也是属于ApplicationContext中的一个bean。

public class Hello {

	public World createWorld() {
		return new World();
	}
	
}

如果我们需要定义一个bean使用Hello的实例对象的createWorld方法来实例化对应的World对象,则可以这样定义:

	<bean id="hello" class="com.app.Hello"/>
	<bean id="world" factory-bean="hello" factory-method="createWorld"/>

参看:https://blog.csdn.net/u012702547/article/details/56021922

          https://elim.iteye.com/blog/2382031

猜你喜欢

转载自blog.csdn.net/jiangshangchunjiezi/article/details/88816175