最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring實例化bean的四種方式詳解

 更新時間:2022年06月07日 16:52:00   作者:夏志121  
這篇文章主要給大家介紹了關(guān)于Spring中實例化bean的四種方式:構(gòu)造方法、靜態(tài)工廠、實例工廠和FactoryBean,感興趣的可以了解一下

一、bean實例化——構(gòu)造方法(常用)

bean本質(zhì)上就是對象,創(chuàng)建bean使用構(gòu)造方法完成

BookDao接口:

public interface BookDao {
    public void save();
}

BookDaoImpl實現(xiàn)類,利用構(gòu)造方式提供可訪問的構(gòu)造方法,輸出相應字符串:

import com.itheima.dao.BookDao;
 
public class BookDaoImpl implements BookDao {
 
    public BookDaoImpl() {
        System.out.println("book dao constructor is running ....");
    }
 
    public void save() {
        System.out.println("book dao save ...");
    }
 
}

AppForinstanceBook:

import com.itheima.dao.BookDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class AppForInstanceBook {
    public static void main(String[] args) {
 
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
 
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
 
        bookDao.save();
 
    }
}

applictionContext.xml配置:

<!--方式一:構(gòu)造方法實例化bean-->
    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>

執(zhí)行結(jié)果:

 無參構(gòu)造方法如果不存在,將拋出異常BeanCreationException

二、bean實例化——靜態(tài)工廠(了解)

OrderDao接口:

public interface OrderDao {
    public void save();
}

OrderDaoImpl實現(xiàn)類:

import com.itheima.dao.OrderDao;
 
public class OrderDaoImpl implements OrderDao {
 
    public void save() {
        System.out.println("order dao save ...");
    }
}

OrderDaoFactory靜態(tài)工廠創(chuàng)建對象:

import com.itheima.dao.OrderDao;
import com.itheima.dao.impl.OrderDaoImpl;
//靜態(tài)工廠創(chuàng)建對象
public class OrderDaoFactory {
    public static OrderDao getOrderDao(){
        System.out.println("factory setup....");
        return new OrderDaoImpl();
    }
}

AppForinstanceOrder:

import com.itheima.dao.OrderDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class AppForInstanceOrder {
    public static void main(String[] args) {
 
 
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
 
        OrderDao orderDao = (OrderDao) ctx.getBean("orderDao");
 
        orderDao.save();
 
    }
}

 applictionContext.xml配置:

  <!--方式二:使用靜態(tài)工廠實例化bean-->
    <bean id="orderDao" class="com.itheima.factory.OrderDaoFactory" factory-method="getOrderDao"/>

執(zhí)行結(jié)果:

這種方式是為了兼容早期的遺留系統(tǒng)使用,了解即可。

三、bean實例化——實例工廠(了解)

UserDao接口:

public interface UserDao {
    public void save();
}

UserDaoImpl實現(xiàn)類:

import com.itheima.dao.UserDao;
 
public class UserDaoImpl implements UserDao {
 
    public void save() {
        System.out.println("user dao save ...");
    }
}

UserDaoFactory實例工廠創(chuàng)建對象:

import com.itheima.dao.UserDao;
import com.itheima.dao.impl.UserDaoImpl;
//實例工廠創(chuàng)建對象
public class UserDaoFactory {
    public UserDao getUserDao(){
        return new UserDaoImpl();
    }
}

AppForInstanceUser:

import com.itheima.dao.UserDao;
import com.itheima.factory.UserDaoFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class AppForInstanceUser {
    public static void main(String[] args) {
        //創(chuàng)建實例工廠對象
        UserDaoFactory userDaoFactory = new UserDaoFactory();
        //通過實例工廠對象創(chuàng)建對象
        UserDao userDao = userDaoFactory.getUserDao();
        userDao.save();
 
    }
}

因為不是靜態(tài)方法,必須用工廠對象對象調(diào)用。

也可用Spring方法,不過要在xml文件中進行修改。

AppForInstanceUser:

import com.itheima.dao.UserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class AppForInstanceUser {
    public static void main(String[] args) {
 
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
 
        UserDao userDao = (UserDao) ctx.getBean("userDao");
 
        userDao.save();
 
    }
}

applictionContext.xml配置:

userFactory配合使用的,實際無意義

factory-method方法名不固定,每次都需要配置

<!--方式三:使用實例工廠實例化bean-->
   <bean id="userFactory" class="com.itheima.factory.UserDaoFactory"/>
    
    <bean id="userDao" factory-method="getUserDao" factory-bean="userFactory"/>

執(zhí)行結(jié)果:

四、bean實例化——FactoryBean(實用)

UserDao接口和UserDaoImpl實現(xiàn)類和實例化三一樣。

UserDaoFactoryBean,代替了原始實例化工廠中創(chuàng)建對象的方法:

