溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Spring的存儲(chǔ)方式與獲取方式是什么

發(fā)布時(shí)間:2022-06-14 15:12:39 來(lái)源:億速云 閱讀:129 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容介紹了“Spring的存儲(chǔ)方式與獲取方式是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

    存儲(chǔ)方式(注解)

    使用注解的方式存儲(chǔ)業(yè)務(wù)對(duì)象到Spring中會(huì)更簡(jiǎn)單

    1.配置spring.xml設(shè)置spring存入對(duì)象的根路徑 ,目的是讓Spring項(xiàng)目啟動(dòng)后,能夠去根路徑下的所有類(lèi)中掃描并標(biāo)識(shí)為需要存儲(chǔ)到Spring中的對(duì)象存儲(chǔ)到Spring中

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:content="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
        <!-- 配置一下:bean注解掃描的根路徑(方面后面更簡(jiǎn)單存儲(chǔ)對(duì)象到spring容器)-->
        <content:component-scan base-package="com.bit"></content:component-scan>
    </beans>

    2.使用注解將bean對(duì)象存儲(chǔ)到spring框架中

    注解分類(lèi):

    1.類(lèi)注解:@Controller【控制器】,@Service【業(yè)務(wù)邏輯層】,@Repository【數(shù)據(jù)持久層】,@Component【組件類(lèi)】,@Configuration【配置類(lèi)】

    2.方法注解:@Bean(必須配合類(lèi)注解使用)

    @Controller

    創(chuàng)建bean對(duì)象

    package com.bit;
    
    import org.springframework.stereotype.Controller;
    
    /**
     * Description:
     * User: lmp
     * Date: 2022-05-24
     * Time: 19:23
     */
    @Controller
    public class UserController {
        public void sayHi(String name){
            System.out.println("Hi controller"+name);
        }
    }

    讀取bean對(duì)象

    package com.bit;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
     * Description:
     * User: lmp
     * Date: 2022-05-24
     * Time: 15:25
     */
    public class App {
        public static void main(String[] args) {
            //先獲取對(duì)象的Spring
            ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
            //從 Spring 中獲得存入的對(duì)象(將存入的類(lèi)首字母小寫(xiě),若類(lèi)名字符大于2個(gè),并且前兩個(gè)字符都是大寫(xiě),那么使用原類(lèi)名作為bean的名字)
            UserController userController = context.getBean("userController",UserController.class);
            userController.sayHi("Bit");
        }
    }

    @Service

    和controller一樣

    @Repository

    和controller一樣

    @Configuration

    和controller一樣

    @Component

    和controller一樣

    方法注解@Bean

    一般寫(xiě)在組件里面,方法注解必須配合類(lèi)注解使用,因?yàn)镾pring默認(rèn)是類(lèi)級(jí)別的掃描

    package com.bit.util;
    
    import com.bit.Model.User;
    import com.sun.org.apache.bcel.internal.generic.RETURN;
    import org.springframework.context.annotation.Bean;
    import org.springframework.stereotype.Component;
    
    /**
     * Description:
     * User: lmp
     * Date: 2022-05-24
     * Time: 21:14
     */
    @Component
    public class UserBean {
        @Bean //將當(dāng)前對(duì)象存儲(chǔ)在Spring當(dāng)中
        public User user1(){
            User user = new User();
            user.setId(1);
            user.setName("zhangsan");
            user.setAge(18);
            return user;
        }
    }
    重命名bean

    可以通過(guò)設(shè)置name屬性給Bean對(duì)象進(jìn)行重命名操作

    @Bean重命名可以有多個(gè)別名,但是當(dāng)指定別名之后,方法名就取不到對(duì)象了

    package com.bit.util;
    
    import com.bit.Model.User;
    import com.sun.org.apache.bcel.internal.generic.RETURN;
    import org.springframework.context.annotation.Bean;
    import org.springframework.stereotype.Component;
    
    /**
     * Description:
     * User: lmp
     * Date: 2022-05-24
     * Time: 21:14
     */
    @Component
    public class UserBean {
        @Bean(name = {"u1","userInfo1"}) //將當(dāng)前對(duì)象存儲(chǔ)在Spring當(dāng)中
        public User user1(){
            User user = new User();
            user.setId(1);
            user.setName("zhangsan");
            user.setAge(18);
            return user;
        }
    
        @Bean(name = "u2") //將當(dāng)前對(duì)象存儲(chǔ)在Spring當(dāng)中
        public User user2(){
            User user = new User();
            user.setId(1);
            user.setName("lisi");
            user.setAge(18);
            return user;
        }
    }

    五大注解之間的關(guān)系

    從業(yè)務(wù)邏輯來(lái)說(shuō),@Controller是@Component的子類(lèi),同樣,@Service,@Repository,@Configuration都是@Component的子類(lèi)

    Spring的存儲(chǔ)方式與獲取方式是什么

    從Spring中獲取對(duì)象

    @Autowired

    屬性注入(屬性注冊(cè))

    Spring的存儲(chǔ)方式與獲取方式是什么

    Setter注入

    Spring的存儲(chǔ)方式與獲取方式是什么

    構(gòu)造方法注入

    Spring的存儲(chǔ)方式與獲取方式是什么

    注入注解

    @Qualifier 可以解決同一個(gè)類(lèi)有兩個(gè)以上的對(duì)象的情況,可以使用這個(gè)注解,它相當(dāng)于@Resource(name=“”)

    三種注入的優(yōu)缺點(diǎn)
    • 屬性注入的優(yōu)點(diǎn)是簡(jiǎn)潔,只適用于IoC容器,如果非IOC容器不可用,會(huì)報(bào)空指針異常

    • 構(gòu)造方法注入是Spring推薦的注入方式,缺點(diǎn)是如果有多個(gè)注入會(huì)顯得比較臃腫

    • Setter方式是Spring前期版本推薦的注入方式,但通用性不如構(gòu)造方法,

    @Resource

    對(duì)象注入的另一種方式:使用@Resource注解,但Resource注解不能使用在構(gòu)造方法上

    Spring的存儲(chǔ)方式與獲取方式是什么

    @Autowired和@Resource的區(qū)別

    1.出身不同,他們所屬的包不一樣,Resource屬于javajdk中的javax包中,而Autowired屬于springframework包中的

    2.作用范圍不同,Resource不可以使用在構(gòu)造方法注解上,而autowired可以

    3.功能不同 Resource可以使用name屬性,從而完成對(duì)象的別名注入,而autowired沒(méi)有。

    “Spring的存儲(chǔ)方式與獲取方式是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI