日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring配置详解-三种对象创建方式_

發布時間:2024/4/13 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring配置详解-三种对象创建方式_ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
新建一個包,b_create,關于Spring創建對象的方式,咱們首先先介紹默認方式,我復制一個配置文件過來,在這個包下創建一個配置文件,把這些注釋可以刪掉了,現在咱們看到的情況,是常見的情況,這種情況它是怎么創建對象的呢,這是創建方式一,這個問題我留給你們,一會創建對象,怎么創建的,我問的不是那么深奧,是不是走空參,空參構造創建的,不經歷構造函數是不可能創建對象的,所以這種方式只有一個構造,空參構造,所以咱們測試看是不是走空參構造,User對象聲明一個顯示的空參構造,打印一下User對象空參構造方法,只要走的話就會打印,配置文件,咱們要加載這個配置,把這個路徑粘過來,這樣就加載這個包的配置了,獲得咱們的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 "><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空參構造方法");}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.創建容器*/ApplicationContext ac = new ClassPathXmlApplicationContext("com/learn/b_create/applicationContext.xml");/*** 2.向容器要"user"對象*/User u = (User)ac.getBean("user");/*** 打印user對象*/System.out.println(u);}} User空參構造方法 com.learn.bean.User@7113b13f顯然是走空參構造,ApplicationContext容器的特點是,容器創建出來,所有對象都創建出來,現在我把所有代碼注掉了,是不是對象出來了,這就是咱們的創建方式一,創建方式一,空參構造,Spring創建對象的方式,然后一共有三種方式,剛才咱們看的是第一種,空參構造方式,這個標上一個紅色,其他都是綠色,綠色是什么顏色,了解的意思,提前告訴你們,那這個了解,叫做靜態工廠,靜態對象工廠,靜態工廠方式,靜態工廠方式,是啥意思呢,比如說我user對象當中,在這里寫太亂了,我在外面新建一個工廠吧,我在這里新建一個工廠,比如叫做BeanFactory,叫做UserFactory,UserFactory看名字就知道叫用戶工廠,返回值是User,方法名是createUser,導一個User的包,接下來咱們在方法當中,咱們想手動把這個對象創建出來,調用這個方法把User創建出來,然后交給容器來管理,知道啥意思不,不讓Spring來創建了,而是咱們手動在方法里面創建,Spring幫我管理,調用這個方法創建出來又如何,明白啥意思不,那我們可以手動創建出來,咱們再打印一個,這個叫做靜態工廠創建User,然后咱們在這里return new一個User,希望Spring調這個方法來創建User,而不是直接調空參構造,怎么配呢,這就是咱們的創建方式二,靜態工廠創建,咱們的user改成user2,class我們要配UserFactory的完整類名,class配置UserFactory的完整類名,你這樣配的話肯定不行,你要是這樣肯定是配置UserFactory對象給user2了,你還是得加上一個屬性,factory-method等于,把咱們的createUser方法名復制粘貼到這里來,把這三個屬性合在一起的話,那這個效果就出來了,意思就出來了,啥意思呢,意思就是調用UserFactory的createUser方法,創建一個user2的對象,知道啥意思不,這樣配置是調用咱們UserFactory的createUser方法,創建名為user2的對象,放入容器,那么接下來的話,咱們在測試類里面再測試一下,把這個測試方法復制一份,創建方式二,靜態工廠,那這個我們只要獲得user2就可以了,再執行一下,看一下效果 package com.learn.b_create;import com.learn.bean.User;public class UserFactory {public static User createUser() {System.out.println("靜態工廠創建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 "><!-- 創建方式1:空參構造方法 --><!-- <bean name="user" class="com.learn.bean.User"></bean> --><!-- 創建方式2:靜態工廠創建 調用UserFactory的createUser方法創建名為user2的對象,放入容器--><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 {/*** 創建方式1:空參構造*/@Testpublic void fun1() {/*** 1.創建容器*/ApplicationContext ac = new ClassPathXmlApplicationContext("com/learn/b_create/applicationContext.xml");/*** 2.向容器要"user"對象*/User u = (User)ac.getBean("user");/*** 打印user對象*/System.out.println(u);}/*** 創建方式2:靜態工廠*/@Testpublic void fun2() {/*** 1.創建容器*/ApplicationContext ac = new ClassPathXmlApplicationContext("com/learn/b_create/applicationContext.xml");/*** 2.向容器要"user"對象*/User u = (User)ac.getBean("user2");/*** 打印user對象*/System.out.println(u);} } 靜態工廠創建User User空參構造方法 com.learn.bean.User@5ed828d看看效果,看到了不,上面是咱們的第一種方式,下面是不是靜態工廠,然后也創建成功了,第二種方式,接下來第三種方式了,第三種方式也是了解,實例工廠,這也是了解,實例工廠和靜態工廠實際上沒有太大區別,只不過現在通過調用createUser2方法來創建對象,那這兩個方法不能完全一樣,我要把這個static給刪掉,看到這兩個方法的區別了,上面的靜態工廠說白了就是,方法是靜態的而已,調這個方法的話,直接這個類名就可以調,而下面這個,我要調的話,必須創建一個對象,UserFactory對象,才能執行這個方法,那現在我想調用這個方法,來獲得User對象,那我該怎么配,這就是所謂的實例工廠,那我們再來一個配置,叫做user3,實例工廠創建,咋配呢,實例工廠相對于靜態工廠要麻煩一些,你要配置兩個bean,還得再來一個bean,因為你這個工廠對象,得要創建實例,所以你得把工廠對象配進來,所以這里來一個UserFactory對象,那完整名就需要復制工廠的完整名,然后粘貼過來,然后這個就不用了,首先讓UserFactory作為一個普通的bean配置到容器當中,然后接下來,關鍵是在這,在這的話,在factory-bean這里要填寫userFactory,這樣的話配完了,配完了感受一下看看,這是不是也很好理解,createUser要改成2,首先配置一個工廠對象,然后再看這個配置,factory-bean是告訴哪一個對象是工廠對象,這個是告訴他是調用工廠對象的哪一個方法,是不是獲得你的UserFactory對象,調用UserFactory,對象的createUser2方法的創建名為user3的對象,放入容器,那這個配置完事以后,咱們再測試一下咱們的動態工廠方式,動態工廠咱們只要獲得user3就可以了,再執行一下,看看動態工廠打印 package com.learn.b_create;import com.learn.bean.User;public class UserFactory {public static User createUser() {System.out.println("靜態工廠創建User");return new User();}public User createUser2() {System.out.println("實例工廠創建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 "><!-- 創建方式1:空參構造方法 --><!-- <bean name="user" class="com.learn.bean.User"></bean> --><!-- 創建方式2:靜態工廠創建 調用UserFactory的createUser方法創建名為user2的對象,放入容器--><!-- <bean name="user2" class="com.learn.b_create.UserFactory" factory-method="createUser"></bean> --><!-- 創建方式2:實例工廠創建 --><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 {/*** 創建方式1:空參構造*/@Testpublic void fun1() {/*** 1.創建容器*/ApplicationContext ac = new ClassPathXmlApplicationContext("com/learn/b_create/applicationContext.xml");/*** 2.向容器要"user"對象*/User u = (User)ac.getBean("user");/*** 打印user對象*/System.out.println(u);}/*** 創建方式2:靜態工廠*/@Testpublic void fun2() {/*** 1.創建容器*/ApplicationContext ac = new ClassPathXmlApplicationContext("com/learn/b_create/applicationContext.xml");/*** 2.向容器要"user"對象*/User u = (User)ac.getBean("user2");/*** 打印user對象*/System.out.println(u);}/*** 創建方式2:動態工廠*/@Testpublic void fun3() {/*** 1.創建容器*/ApplicationContext ac = new ClassPathXmlApplicationContext("com/learn/b_create/applicationContext.xml");/*** 2.向容器要"user"對象*/User u = (User)ac.getBean("user3");/*** 打印user對象*/System.out.println(u);}} 這是實例工廠,這就是第三種創建方式,后面兩種看看,以后基本上不用

?

總結

以上是生活随笔為你收集整理的spring配置详解-三种对象创建方式_的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。