今天我想来说说如何通过xml配置来实例化bean,其实也很简单。
使用xml配置来实例化bean共分为三种方式,分别是普通构造方法创建,静态工厂创建,实例工厂创建,好吧,那么接下来我们来分别看看这几种方式。
<>强普通构造方法创建强>
这种创建方式使我们使用最多的一种创建方式,直接配置豆节点即可,比如我有一个用户类,如下:
公开课用户{ 公共空间add () { System.out.println (“add () - - - - - - - - - - - -”); } }
然后通过简单配置一个bean节点就可以获取实例了,如下:
& lt; bean类=" org.sang。用户" id="用户"/祝辞
好的,我们通过如下代码进行一个简单的测试:
ApplicationContext上下文=new ClassPathXmlApplicationContext(“中”); 用户用户=(用户)context.getBean(“用户”);System.out.println(用户);
运行输出结果如下:
<强>静态工厂创建强>
除了通过普通的构造方法创建之外,我们也可以通过静态构造方法来创建一个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 (); }
测试结果如下:
值得强调的是,这种方法并不常用。
<>强实例工厂创建强>
小伙伴们看了静态工厂创建豆实例肯定都觉得很麻烦,事实上还有比静态工厂更麻烦的写法,那就是通过实例工厂来创建豆实例。实例工厂,顾名思义,就是我们工厂中的方法不是静态的,比如说,我有一个实体类叫做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 (); }
测试结果如下: