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

Spring Boot使用注解重構(gòu)IoC容器的實(shí)戰(zhàn)示例

 更新時(shí)間:2025年09月05日 15:03:07   作者:孤狼程序員  
這篇文章給大家介紹Spring Boot使用注解重構(gòu)IoC容器的實(shí)戰(zhàn)示例,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

1.1 IoC容器:Spring的智能管家

想象一下,你是一家大公司的CEO,而Spring IoC容器就是你的私人智能管家。傳統(tǒng)開發(fā)中,你需要自己記住每個(gè)員工的聯(lián)系方式,自己安排會議,自己協(xié)調(diào)資源——這就像在代碼中頻繁使用new關(guān)鍵字創(chuàng)建對象:

// 沒有管家的苦日子
Employee developer = new Developer();
Employee manager = new Manager();
Project project = new Project(developer, manager);

而有了Spring這位智能管家,你只需要告訴他:“我需要一個(gè)項(xiàng)目經(jīng)理”,管家就會自動找到最合適的人選并送到你面前:

// 有管家的幸福生活
@Autowired
private Project project; // 管家,幫我組建一個(gè)項(xiàng)目團(tuán)隊(duì)!

源碼視角
Spring的核心容器是ApplicationContext接口,它的默認(rèn)實(shí)現(xiàn)AnnotationConfigApplicationContext就是專門處理注解的智能管家:

// 啟動Spring容器(聘請管家)
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// 向管家索取需要的服務(wù)
ProjectService projectService = context.getBean(ProjectService.class);

1.2 注解驅(qū)動:給管家下指令

在Spring Boot中,我們主要通過注解來指導(dǎo)管家工作。這些注解就像給管家的工作指令

1.2.1 @SpringBootApplication:總管家的聘書

這是Spring Boot應(yīng)用的起點(diǎn)注解,它實(shí)際上是一個(gè)組合注解

@SpringBootApplication // ← 這就是聘書,包含三個(gè)重要指令
public class CompanyApplication {
    public static void main(String[] args) {
        SpringApplication.run(CompanyApplication.class, args); // 正式聘請管家
    }
}

拆解這個(gè)"聘書",包含三個(gè)核心指令:

@SpringBootConfiguration  // ← 指令1:這是家正規(guī)公司(配置類)
@EnableAutoConfiguration  // ← 指令2:管家可以自主決策(自動配置)
@ComponentScan            // ← 指令3:在公司內(nèi)尋找人才(組件掃描)
public class CompanyApplication {
    // ...
}

1.2.2 組件注解:員工的身份標(biāo)識

在公司里,不同類型的員工有不同的工牌:

@Component         // ← 普通員工工牌
public class Developer {
    public void code() {
        System.out.println("編寫代碼...");
    }
}
@Service           // ← 管理層工牌(特殊待遇)
public class ProjectService {
    private final Developer developer;
    public ProjectService(Developer developer) {
        this.developer = developer;
    }
}
@Repository        // ← 倉庫管理員工牌(有錯誤轉(zhuǎn)換特權(quán))
public class ProjectRepository {
    // 數(shù)據(jù)訪問邏輯
}
@Controller        // ← 前臺接待員工牌(處理外部請求)
public class ProjectController {
    private final ProjectService projectService;
    public ProjectController(ProjectService projectService) {
        this.projectService = projectService;
    }
}

源碼洞察
這些注解都被元注解@Component標(biāo)記,意味著它們都會被組件掃描發(fā)現(xiàn):

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component // 所有注解都是@Component的特殊化
public @interface Service {
    // ...
}

1.2.3 @Autowired:依賴注入的三種方式

告訴管家如何給員工配備助手和設(shè)備:

@Service
public class ProjectService {
    // 方式1:字段注入(直接配助手)- 簡單但不推薦
    @Autowired
    private Developer developer;
    // 方式2:構(gòu)造器注入(招聘時(shí)指定助手)- 推薦方式
    private final Designer designer;
    @Autowired
    public ProjectService(Designer designer) {
        this.designer = designer; // 一旦配備,不可更改
    }
    // 方式3:Setter注入(后期配置設(shè)備)- 可選依賴
    private Printer printer;
    @Autowired
    public void setPrinter(Printer printer) {
        this.printer = printer; // 可以后期更換
    }
}

最佳實(shí)踐:使用構(gòu)造器注入,就像在招聘時(shí)就確定團(tuán)隊(duì)組成,這樣團(tuán)隊(duì)更穩(wěn)定。

1.2.4 @Bean注解:手動招聘特殊人才

有些特殊人才(第三方庫的類)沒有Spring的工牌,我們需要手動招聘:

