国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

spring中bean實(shí)例化的三種方式 -- Spring入門(二)

這篇具有很好參考價(jià)值的文章主要介紹了spring中bean實(shí)例化的三種方式 -- Spring入門(二)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


前言

為了鞏固所學(xué)的知識(shí),作者嘗試著開始發(fā)布一些學(xué)習(xí)筆記類的博客,方便日后回顧。當(dāng)然,如果能幫到一些萌新進(jìn)行新技術(shù)的學(xué)習(xí)那也是極好的。作者菜菜一枚,文章中如果有記錄錯(cuò)誤,歡迎讀者朋友們批評(píng)指正。
(博客的參考源碼以及可以在我主頁(yè)的資源里找到,如果在學(xué)習(xí)的過(guò)程中有什么疑問(wèn)歡迎大家在評(píng)論區(qū)向我提出)

發(fā)現(xiàn)寶藏

前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家?!緦毑厝肟凇?。

1.Bean實(shí)例化簡(jiǎn)介

  1. 面向?qū)ο蟮某绦蛑?,想要使用某個(gè)對(duì)象,就需要先實(shí)例化對(duì)象。同樣,在Spring中,要想使用容器中的Bean,也需要實(shí)例化Bean。
  2. 實(shí)例化Bean的方式有三種,分別是構(gòu)造器實(shí)例化、靜態(tài)工廠實(shí)例化和實(shí)例工廠實(shí)例化(其中最常用的是構(gòu)造器實(shí)例化)。接下來(lái)演示一下三種實(shí)例化方法

2.bean的實(shí)例化 – 構(gòu)造方法

1. 創(chuàng)建新的maven模塊respr_newbean,并在pom.xml添加spring的坐標(biāo)

spring中bean實(shí)例化的三種方式 -- Spring入門(二),Spring入門,spring,java,后端

 <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.22</version>
            <scope>compile</scope>
        </dependency>

2. 創(chuàng)建核心配置文件applicationContext.xml文件、dao接口及其實(shí)現(xiàn)類以及相關(guān)的類(先寫標(biāo)記部分)

spring中bean實(shí)例化的三種方式 -- Spring入門(二),Spring入門,spring,java,后端

3. 編寫dao接口及其實(shí)現(xiàn)類

  • BookDao接口
public interface BookDao {
    public void save();
}

  • BookDaoImpl實(shí)現(xiàn)類
public class BookDaoImpl implements BookDao {
    //無(wú)參構(gòu)造
    public BookDaoImpl() {
        System.out.println("book dao constructor is running ....");
    }

    public void save() {
        System.out.println("book dao save ...");
    }

}

  • 進(jìn)行測(cè)試的類 AppForInstanceBook
public class AppForInstanceBook {
    public static void main(String[] args) {

        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        BookDao bookDao = (BookDao) ctx.getBean("bookDao");

        bookDao.save();

    }
}

  • applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

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

</beans>

  • AppForInstanceBook運(yùn)行結(jié)果

spring中bean實(shí)例化的三種方式 -- Spring入門(二),Spring入門,spring,java,后端

  • 結(jié)論

spring構(gòu)造方法實(shí)例化bean使用了無(wú)參構(gòu)造器,可以省略無(wú)參構(gòu)造器的書寫。實(shí)例化bean就是用構(gòu)造方法來(lái)實(shí)例化對(duì)象。

3.bean的實(shí)例化 – 靜態(tài)工廠實(shí)例化

1. 創(chuàng)建dao接口及其實(shí)現(xiàn)類以及相關(guān)的類(先寫標(biāo)記部分)

spring中bean實(shí)例化的三種方式 -- Spring入門(二),Spring入門,spring,java,后端

2. 編寫dao接口及其實(shí)現(xiàn)類以及相關(guān)的類

  • OrderDao接口
package org.example.dao;

public interface OrderDao {
    public void save();
}

  • OrderDaoImpl實(shí)現(xiàn)類
在這里插入代碼片package org.example.dao.impl;

import org.example.dao.OrderDao;

public class OrderDaoImpl implements OrderDao {

    public void save() {
        System.out.println("order dao save ...");
    }
}

  • 工廠類OrderDaoFactory(靜態(tài)工廠類代理生成對(duì)象)
package org.example.factory;

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

  • AppForInstanceOrder模擬測(cè)試類編寫(純JAVA開發(fā),此處還沒(méi)有Spring)
public class AppForInstanceOrder {
    public static void main(String[] args) {
        //通過(guò)靜態(tài)工廠創(chuàng)建對(duì)象
        OrderDao orderDao = OrderDaoFactory.getOrderDao();
        orderDao.save();

    }
}
  • 模擬測(cè)試類的運(yùn)行結(jié)果

spring中bean實(shí)例化的三種方式 -- Spring入門(二),Spring入門,spring,java,后端

  • 簡(jiǎn)要分析

