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

Spring詳細講解FactoryBean接口的使用

 更新時間:2022年06月09日 09:29:43   作者:望天邊星宿  
這篇文章主要為大家介紹了Spring容器FactoryBean工廠實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

FactoryBean是一個接口,創(chuàng)建對象的過程使用了工廠模式。

一、基本使用

讓Spring容器通過FactoryBean來實現(xiàn)對象的創(chuàng)建。

?? 創(chuàng)建FactoryBean案例

public class SimpleFactoryBean implements FactoryBean<Cat> {
    @Override
    public Cat getObject() throws Exception {
        // 創(chuàng)建Cat對象并且返回
        return new Cat("Tom");
    }
    @Override
    public Class<?> getObjectType() {
        return Cat.class;
    }
}

其實這里就相當于在配置文件里創(chuàng)建了一個bean標簽。

<bean class="com.text.registrar.SimpleFactoryBean" id="cat"></bean>

?? 需要加載的類

public class Cat {
    String name;
    public Cat(String name) {
        this.name = name;
    }
}

?? 啟動類里面創(chuàng)建方法加載Bean

@SpringBootApplication
public class SpringbootApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(SpringbootApplication.class, args);
    }
    // 等價于配置文件配置
    @Bean
    public SimpleFactoryBean catFactoryBean() {
        return new SimpleFactoryBean();
    }
}

二、高級使用

讓Spring容器通過FactoryBean創(chuàng)建指定接口的動態(tài)代理對象。

創(chuàng)建FactoryBean,可以生成任意接口的動態(tài)代理對象

?? 創(chuàng)建一個接口

public interface MyUserMapper {
    void select();
}

?? 創(chuàng)建一個FactoryBean實現(xiàn)類

可以通過傳入接口的全類名,創(chuàng)建動態(tài)代理對象。

public class MapperFactoryBean implements FactoryBean {
    /**
     * 用于保存接口的全類名
     */
    private String className;
    public MapperFactoryBean(String className) {
        this.className = className;
    }
    @Override
    public Object getObject() throws Exception {
        Class<?> interfaceClass = Class.forName(className);
        // 生成動態(tài)代理對象返回
        Object proxyInstance = Proxy.newProxyInstance(MapperFactoryBean.class.getClassLoader(), new Class[]{interfaceClass}, new InvocationHandler() {
            @Override
            public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                // 獲取當前方法名
                System.out.println(method.getName());
                if ("select".equals((method.getName()))) {
                    System.out.println(className + "動態(tài)代理對象的select方法被執(zhí)行了?。?);
                }
                return null;
            }
        });
        return proxyInstance;
    }
    @Override
    public Class<?> getObjectType() {
        try {
            Class<?> interfaceCLass = Class.forName(className);
            return interfaceCLass;
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
}

?? 啟動類里面創(chuàng)建方法加載Bean

@SpringBootApplication
public class SpringbootApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(SpringbootApplication.class, args);
        run.getBean(MyUserMapper.class);
    }
    // 等價于配置文件配置
    @Bean
    public MapperFactoryBean mapperFactoryBean() {
        return new MapperFactoryBean("com.test.registrar.MyUserMapper");
    }
}

到此這篇關(guān)于Spring詳細講解FactoryBean接口的使用的文章就介紹到這了,更多相關(guān)Spring FactoryBean內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Feign使用@PathVariable方式

    Feign使用@PathVariable方式

    Feign使用@PathVariable注解在URL中插入變量,類似于SpringMVC的用法,通過示例展示了如何使用該注解,并在實際調(diào)用中替換占位符
    2024-11-11
  • Java 線程同步詳解

    Java 線程同步詳解

    這篇文章主要給大家詳細介紹的是Java 線程同步的相關(guān)問題及代碼示例,有需要的小伙伴可以參考下
    2016-03-03
  • Java對象不使用時賦值null的意義詳解

    Java對象不使用時賦值null的意義詳解

    這篇文章主要介紹了java對象不再使用時賦值null的意義,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • 詳解SpringBoot Mybatis如何對接多數(shù)據(jù)源

    詳解SpringBoot Mybatis如何對接多數(shù)據(jù)源

    這篇文章主要為大家介紹了SpringBoot Mybatis如何對接多數(shù)據(jù)源實現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • java日期工具類實例分享

    java日期工具類實例分享

    本文介紹一個java日期工具類,功能有英文簡寫、英文全稱、精確到毫秒的完整時間、中文簡寫、中文全稱等方法
    2014-01-01
  • 詳解Java類動態(tài)加載和熱替換

    詳解Java類動態(tài)加載和熱替換

    本文主要介紹類加載器、自定義類加載器及類的加載和卸載等內(nèi)容,并舉例介紹了Java類的熱替換。
    2021-05-05
  • Mybatis動態(tài)SQL foreach標簽用法實例

    Mybatis動態(tài)SQL foreach標簽用法實例

    這篇文章主要介紹了Mybatis動態(tài)SQL foreach標簽用法實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • 詳解關(guān)于SpringBoot的外部化配置使用記錄

    詳解關(guān)于SpringBoot的外部化配置使用記錄

    這篇文章主要介紹了詳解關(guān)于SpringBoot的外部化配置使用記錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • 基于Java利用static實現(xiàn)單例模式

    基于Java利用static實現(xiàn)單例模式

    這篇文章主要介紹了基于Java利用static實現(xiàn)單例模式,當在多個線程同時觸發(fā)類的初始化過程的時候static不會被多次執(zhí)行,下面我們一起進入文章看看具體要的原因
    2022-01-01
  • java線程之用Thread類創(chuàng)建線程的方法

    java線程之用Thread類創(chuàng)建線程的方法

    本篇文章介紹了,Thread類創(chuàng)建線程的方法。需要的朋友參考下
    2013-05-05

最新評論

新巴尔虎右旗| 阜康市| 茶陵县| 普兰店市| 桃源县| 苍南县| 安远县| 眉山市| 陆河县| 卫辉市| 浦北县| 永顺县| 林甸县| 巴彦淖尔市| 洪湖市| 高邮市| 鄂尔多斯市| 沈阳市| 青阳县| 阿拉善盟| 溧阳市| 卫辉市| 谷城县| 邛崃市| 台前县| 佛坪县| 成武县| 朔州市| 胶南市| 水富县| 河间市| 南阳市| 宁远县| 黄梅县| 随州市| 郸城县| 濮阳县| 斗六市| 长白| 沙雅县| 沧源|