@Configuration // ← 人力資源部
public class CompanyConfig {
    @Bean // ← 手動簽發(fā)聘書
    public SpecialExpert specialExpert() {
        return new SpecialExpert(); // 來自第三方庫的專家
    }
    @Bean
    public ProjectTeam projectTeam(Developer developer, SpecialExpert expert) {
        // 管家會自動提供需要的依賴
        return new ProjectTeam(developer, expert);
    }
}

1.3 自動配置:管家的智能決策

Spring Boot最強(qiáng)大的特性就是自動配置。這就像管家根據(jù)公司環(huán)境自動做出最佳決策:

1.3.1 條件裝配:智能的情境判斷

@Configuration
public class SmartConfiguration {
    // 只有當(dāng)公司有數(shù)據(jù)庫時(shí),才招聘DBA
    @Bean
    @ConditionalOnClass(DataSource.class)
    public DatabaseAdmin databaseAdmin() {
        return new DatabaseAdmin();
    }
    // 只有當(dāng)需要處理Web請求時(shí),才配備Web團(tuán)隊(duì)
    @Bean
    @ConditionalOnWebApplication
    public WebTeam webTeam() {
        return new WebTeam();
    }
    // 只有當(dāng)配置了郵件服務(wù)器時(shí),才設(shè)立郵件部門
    @Bean
    @ConditionalOnProperty(name = "mail.host")
    public EmailService emailService() {
        return new EmailService();
    }
}

1.3.2 源碼揭秘:自動配置的工作原理

Spring Boot的自動配置是通過spring-boot-autoconfigure包中的META-INF/spring.factories文件實(shí)現(xiàn)的:

# spring.factories文件內(nèi)容
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.data.jpa.JpaAutoConfiguration

每個(gè)自動配置類都使用條件注解來決定是否生效:

@Configuration
@ConditionalOnClass(DataSource.class) // 有數(shù)據(jù)庫驅(qū)動才生效
@ConditionalOnProperty(prefix = "spring.datasource", name = "url") // 配置了URL才生效
@EnableConfigurationProperties(DataSourceProperties.class) // 綁定配置屬性
public class DataSourceAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean // 如果沒有自定義DataSource才創(chuàng)建
    public DataSource dataSource(DataSourceProperties properties) {
        return properties.initializeDataSourceBuilder().build();
    }
}

1.4 實(shí)戰(zhàn)示例:構(gòu)建一個(gè)簡單的公司系統(tǒng)

讓我們用代碼來演示Spring Boot如何基于注解管理IoC容器:

// 1. 啟動類(公司總部)
@SpringBootApplication
public class CompanyApplication {
    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(CompanyApplication.class, args);
        // 從容器中獲取bean
        Project project = context.getBean(Project.class);
        project.start();
    }
}
// 2. 服務(wù)層(管理部門)
@Service
public class ProjectService {
    private final Developer developer;
    private final Designer designer;
    // 構(gòu)造器注入
    public ProjectService(Developer developer, Designer designer) {
        this.developer = developer;
        this.designer = designer;
    }
    public void startProject() {
        developer.code();
        designer.design();
    }
}
// 3. 組件類(員工)
@Component
public class Developer {
    public void code() {
        System.out.println("程序員編寫代碼...");
    }
}
@Component
public class Designer {
    public void design() {
        System.out.println("設(shè)計(jì)師設(shè)計(jì)界面...");
    }
}
// 4. 配置類(人力資源部)
@Configuration
public class CompanyConfig {
    @Bean
    public Project project(ProjectService projectService) {
        return new Project(projectService);
    }
}
// 5. 項(xiàng)目類
public class Project {
    private final ProjectService projectService;
    public Project(ProjectService projectService) {
        this.projectService = projectService;
    }
    public void start() {
        System.out.println("項(xiàng)目啟動!");
        projectService.startProject();
    }
}

1.5 總結(jié):注解驅(qū)動的IoC優(yōu)勢

通過注解驅(qū)動的方式,Spring Boot實(shí)現(xiàn)了:

  1. 簡潔性:幾個(gè)注解替代了大量XML配置
  2. 類型安全:編譯期就能發(fā)現(xiàn)錯誤,而不是運(yùn)行時(shí)
  3. 強(qiáng)一致性:注解與代碼在一起,不會出現(xiàn)配置與代碼不同步
  4. 智能自動配置:根據(jù)環(huán)境自動做出最佳決策

就像一位聰明的管家,Spring Boot通過注解了解你的需求,自動協(xié)調(diào)所有資源,讓你可以專注于業(yè)務(wù)邏輯而不是基礎(chǔ)設(shè)施的搭建。

