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

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

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

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;
    }
}

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

<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 {
                // 獲取當(dāng)前方法名
                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詳細(xì)講解FactoryBean接口的使用的文章就介紹到這了,更多相關(guān)Spring FactoryBean內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

    Java HelloWorld原理分析_動力節(jié)點Java學(xué)院整理

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

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

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

    idea2019導(dǎo)入maven項目中的某些問題及解決方法

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

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

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

最新評論