spring配置详解-三种对象创建方式_
生活随笔
收集整理的這篇文章主要介紹了
spring配置详解-三种对象创建方式_
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
新建一個(gè)包,b_create,關(guān)于Spring創(chuàng)建對(duì)象的方式,咱們首先先介紹默認(rèn)方式,我復(fù)制一個(gè)配置文件過(guò)來(lái),在這個(gè)包下創(chuàng)建一個(gè)配置文件,把這些注釋可以刪掉了,現(xiàn)在咱們看到的情況,是常見的情況,這種情況它是怎么創(chuàng)建對(duì)象的呢,這是創(chuàng)建方式一,這個(gè)問(wèn)題我留給你們,一會(huì)創(chuàng)建對(duì)象,怎么創(chuàng)建的,我問(wèn)的不是那么深?yuàn)W,是不是走空參,空參構(gòu)造創(chuàng)建的,不經(jīng)歷構(gòu)造函數(shù)是不可能創(chuàng)建對(duì)象的,所以這種方式只有一個(gè)構(gòu)造,空參構(gòu)造,所以咱們測(cè)試看是不是走空參構(gòu)造,User對(duì)象聲明一個(gè)顯示的空參構(gòu)造,打印一下User對(duì)象空參構(gòu)造方法,只要走的話就會(huì)打印,配置文件,咱們要加載這個(gè)配置,把這個(gè)路徑粘過(guò)來(lái),這樣就加載這個(gè)包的配置了,獲得咱們的user對(duì)象
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "><bean name="user" class="com.learn.bean.User"></bean></beans>
package com.learn.bean;/*** @author Leon.Sun*/
public class User {public User() {System.out.println("User空參構(gòu)造方法");}private String name;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}}
package com.learn.a_hello;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.learn.bean.User;public class Demo {@Testpublic void fun1() {/*** 1.創(chuàng)建容器*/ApplicationContext ac = new ClassPathXmlApplicationContext("com/learn/b_create/applicationContext.xml");/*** 2.向容器要"user"對(duì)象*/User u = (User)ac.getBean("user");/*** 打印user對(duì)象*/System.out.println(u);}}
User空參構(gòu)造方法
com.learn.bean.User@7113b13f顯然是走空參構(gòu)造,ApplicationContext容器的特點(diǎn)是,容器創(chuàng)建出來(lái),所有對(duì)象都創(chuàng)建出來(lái),現(xiàn)在我把所有代碼注掉了,是不是對(duì)象出來(lái)了,這就是咱們的創(chuàng)建方式一,創(chuàng)建方式一,空參構(gòu)造,Spring創(chuàng)建對(duì)象的方式,然后一共有三種方式,剛才咱們看的是第一種,空參構(gòu)造方式,這個(gè)標(biāo)上一個(gè)紅色,其他都是綠色,綠色是什么顏色,了解的意思,提前告訴你們,那這個(gè)了解,叫做靜態(tài)工廠,靜態(tài)對(duì)象工廠,靜態(tài)工廠方式,靜態(tài)工廠方式,是啥意思呢,比如說(shuō)我user對(duì)象當(dāng)中,在這里寫太亂了,我在外面新建一個(gè)工廠吧,我在這里新建一個(gè)工廠,比如叫做BeanFactory,叫做UserFactory,UserFactory看名字就知道叫用戶工廠,返回值是User,方法名是createUser,導(dǎo)一個(gè)User的包,接下來(lái)咱們?cè)诜椒ó?dāng)中,咱們想手動(dòng)把這個(gè)對(duì)象創(chuàng)建出來(lái),調(diào)用這個(gè)方法把User創(chuàng)建出來(lái),然后交給容器來(lái)管理,知道啥意思不,不讓Spring來(lái)創(chuàng)建了,而是咱們手動(dòng)在方法里面創(chuàng)建,Spring幫我管理,調(diào)用這個(gè)方法創(chuàng)建出來(lái)又如何,明白啥意思不,那我們可以手動(dòng)創(chuàng)建出來(lái),咱們?cè)俅蛴∫粋€(gè),這個(gè)叫做靜態(tài)工廠創(chuàng)建User,然后咱們?cè)谶@里return new一個(gè)User,希望Spring調(diào)這個(gè)方法來(lái)創(chuàng)建User,而不是直接調(diào)空參構(gòu)造,怎么配呢,這就是咱們的創(chuàng)建方式二,靜態(tài)工廠創(chuàng)建,咱們的user改成user2,class我們要配UserFactory的完整類名,class配置UserFactory的完整類名,你這樣配的話肯定不行,你要是這樣肯定是配置UserFactory對(duì)象給user2了,你還是得加上一個(gè)屬性,factory-method等于,把咱們的createUser方法名復(fù)制粘貼到這里來(lái),把這三個(gè)屬性合在一起的話,那這個(gè)效果就出來(lái)了,意思就出來(lái)了,啥意思呢,意思就是調(diào)用UserFactory的createUser方法,創(chuàng)建一個(gè)user2的對(duì)象,知道啥意思不,這樣配置是調(diào)用咱們UserFactory的createUser方法,創(chuàng)建名為user2的對(duì)象,放入容器,那么接下來(lái)的話,咱們?cè)跍y(cè)試類里面再測(cè)試一下,把這個(gè)測(cè)試方法復(fù)制一份,創(chuàng)建方式二,靜態(tài)工廠,那這個(gè)我們只要獲得user2就可以了,再執(zhí)行一下,看一下效果
package com.learn.b_create;import com.learn.bean.User;public class UserFactory {public static User createUser() {System.out.println("靜態(tài)工廠創(chuàng)建User");return new User();}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "><!-- 創(chuàng)建方式1:空參構(gòu)造方法 --><!-- <bean name="user" class="com.learn.bean.User"></bean> --><!-- 創(chuàng)建方式2:靜態(tài)工廠創(chuàng)建 調(diào)用UserFactory的createUser方法創(chuàng)建名為user2的對(duì)象,放入容器--><bean name="user2" class="com.learn.b_create.UserFactory" factory-method="createUser"></bean></beans>
package com.learn.a_hello;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.learn.bean.User;public class Demo {/*** 創(chuàng)建方式1:空參構(gòu)造*/@Testpublic void fun1() {/*** 1.創(chuàng)建容器*/ApplicationContext ac = new ClassPathXmlApplicationContext("com/learn/b_create/applicationContext.xml");/*** 2.向容器要"user"對(duì)象*/User u = (User)ac.getBean("user");/*** 打印user對(duì)象*/System.out.println(u);}/*** 創(chuàng)建方式2:靜態(tài)工廠*/@Testpublic void fun2() {/*** 1.創(chuàng)建容器*/ApplicationContext ac = new ClassPathXmlApplicationContext("com/learn/b_create/applicationContext.xml");/*** 2.向容器要"user"對(duì)象*/User u = (User)ac.getBean("user2");/*** 打印user對(duì)象*/System.out.println(u);} }
靜態(tài)工廠創(chuàng)建User
User空參構(gòu)造方法
com.learn.bean.User@5ed828d看看效果,看到了不,上面是咱們的第一種方式,下面是不是靜態(tài)工廠,然后也創(chuàng)建成功了,第二種方式,接下來(lái)第三種方式了,第三種方式也是了解,實(shí)例工廠,這也是了解,實(shí)例工廠和靜態(tài)工廠實(shí)際上沒(méi)有太大區(qū)別,只不過(guò)現(xiàn)在通過(guò)調(diào)用createUser2方法來(lái)創(chuàng)建對(duì)象,那這兩個(gè)方法不能完全一樣,我要把這個(gè)static給刪掉,看到這兩個(gè)方法的區(qū)別了,上面的靜態(tài)工廠說(shuō)白了就是,方法是靜態(tài)的而已,調(diào)這個(gè)方法的話,直接這個(gè)類名就可以調(diào),而下面這個(gè),我要調(diào)的話,必須創(chuàng)建一個(gè)對(duì)象,UserFactory對(duì)象,才能執(zhí)行這個(gè)方法,那現(xiàn)在我想調(diào)用這個(gè)方法,來(lái)獲得User對(duì)象,那我該怎么配,這就是所謂的實(shí)例工廠,那我們?cè)賮?lái)一個(gè)配置,叫做user3,實(shí)例工廠創(chuàng)建,咋配呢,實(shí)例工廠相對(duì)于靜態(tài)工廠要麻煩一些,你要配置兩個(gè)bean,還得再來(lái)一個(gè)bean,因?yàn)槟氵@個(gè)工廠對(duì)象,得要?jiǎng)?chuàng)建實(shí)例,所以你得把工廠對(duì)象配進(jìn)來(lái),所以這里來(lái)一個(gè)UserFactory對(duì)象,那完整名就需要復(fù)制工廠的完整名,然后粘貼過(guò)來(lái),然后這個(gè)就不用了,首先讓UserFactory作為一個(gè)普通的bean配置到容器當(dāng)中,然后接下來(lái),關(guān)鍵是在這,在這的話,在factory-bean這里要填寫userFactory,這樣的話配完了,配完了感受一下看看,這是不是也很好理解,createUser要改成2,首先配置一個(gè)工廠對(duì)象,然后再看這個(gè)配置,factory-bean是告訴哪一個(gè)對(duì)象是工廠對(duì)象,這個(gè)是告訴他是調(diào)用工廠對(duì)象的哪一個(gè)方法,是不是獲得你的UserFactory對(duì)象,調(diào)用UserFactory,對(duì)象的createUser2方法的創(chuàng)建名為user3的對(duì)象,放入容器,那這個(gè)配置完事以后,咱們?cè)贉y(cè)試一下咱們的動(dòng)態(tài)工廠方式,動(dòng)態(tài)工廠咱們只要獲得user3就可以了,再執(zhí)行一下,看看動(dòng)態(tài)工廠打印
package com.learn.b_create;import com.learn.bean.User;public class UserFactory {public static User createUser() {System.out.println("靜態(tài)工廠創(chuàng)建User");return new User();}public User createUser2() {System.out.println("實(shí)例工廠創(chuàng)建User");return new User();}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "><!-- 創(chuàng)建方式1:空參構(gòu)造方法 --><!-- <bean name="user" class="com.learn.bean.User"></bean> --><!-- 創(chuàng)建方式2:靜態(tài)工廠創(chuàng)建 調(diào)用UserFactory的createUser方法創(chuàng)建名為user2的對(duì)象,放入容器--><!-- <bean name="user2" class="com.learn.b_create.UserFactory" factory-method="createUser"></bean> --><!-- 創(chuàng)建方式2:實(shí)例工廠創(chuàng)建 --><bean name="user3" factory-bean="userFactory" factory-method="createUser2"></bean><bean name="userFactory" class="com.learn.b_create.UserFactory"></bean></beans>
package com.learn.a_hello;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.learn.bean.User;public class Demo {/*** 創(chuàng)建方式1:空參構(gòu)造*/@Testpublic void fun1() {/*** 1.創(chuàng)建容器*/ApplicationContext ac = new ClassPathXmlApplicationContext("com/learn/b_create/applicationContext.xml");/*** 2.向容器要"user"對(duì)象*/User u = (User)ac.getBean("user");/*** 打印user對(duì)象*/System.out.println(u);}/*** 創(chuàng)建方式2:靜態(tài)工廠*/@Testpublic void fun2() {/*** 1.創(chuàng)建容器*/ApplicationContext ac = new ClassPathXmlApplicationContext("com/learn/b_create/applicationContext.xml");/*** 2.向容器要"user"對(duì)象*/User u = (User)ac.getBean("user2");/*** 打印user對(duì)象*/System.out.println(u);}/*** 創(chuàng)建方式2:動(dòng)態(tài)工廠*/@Testpublic void fun3() {/*** 1.創(chuàng)建容器*/ApplicationContext ac = new ClassPathXmlApplicationContext("com/learn/b_create/applicationContext.xml");/*** 2.向容器要"user"對(duì)象*/User u = (User)ac.getBean("user3");/*** 打印user對(duì)象*/System.out.println(u);}}
這是實(shí)例工廠,這就是第三種創(chuàng)建方式,后面兩種看看,以后基本上不用
?
總結(jié)
以上是生活随笔為你收集整理的spring配置详解-三种对象创建方式_的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: spring项目概念-BeanFacto
- 下一篇: spring配置详解-scope属性