详解Spring bean中实例化的三种方式

  

今天我想来说说如何通过xml配置来实例化bean,其实也很简单。
  

  

使用xml配置来实例化bean共分为三种方式,分别是普通构造方法创建,静态工厂创建,实例工厂创建,好吧,那么接下来我们来分别看看这几种方式。

  

<>强普通构造方法创建

  

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

        公开课用户{   公共空间add () {   System.out.println (“add () - - - - - - - - - - - -”);   }   }      

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

        & lt; bean类=" org.sang。用户" id="用户"/祝辞      

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

        ApplicationContext上下文=new ClassPathXmlApplicationContext(“中”);   用户用户=(用户)context.getBean(“用户”);    System.out.println(用户);      

运行输出结果如下:
  

  

详解Spring bean中实例化的三种方式

  

<强>静态工厂创建

  

除了通过普通的构造方法创建之外,我们也可以通过静态构造方法来创建一个bean的实例,假设我有一个类叫做User2,如下:

        公开课User2 {   公共空间add () {   System.out.println (“add2 () - - - - - - - - - - - -”);   }   }      

我给它创建一个静态工厂,如下:

        公开课User2Factory {   公共静态User2 getInstance () {   返回新User2 ();   }   }      

该工厂中有一个静态方法,该静态方法返回一个User2的实例,在春天的配置文件中,我们看看如何生成User2的实例:
  

  

代码如下:
  & lt; bean id=皍ser2”类=" org.sang。User2Factory getInstance“工厂方法=/祝辞
  
  

  

还是豆节点,只是多了一个工厂方法属性,该属性指明该类中的静态工厂方法名为getInstance,这样春天框架就知道调用哪个方法来获取User2的实例了,测试代码如下:

        @Test   公共空间test2 () {   ApplicationContext上下文=new ClassPathXmlApplicationContext(“中”);   User2用户=(User2) context.getBean (User2);   user.add ();   }      

测试结果如下:
  

  

详解Spring bean中实例化的三种方式

  

值得强调的是,这种方法并不常用。

  

<>强实例工厂创建

  

小伙伴们看了静态工厂创建豆实例肯定都觉得很麻烦,事实上还有比静态工厂更麻烦的写法,那就是通过实例工厂来创建豆实例。实例工厂,顾名思义,就是我们工厂中的方法不是静态的,比如说,我有一个实体类叫做User3,如下:

        公开课User3 {   公共空间add () {   System.out.println (“add3 () - - - - - - - - - - - -”);   }   }      

然后我还有一个工厂方法,如下:

        公开课User3Factory {   公共User3 getUser3 () {   返回新User3 ();   }   }      

小伙伴们看的到,在User3Factory类中有一个getUser3的方法,该方法返回一个User3类的实例,但是该方法不是静态的,那么我们在春天的配置文件中要进行怎样的配置才能获取User3的一个实例呢?如下:

        & lt; bean类=" org.sang。User3Factory User3Factory“id=/比;   & lt; bean id=" user3 " factory-bean=皍ser3Factory”工厂方法=" getUser3 "/祝辞      用

第一个bean来获取user3Factory的实例,第二个bean则根据user3Factory的实例,然后指定工厂方法,通过getUser3方法来获取User3的实例。
  

  

测试代码如下:

        @Test   公共空间test3 () {   ApplicationContext上下文=new ClassPathXmlApplicationContext(“中”);   User3用户=(User3) context.getBean (“User3”);   user.add ();   }      

测试结果如下:
  

  

详解Spring bean中实例化的三种方式

详解Spring bean中实例化的三种方式