記住這個(gè)比喻

  • @Component、@Service、@Repository、@Controller → 員工工牌
  • @Autowired → 給員工配備助手和設(shè)備
  • @Bean → 手動招聘特殊人才
  • @Conditional → 管家的情境智能決策
  • @SpringBootApplication → 總管家的聘書

有了這位智能管家,你的開發(fā)效率將大幅提升,真正實(shí)現(xiàn)"約定優(yōu)于配置"的開發(fā)理念。

到此這篇關(guān)于Spring Boot使用注解重構(gòu)IoC容器的實(shí)戰(zhàn)示例的文章就介紹到這了,更多相關(guān)Spring Boot注解IoC容器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot讀取配置的6種方式

    SpringBoot讀取配置的6種方式

    本文主要介紹了SpringBoot讀取配置的6種方式,主要包括使用默認(rèn)配置、使用application.properties文件、使用application.yml文件、使用@Value注解、使用Environment對象和使用ConfigurableEnvironment對象,感興趣的可以了解一下
    2023-08-08
  • Java提取HTML文本內(nèi)容的兩種輕量級實(shí)現(xiàn)方案對比

    Java提取HTML文本內(nèi)容的兩種輕量級實(shí)現(xiàn)方案對比

    在日常的 Java 開發(fā)中,我們經(jīng)常會遇到處理 HTML 內(nèi)容的場景,本文將介紹兩種處理思路,一種是利用第三方文檔處理庫將 HTML 作為文檔解析,另一種是主流的輕量級 HTML 解析器方案,大家可以根據(jù)自己的需求進(jìn)行選擇
    2026-04-04
  • Java如何通過反射機(jī)制獲取數(shù)據(jù)類對象的屬性及方法

    Java如何通過反射機(jī)制獲取數(shù)據(jù)類對象的屬性及方法

    文章介紹了如何使用Java反射機(jī)制獲取類對象的所有屬性及其對應(yīng)的get、set方法,以及如何通過反射機(jī)制實(shí)現(xiàn)類對象的實(shí)例化,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • Java程序員需要掌握的英語詞組

    Java程序員需要掌握的英語詞組

    這篇文章主要為大家詳細(xì)匯總了Java程序員需要掌握的英語詞組 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 利用JavaFX工具構(gòu)建Reactive系統(tǒng)

    利用JavaFX工具構(gòu)建Reactive系統(tǒng)

    這篇文章主要介紹了使用JavaFX構(gòu)建Reactive系統(tǒng),利用JavaFX工具集中的新的超棒特性來構(gòu)建響應(yīng)式的快速應(yīng)用程序,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Arthas在線java進(jìn)程診斷工具在線調(diào)試神器詳解

    Arthas在線java進(jìn)程診斷工具在線調(diào)試神器詳解

    Arthas是 Alibaba 開源的Java診斷工具,深受開發(fā)者喜愛。這篇文章主要介紹了Arthas在線java進(jìn)程診斷工具 在線調(diào)試神器,需要的朋友可以參考下
    2021-11-11
  • Java利用Selenium操作瀏覽器的示例詳解

    Java利用Selenium操作瀏覽器的示例詳解

    本文主要介紹如何使用java代碼利用Selenium操作瀏覽器,某些網(wǎng)頁元素加載慢,如何操作元素就會把找不到元素的異常,此時(shí)需要設(shè)置元素等待,等待元素加載完,再操作,感興趣的可以了解一下
    2023-01-01
  • 關(guān)于dubbo的RPC和RESTful性能及對比

    關(guān)于dubbo的RPC和RESTful性能及對比

    這篇文章主要介紹了關(guān)于dubbo的RPC和RESTful性能及對比,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java中hashMap遍歷的9種方式

    Java中hashMap遍歷的9種方式

    hashMap是非常重要的容器類,本文主要介紹了Java中hashMap遍歷的9種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • Java動態(tài)代理詳解及實(shí)例

    Java動態(tài)代理詳解及實(shí)例

    這篇文章主要介紹了Java動態(tài)代理詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01

最新評論

安多县| 方城县| 莒南县| 台前县| 施秉县| 马关县| 志丹县| 维西| 焦作市| 河曲县| 平乡县| 临夏市| 云安县| 栾川县| 尤溪县| 清苑县| 邛崃市| 安陆市| 平潭县| 丰台区| 陆川县| 梁平县| 砚山县| 河北区| 孙吴县| 勐海县| 大悟县| 福州市| 三门峡市| 塔城市| 土默特右旗| 丰台区| 安顺市| 黄平县| 石狮市| 文化| 多伦县| 房山区| 宜兰县| 岳池县| 沙坪坝区|