將 OrderDaoImpl 創(chuàng)建對(duì)象的 工作交給 靜態(tài)工廠 OrderDaoFactory 類來(lái)完成,如果用spring代理這種工廠模式的開發(fā),寫法如下

  • spring 代理靜態(tài)工廠實(shí)例化對(duì)象
public class AppForInstanceOrder {
    public static void main(String[] args) {
        //通過(guò)靜態(tài)工廠創(chuàng)建對(duì)象
//        OrderDao orderDao = OrderDaoFactory.getOrderDao();
//        orderDao.save();

//      spring代理靜態(tài)工廠實(shí)例化對(duì)象
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        OrderDao orderDao = (OrderDao) ctx.getBean("orderDao");

        orderDao.save();

    }
}

  • applicationContext.xml文件配置靜態(tài)工廠 OrderDaoFactory bean (注意factory-method屬性)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

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


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

</beans>

  • 運(yùn)行結(jié)果

spring中bean實(shí)例化的三種方式 -- Spring入門(二),Spring入門,spring,java,后端

4.bean實(shí)例化 – 實(shí)例工廠和FactoryBean

1. 創(chuàng)建dao接口及其實(shí)現(xiàn)類以及相關(guān)的類(標(biāo)記部分)

spring中bean實(shí)例化的三種方式 -- Spring入門(二),Spring入門,spring,java,后端

2. 編寫dao接口及其實(shí)現(xiàn)類以及相關(guān)的類

  • UserDao接口
public interface UserDao {
    public void save();
}

  • UserDaoImpl實(shí)現(xiàn)類
public class UserDaoImpl implements UserDao {

    public void save() {
        System.out.println("user dao save ...");
    }
}

  • UserDaoFactoryBean實(shí)例工廠類
//實(shí)例工廠創(chuàng)建對(duì)象
public class UserDaoFactory {
    public UserDao getUserDao(){
        return new UserDaoImpl();
    }
}


  • AppForInstanceUser模擬測(cè)試類(純JAVA開發(fā))
public class AppForInstanceUser {
    public static void main(String[] args) {
//        //創(chuàng)建實(shí)例工廠對(duì)象
        UserDaoFactory userDaoFactory = new UserDaoFactory();
//        //通過(guò)實(shí)例工廠對(duì)象創(chuàng)建對(duì)象
        UserDao userDao = userDaoFactory.getUserDao();
        userDao.save();

    }
}

3. 運(yùn)行結(jié)果

spring中bean實(shí)例化的三種方式 -- Spring入門(二),Spring入門,spring,java,后端

4. 簡(jiǎn)要分析

此時(shí)與靜態(tài)工廠的區(qū)別是模擬測(cè)試類中多了創(chuàng)建工廠對(duì)象的步驟

  • spring代理下的實(shí)例工廠bean實(shí)例化模擬測(cè)試類
public class AppForInstanceUser {
    public static void main(String[] args) {
//        //創(chuàng)建實(shí)例工廠對(duì)象
//        UserDaoFactory userDaoFactory = new UserDaoFactory();
//        //通過(guò)實(shí)例工廠對(duì)象創(chuàng)建對(duì)象
//        UserDao userDao = userDaoFactory.getUserDao();
//        userDao.save();


        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        UserDao userDao = (UserDao) ctx.getBean("userDao");

        userDao.save();
        
    }
}

5. applicationContext.xml(分辨方式二和方式三的寫法)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

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


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

    <!--方式三:使用實(shí)例工廠實(shí)例化bean-->
        <bean id="userFactory" class="org.example.factory.UserDaoFactory"/>

        <bean id="userDao" factory-method="getUserDao" factory-bean="userFactory"/>

</beans>

6. 模擬測(cè)試類運(yùn)行結(jié)果

spring中bean實(shí)例化的三種方式 -- Spring入門(二),Spring入門,spring,java,后端

7. spring代理實(shí)例工廠bean實(shí)例化簡(jiǎn)要分析 --> 改進(jìn)為BeanFactory bean實(shí)例化

spring中bean實(shí)例化的三種方式 -- Spring入門(二),Spring入門,spring,java,后端

8. 創(chuàng)建并編寫B(tài)eanFactory工廠類UserDaoFactoryBean

//FactoryBean創(chuàng)建對(duì)象
//實(shí)現(xiàn)接口,創(chuàng)建什么對(duì)象寫什么泛型
public class UserDaoFactoryBean implements FactoryBean<UserDao> {
    //實(shí)現(xiàn)抽象方法

    //代替原始實(shí)例工廠中創(chuàng)建對(duì)象的方法,以后方法名不用指定,就用getObject
    public UserDao getObject() throws Exception {
        return new UserDaoImpl();
    }

    //配置的類是什么類型
    public Class<?> getObjectType() {
        return UserDao.class;
    }

}

9. 配置applicationContext.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

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


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

    <!--方式三:使用實(shí)例工廠實(shí)例化bean-->
<!--        <bean id="userFactory" class="org.example.factory.UserDaoFactory"/>-->

<!--        <bean id="userDao" factory-method="getUserDao" factory-bean="userFactory"/>-->

    <!--方式四:使用FactoryBean實(shí)例化bean-->
    <bean id="userDao" class="org.example.factory.UserDaoFactoryBean"/>

</beans>

10. 模擬測(cè)試類運(yùn)行結(jié)果

spring中bean實(shí)例化的三種方式 -- Spring入門(二),Spring入門,spring,java,后端

5.三種bean實(shí)例化方式的區(qū)別

1. 構(gòu)造器實(shí)例化

通過(guò)無(wú)參構(gòu)造的方法實(shí)例化Bean,其實(shí)質(zhì)是將Bean對(duì)應(yīng)的類交給Spring自帶的工廠(BeanFactory)管理,由Spring自帶的工廠模式幫我們創(chuàng)建和維護(hù)這個(gè)類

2. 靜態(tài)工廠方式實(shí)例化

  1. 通過(guò)靜態(tài)工廠創(chuàng)建并返回Bean。其實(shí)質(zhì)是將Bean對(duì)應(yīng)的類交給我們自己的靜態(tài)工廠管理。Spring只是幫我們調(diào)用了靜態(tài)工廠創(chuàng)建實(shí)例的方法。
  2. 運(yùn)用:很多時(shí)候我們?cè)谑褂玫谌絡(luò)ar包提供給我們的類時(shí),由于這個(gè)類沒(méi)有構(gòu)造方法,是通過(guò)第三方包提供的靜態(tài)工廠創(chuàng)建的,如果我們想把第三方j(luò)ar包里面的這個(gè)類交由Spring來(lái)管理的話,就可以使用Spring提供的靜態(tài)工廠創(chuàng)建實(shí)例的配置。

3. 實(shí)例工廠方式實(shí)例化

  1. 通過(guò)實(shí)例工廠創(chuàng)建并返回Bean,其實(shí)質(zhì)就是把創(chuàng)建實(shí)例的工廠類和調(diào)用工廠類的方法創(chuàng)建實(shí)例的方法的過(guò)程也交由Spring管理,創(chuàng)建實(shí)例的這個(gè)過(guò)程也是由我們自己配置的實(shí)例工廠內(nèi)部實(shí)現(xiàn)的。
  2. 運(yùn)用:如Spring整合Hibernate就是通過(guò)這種方式實(shí)現(xiàn)的。但對(duì)于沒(méi)有與Spring整合過(guò)的工廠類,我們一般都是自己用代碼來(lái)管理的。

4. 小結(jié)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-599259.html

  1. 三種方法最常用的就是構(gòu)造器實(shí)例化,
  2. 靜態(tài)工廠類與非靜態(tài)工廠類的區(qū)別是,前者不需要?jiǎng)?chuàng)建對(duì)象,直接可以調(diào)用靜態(tài)方法創(chuàng)建bean;后者則要先創(chuàng)建對(duì)象,然后再通過(guò)對(duì)象調(diào)用其方法創(chuàng)建bean

總結(jié)

到了這里,關(guān)于spring中bean實(shí)例化的三種方式 -- Spring入門(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring 框架入門介紹及IoC的三種注入方式

    Spring 框架入門介紹及IoC的三種注入方式

    目錄 一、Spring 簡(jiǎn)介 1. 簡(jiǎn)介 2. spring 的核心模塊 ? ?二、IoC 的概念 2.1 IoC 詳解 2.2 IoC的好處 2.3 談?wù)勀銓?duì)IoC的理解 三、IoC的三種注入方式 3.1 構(gòu)造方法注入 3.2?setter方法注入 3.3 接口注入(自動(dòng)分配) 3.4 spring上下文與tomcat整合 3.5 總結(jié) ????????Spring框架 是?Java?平臺(tái)的一個(gè)

    2024年02月12日
    瀏覽(33)
  • Spring的三種異常處理方式

    Spring的三種異常處理方式

    ????????異常分為編譯時(shí)異常和運(yùn)行時(shí)異常,編譯時(shí)異常我們 try-cache 進(jìn)行捕獲,捕獲后自行處理,而運(yùn)行時(shí)異常是不 可預(yù)期的,就需要規(guī)范編碼來(lái)避免,在SpringMVC 中,不管是編譯異常還是運(yùn)行時(shí)異常,都可以最終由 SpringMVC提供的異常處理器進(jìn)行統(tǒng)一處理,這樣就避免了

    2024年02月12日
    瀏覽(23)
  • Spring常見(jiàn)的三種注入方式

    基于構(gòu)造器的依賴注入 基于Setter的依賴注入 基于字段變量的依賴注入 (當(dāng)然還有其它不常用的注入方式:靜態(tài)工廠方法注入、動(dòng)態(tài)工廠方法注入) 2.1 構(gòu)造器注入 2.2 Setter注入 2.3 字段變量注入 字段變量注入是基于注解實(shí)現(xiàn)的,即@Resource或者@Autowired, @Autowired :表示自動(dòng)注

    2024年02月09日
    瀏覽(29)
  • Spring Boot 禁用 Swagger 的三種方式

    Spring Boot 禁用 Swagger 的三種方式

    禁用方法1: ====== 使用注解 @Value() 推薦使用 package com.dc.config; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; impo

    2024年04月22日
    瀏覽(35)
  • spring boot請(qǐng)求http接口的三種方式

    HttpURLConnection 是 Java 中的 HTTP 客戶端實(shí)現(xiàn),,適用于簡(jiǎn)單的請(qǐng)求需要。 HttpURLConnection主要工作內(nèi)容:打開socket連接,封裝http請(qǐng)求報(bào)文,解析請(qǐng)求報(bào)文。 OkHttp 是一個(gè)第三方的 HTTP 客戶端庫(kù),它比 Java 標(biāo)準(zhǔn)的 HttpURLConnection 更高效、更實(shí)用。主要特點(diǎn)包括: 比 HttpURLConnection 快得多

    2024年02月14日
    瀏覽(28)
  • Spring Boot獲取resources目錄下的文件的三種方式

    在Spring Boot項(xiàng)目中,經(jīng)常需要獲取 resources 目錄下的文件。這些文件可以包括配置文件、模板文件、靜態(tài)資源等。本文將介紹三種常用的方法來(lái)獲取 resources 目錄下的文件。 ResourceLoader 接口是Spring框架提供的用于加載各種資源的接口,包括 classpath 下的資源。在Spring Boot中,可

    2024年02月16日
    瀏覽(44)
  • 【spring Cloud】微服務(wù)通信的三種方式RestTemplate、Feign遠(yuǎn)程調(diào)用與Dubbo的使用

    目錄 一、通過(guò)RestTemplate調(diào)用微服務(wù) 二、通過(guò)Feign遠(yuǎn)程調(diào)用 三、Dubbo? 分布式中的遠(yuǎn)程調(diào)用大概分為兩種 RESTful接口? REST,即Representational State Transfer的縮寫,如果一個(gè)架構(gòu)符合REST原則,就稱它為RESTful架構(gòu)。 每一個(gè)URI代表一種資源; 客戶端和服務(wù)器之間,傳遞這種資源的某種

    2024年04月11日
    瀏覽(20)
  • Springboot依賴注入Bean的三種方式,final+構(gòu)造器注入Bean

    @Autowired注解的一大使用場(chǎng)景就是Field Injection。 通過(guò)Java的反射機(jī)制實(shí)現(xiàn),所以private的成員也可以被注入具體的對(duì)象 優(yōu)點(diǎn) 代碼少,簡(jiǎn)潔明了。 新增依賴十分方便,不需要修改原有代碼 缺點(diǎn) 容易出現(xiàn)空指針異常。Field 注入允許構(gòu)建對(duì)象實(shí)例時(shí)依賴的對(duì)象為空,導(dǎo)致空指針異常

    2024年02月02日
    瀏覽(22)
  • 【Spring框架】spring對(duì)象注入的三種方法

    【Spring框架】spring對(duì)象注入的三種方法

    屬性注?是使? @Autowired 實(shí)現(xiàn)的,將 Service 類注?到 Controller 類中。 依賴注入 VS 依賴查找 -依賴查找依賴 Bean -@Autowired 依賴注入流程:首先先根據(jù)getType(從容器中)獲取對(duì)象,如果只獲取一個(gè),那么直接將此對(duì)象注入到當(dāng)前屬性上;如果獲取到多個(gè)對(duì)象,才會(huì)使用getName(根據(jù)名

    2024年02月15日
    瀏覽(25)
  • 【Spring】Bean的實(shí)例化

    ? ? ? ? 在容器中的Bean要實(shí)例化為對(duì)象有三種方式 ? ? ? ? 1、構(gòu)造方法 ? ? ? ? 2、靜態(tài)工廠 ? ? ? ? 3、實(shí)例工廠 ? ? ? ? 4、實(shí)現(xiàn)工廠接口 ? ? ? ? 構(gòu)造方法實(shí)例化Bean即是直接通過(guò)構(gòu)造方法創(chuàng)建對(duì)象 ? ? ? ? 當(dāng)不存在無(wú)參構(gòu)造是會(huì)拋出異常 ? ? ? ? 靜態(tài)工廠類實(shí)現(xiàn) ?

    2024年02月12日
    瀏覽(28)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包