真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【Spring從入門到實戰(zhàn)】第3講:Spring中Bean的注入方式-創(chuàng)新互聯(lián)

本文已收錄于專欄
🌲《Spring從入門到實戰(zhàn)》🌲
專欄前言

?? 大家好,我是執(zhí)梗。本專欄將從Spring入門開始講起,詳細講解各類配置的使用以及原因,到使用SpringBoot進行開發(fā)實戰(zhàn),旨在記錄學習生活的同時也希望能幫到大家,如果對您能有所幫助,還望能點贊關(guān)注該專欄,對于專欄內(nèi)容有錯還望您可以及時指點,非常感謝大家 🌹。

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),汝城企業(yè)網(wǎng)站建設(shè),汝城品牌網(wǎng)站建設(shè),網(wǎng)站定制,汝城網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,汝城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。目錄
  • 專欄前言
  • 1.什么是Bean對象?
  • 2.Bean的注入方式
    • 1.XML注入
      • 1.1set注入
      • 1.2構(gòu)造方法注入
      • 1.3 P標簽注入
      • 1.4靜態(tài)工廠注入
      • 1.5實例工廠注入
  • 3.XML注入的缺點
  • 4.注解注入
    • 1.@Controller
    • 2.@Service
    • 3.@Repository
    • 4.@Component
    • 5.@Configuration

1.什么是Bean對象?

??我們上文以及講過Spring的IOC容器,那么這個容器管理的對象,我們一般就成為Bean對象。我們以前平時生成一個對象,都是調(diào)用構(gòu)造方法來new對象,對象都是由我們自己進行管理和生成,當我們將User對象托管給Spring管理后,此時的User就可以稱之為是一個Bean對象,Spring可以幫我們?nèi)ス芾砗蜕蓪ο?,不需要我們自己去操作?br />??當然并不是所有的對象Spring都得去幫我們管理,我們需要手動的去告訴它,這就是我們本文要講的Bean的注入方式。

2.Bean的注入方式 1.XML注入

??這是Spring版本比較老的注入方式,當然現(xiàn)在大家都不怎么使用了,主要還是因為不方便,而且XML配置文件在SpringBoot中已經(jīng)不使用了 。

1.1set注入

??在SpringXML文件中,我們首先使用Bean標簽注入我們需要注入的類,然后通過property標簽的value屬性完成賦值操作。它是基于注入類的set方法進行賦值的,如果property選擇的屬性沒有set方法則會報錯。
實體類代碼:

@Data //自動注入所有g(shù)et set方法,基于lombok
public class Student {String name;
    String id;
}

XML文件:

主函數(shù)運行:

public class App {public static void main(String[] args) {//1.得到spring上下文對象
        ApplicationContext context=
                new ClassPathXmlApplicationContext("application.xml");
        //2.根據(jù)上下文對象提供的上下文對象
        Student student= (Student)context.getBean("student");
        System.out.println(student);
    }
}

正常打印
在這里插入圖片描述

1.2構(gòu)造方法注入

??這種注入方式也是在XML中進行,只不過我們使用的屬性變成了constructor-arg,它基于的是構(gòu)造方法的注入而不是我們的set方法了,需要我們的實體類提供對應的構(gòu)造方法,否則也會報錯。
實體類代碼:

public class User {String name;
    int id;
    public User(String name, int id) {this.name = name;
        this.id = id;
    }
}

XML文件:

主函數(shù)運行:

public class App {public static void main(String[] args) {//1.得到spring上下文對象
        ApplicationContext context=
                new ClassPathXmlApplicationContext("application.xml")

        User user = context.getBean("user", User.class);
        System.out.println(user);
    }
}

正常打印
在這里插入圖片描述

1.3 P標簽注入

??這種注入方法其實本質(zhì)上和set注入沒有區(qū)別,因為它也是基于set方法進行實現(xiàn)的,如果缺失set方法的話同樣會報錯,感覺就是對set注入進行的一種簡化,看上去更加簡潔。
XML文件:

配置文件中請加入下面這行
xmlns:p="http://www.springframework.org/schema/p"

正常打?。?br />在這里插入圖片描述

1.4靜態(tài)工廠注入