import com.itheima.dao.UserDao;
import com.itheima.dao.impl.UserDaoImpl;
import org.springframework.beans.factory.FactoryBean;
//FactoryBean創(chuàng)建對象
public class UserDaoFactoryBean implements FactoryBean<UserDao> {
    //代替原始實例工廠中創(chuàng)建對象的方法
    public UserDao getObject() throws Exception {
        return new UserDaoImpl();
    }
 
    public Class<?> getObjectType() {
        return UserDao.class;
    }
}

AppForInstanceUser:

import com.itheima.dao.UserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class AppForInstanceUser {
    public static void main(String[] args) {
 
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
 
        UserDao userDao = (UserDao) ctx.getBean("userDao");
 
        userDao.save();
 
    }
}

applictionContext.xml配置:

    <!--方式四:使用FactoryBean實例化bean-->
    <bean id="userDao" class="com.itheima.factory.UserDaoFactoryBean"/>

執(zhí)行結(jié)果:

對象默認單例,需要改非單例時

在UserDaoFactoryBean重寫isSingleton方法,true為單例模式,false為非單例模式

通常為單例,這個方法通常不寫

    public boolean isSingleton() {
        return true;
    }

到此這篇關(guān)于Spring實例化bean的四種方式詳解的文章就介紹到這了,更多相關(guān)Spring實例化bean內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 教你Spring如何使用三級緩存解決循環(huán)依賴

    教你Spring如何使用三級緩存解決循環(huán)依賴

    這篇文章主要介紹了Spring使用三級緩存解決循環(huán)依賴的過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • Spring boot如何配置請求的入?yún)⒑统鰠son數(shù)據(jù)格式

    Spring boot如何配置請求的入?yún)⒑统鰠son數(shù)據(jù)格式

    這篇文章主要介紹了spring boot如何配置請求的入?yún)⒑统鰠son數(shù)據(jù)格式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • java 設計模式之單例的實例詳解

    java 設計模式之單例的實例詳解

    這篇文章主要介紹了java 設計模式之單例的實例詳解的相關(guān)資料, 希望通過本文能幫助到大家,讓大家徹底理解掌握單例模式,需要的朋友可以參考下
    2017-09-09
  • MyBatisPlus項目的創(chuàng)建和使用

    MyBatisPlus項目的創(chuàng)建和使用

    本文介紹了MyBatis-Plus的基本使用方法,包括項目的創(chuàng)建和配置、增刪查改操作、日志打印以及條件構(gòu)造器的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-11-11
  • SpringBoot+Vue中的Token續(xù)簽機制

    SpringBoot+Vue中的Token續(xù)簽機制

    本文主要介紹了SpringBoot+Vue中的Token續(xù)簽機制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-06-06
  • Springboot使用kafka的兩種方式

    Springboot使用kafka的兩種方式

    在公司用kafka比較多,今天整理下Springboot使用kafka的兩種方式,Kafka作為一個消息發(fā)布訂閱系統(tǒng),就包括消息生成者和消息消費者,文中通過代碼示例介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2023-11-11
  • springboot @ConfigurationProperties和@PropertySource的區(qū)別

    springboot @ConfigurationProperties和@PropertySource的區(qū)別

    這篇文章主要介紹了springboot @ConfigurationProperties和@PropertySource的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring Cloud 配置中心內(nèi)容加密的配置方法

    Spring Cloud 配置中心內(nèi)容加密的配置方法

    這篇文章主要介紹了Spring Cloud 配置中心內(nèi)容加密的配置方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • 詳解Java程序讀取properties配置文件的方法

    詳解Java程序讀取properties配置文件的方法

    這篇文章主要介紹了Java讀取properties配置文件的方法講解,properties可以被看作是Java世界的ini,Java中有Properties可以操作它,需要的朋友可以參考下
    2016-04-04
  • SpringBoot中必須掌握的常用注解小結(jié)

    SpringBoot中必須掌握的常用注解小結(jié)

    Spring?Boot?提供了大量的注解,用于簡化配置和加速程序開發(fā),這篇文章主要來和大家Spring?Boot中的常用注解的具體使用,希望對大家有所幫助
    2024-11-11

最新評論

荣成市| 萨迦县| 科技| 平罗县| 贡觉县| 玉门市| 朝阳县| 长兴县| 兰西县| 都昌县| 微博| 桃江县| 永兴县| 开鲁县| 秦安县| 新绛县| 白沙| 广安市| 贵港市| 平顶山市| 鸡西市| 卢龙县| 沐川县| 大同市| 仪陇县| 措勤县| 青冈县| 武乡县| 南部县| 合阳县| 广德县| 绥滨县| 靖安县| 文登市| 长治县| 宁陕县| 汶上县| 绥芬河市| 汕尾市| 阳高县| 湖北省|