欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring詳細(xì)講解FactoryBean接口的使用

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

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

一、基本使用

讓Spring容器通過(guò)FactoryBean來(lái)實(shí)現(xiàn)對(duì)象的創(chuàng)建。

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

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

其實(shí)這里就相當(dāng)于在配置文件里創(chuàng)建了一個(gè)bean標(biāo)簽。

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

?? 需要加載的類

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

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

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

二、高級(jí)使用

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

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

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

public interface MyUserMapper {
    void select();
}

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

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

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);
        // 生成動(dòng)態(tài)代理對(duì)象返回
        Object proxyInstance = Proxy.newProxyInstance(MapperFactoryBean.class.getClassLoader(), new Class[]{interfaceClass}, new InvocationHandler() {
            @Override
            public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                // 獲取當(dāng)前方法名
                System.out.println(method.getName());
                if ("select".equals((method.getName()))) {
                    System.out.println(className + "動(dòng)態(tài)代理對(duì)象的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;
    }
}

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

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

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

相關(guān)文章

  • rabbitmq結(jié)合spring實(shí)現(xiàn)消息隊(duì)列優(yōu)先級(jí)的方法

    rabbitmq結(jié)合spring實(shí)現(xiàn)消息隊(duì)列優(yōu)先級(jí)的方法

    本篇文章主要介紹了rabbitmq結(jié)合spring實(shí)現(xiàn)消息隊(duì)列優(yōu)先級(jí)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • java實(shí)現(xiàn)飛機(jī)大戰(zhàn)案例詳解

    java實(shí)現(xiàn)飛機(jī)大戰(zhàn)案例詳解

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)飛機(jī)大戰(zhàn)案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • SpringBoot @Autowired注解注入規(guī)則介紹

    SpringBoot @Autowired注解注入規(guī)則介紹

    這篇文章主要介紹了SpringBoot @Autowired注解注入規(guī)則介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2021-11-11
  • 詳解Java多線程與并發(fā)

    詳解Java多線程與并發(fā)

    多線程是一個(gè)進(jìn)程在執(zhí)行過(guò)程中產(chǎn)生多個(gè)更小的程序單元,這些更小的單元稱為線程,這些線程可以同時(shí)存在,同時(shí)運(yùn)行,一個(gè)進(jìn)程可能包含多個(gè)同時(shí)執(zhí)行的線程。多線程是實(shí)現(xiàn)并發(fā)機(jī)制的一種有效手段。進(jìn)程和線程一樣,都是實(shí)現(xiàn)并發(fā)的一個(gè)基本單位。
    2021-06-06
  • @RequestBody注解的原理及使用技巧分享

    @RequestBody注解的原理及使用技巧分享

    這篇文章主要介紹了@RequestBody注解的原理及使用技巧分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Java深度復(fù)制功能與用法實(shí)例分析

    Java深度復(fù)制功能與用法實(shí)例分析

    這篇文章主要介紹了Java深度復(fù)制功能與用法,簡(jiǎn)單講述了深度復(fù)制的概念、功能并結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)深度復(fù)制的具體操作技巧,需要的朋友可以參考下
    2018-01-01
  • Java HelloWorld原理分析_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java HelloWorld原理分析_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    我們初學(xué)java的第一個(gè)程序是"hello world"。下面通過(guò)實(shí)例代碼給大家講解Java HelloWorld原理分析,感興趣的朋友一起學(xué)習(xí)吧
    2017-05-05
  • Java使用Condition控制線程通信的方法實(shí)例詳解

    Java使用Condition控制線程通信的方法實(shí)例詳解

    這篇文章主要介紹了Java使用Condition控制線程通信的方法,結(jié)合實(shí)例形式分析了使用Condition類同步檢測(cè)控制線程通信的相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-09
  • idea2019導(dǎo)入maven項(xiàng)目中的某些問(wèn)題及解決方法

    idea2019導(dǎo)入maven項(xiàng)目中的某些問(wèn)題及解決方法

    這篇文章主要介紹了idea2019導(dǎo)入maven項(xiàng)目中的某些問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java設(shè)計(jì)模式之建造者模式(Builder模式)介紹

    Java設(shè)計(jì)模式之建造者模式(Builder模式)介紹

    這篇文章主要介紹了Java設(shè)計(jì)模式之建造者模式(Builder模式)介紹,本文講解了為何使用建造者模式、如何使用建造者模式、Builder模式的應(yīng)用等內(nèi)容,需要的朋友可以參考下
    2015-03-03

最新評(píng)論