??這種注入方式比較少見,它是調(diào)用靜態(tài)工廠的靜態(tài)方法來創(chuàng)建Bean,當我們需要對象時,只需要傳入?yún)?shù)調(diào)用靜態(tài)方法即可,不需要關(guān)心創(chuàng)建對象的細節(jié)問題。當然被注入的實體類同樣需要提供set方法,它也是基于set注入實現(xiàn)。我們還需要再配置文件中配置靜態(tài)工廠的路徑和調(diào)用方法名以及參數(shù)。需要注意的是靜態(tài)工廠中廠本身不需要創(chuàng)建,可以直接通過靜態(tài)方法調(diào)用。

實體類:

@Data
public class User {String name;
    int id;
    public User() {}
}

XML配置文件:

主函數(shù)運行:

public class App {public static void main(String[] args) {//1.得到spring上下文對象
        ApplicationContext context=
                new ClassPathXmlApplicationContext("application.xml");

        User user = context.getBean("createuser", User.class);
        System.out.println(user);
    }
}

正常打印:
在這里插入圖片描述

1.5實例工廠注入

??這個和上面的靜態(tài)工廠有點類似,不同的區(qū)別在于實例工廠注入,我們首先需要把這個工廠注入進Spring。然后在注入實體類的時候我們需要指明我們使用的是哪一個注入的工廠以及調(diào)用的是工廠內(nèi)的哪個方法,主要的區(qū)別就在于靜態(tài)工廠是不需要注入工廠的,而我們實例工廠注入由于需要實例化工廠對象,所以需要講工廠也注入進來。注意的是改方法注入同樣依賴與set方法。

XML配置

此處是注入工廠

主函數(shù)運行:

public class App {public static void main(String[] args) {//1.得到spring上下文對象
        ApplicationContext context=
                new ClassPathXmlApplicationContext("application.xml");

        User user = context.getBean("student2", User.class);
        System.out.println(user);
    }
}

正常打印:
在這里插入圖片描述

3.XML注入的缺點

??當然現(xiàn)在主流開發(fā)都是使用的SpringBoot框架,我們一般不采用XML配置文件的方法去注入對象,主要它有以下缺點:

  • XML文件配置麻煩,占用資源,維護代碼的同時還得維護配置文件
  • 當注入的實體類過多時,配置文件代碼量很大,維護麻煩
  • 程序編譯難以對配置文件進行驗證,會產(chǎn)生運行時異常且難以發(fā)現(xiàn)
4.注解注入

??這是目前最主流的注入方式,我們只需要在我們需要注入的實體類上加上相應的注解就可以Spring我們需要去注入它。當然它也沒有那么只能,你在任何地方寫它都能識別到,我們首先需要配置包的掃描路徑,這樣它才會將該包下的所有添加注解的類注入。

application.xml添加如下配置:

base-package="需要掃描的包路徑"
1.@Controller

??@Controller注解主要用于控制層,表明我們將該類注入進Spring管理,注意該類路徑需要在掃描的包下。

實體類代碼:

@Controller
public class UserController {public void sayHi(String name){System.out.println("Hi"+name);
    }
}

主函數(shù)運行代碼:
??這里需要注意的是我們類名叫UserController這種大駝峰命名,但是在通過context取對象時卻是userController,這是Spring約定熟成的規(guī)矩。

public class App {public static void main(String[] args) {//1.得到spring上下文對象
        ApplicationContext context=
                new ClassPathXmlApplicationContext("application.xml");
                
        UserController userController = context.getBean("userController", UserController.class);
        userController.sayHi("張飛");
    }
}

正常運行:
在這里插入圖片描述

2.@Service

??同樣具有注入功能,只不過我們一般寫在Service層。

@Service
public class UserService {public void sayHi(String name){System.out.println("Hi"+name);
    }
}
3.@Repository

??同樣具有注入功能,我們一般用在數(shù)據(jù)訪問層,也就是常說的DAO層。

@Repository
public class UserRepository{public void sayHi(String name){System.out.println("Hi"+name);
    }
}
4.@Component

??同樣具有注入功能,它指的是我們注入的是一個組件,那么什么是組件呢?我也說不清楚哈哈哈,反正不是使用上面的三種的情況下我們就使用該注解注入。

@Component
public class UserComponent {public void sayHi(String name) { System.out.println("Hi"+name);
    }
}
5.@Configuration

??同樣具有注入功能,它表示我們注入的類是一個配置類。

@Configuration
public class UserConfiguration {public void sayHi(String name) { System.out.println("Hi"+name);
    }
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)頁標題:【Spring從入門到實戰(zhàn)】第3講:Spring中Bean的注入方式-創(chuàng)新互聯(lián)
文章源于:http://weahome.cn/article/cejdpo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部