包類(lèi)的自動(dòng)掃描(AutoScan)

2018-12-24 21:48 更新

YMP框架初始化時(shí)將自動(dòng)掃描由autoscan_packages參數(shù)配置的包路徑下所有聲明了@Bean注解的類(lèi)文件,首先分析被加載的類(lèi)所有已實(shí)現(xiàn)接口并注冊(cè)到Bean容器中,然后執(zhí)行類(lèi)成員的依賴注入和方法攔截代理的綁定;

:相同接口的多個(gè)實(shí)現(xiàn)類(lèi)被同時(shí)注冊(cè)到Bean容器時(shí),通過(guò)接口獲取的實(shí)現(xiàn)類(lèi)將是最后被注冊(cè)到容器的那個(gè),此時(shí)只能通過(guò)實(shí)例對(duì)象類(lèi)型才能正確獲取;

  • 示例一:

    // 業(yè)務(wù)接口
    public interface IDemo {
        String sayHi();
    }
    
    // 業(yè)務(wù)接口實(shí)現(xiàn)類(lèi),單例模式
    @Bean
    public class DemoBean implements IDemo {
        public String sayHi() {
            return "Hello, YMP!";
        }
    }
    
  • 示例二:

    // 示例一中的業(yè)務(wù)接口實(shí)現(xiàn)類(lèi),非單例模式
    @Bean(singleton = false)
    public class DemoBean implements IDemo {
        public String sayHi() {
            return "Hello, YMP!";
        }
    }
    
  • 測(cè)試代碼:

    public static void main(String[] args) throws Exception {
        YMP.get().init();
        try {
            // 1. 通過(guò)接口獲取實(shí)例對(duì)象
            IDemo _demo = YMP.get().getBean(IDemo.class);
            System.out.println(_demo.sayHi());
    
            // 2. 直接獲取實(shí)例對(duì)象
            _demo = YMP.get().getBean(DemoBean.class);
            System.out.println(_demo.sayHi());
        } finally {
            YMP.get().destroy();
        }
    }
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)