亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解@Value和@Bean的執行順序問題

發布時間:2021-06-16 09:30:41 來源:億速云 閱讀:387 作者:chen 欄目:開發技術

本篇內容主要講解“如何理解@Value和@Bean的執行順序問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何理解@Value和@Bean的執行順序問題”吧!

問題描述

使用@Autowired處理多個同種類型的bean,出現@Value和@Bean的執行順序問題。

首先使用掃描包+注解的方式注冊User類型的不同bean,分別是user、user1,注冊方式如下

package com.fanyinhang.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
 * @author fanyinhang
 * @version 1.0
 * @create 2019/10/8-19:11
 */
@NoArgsConstructor
@Data
@AllArgsConstructor
@Component
public class User {
    private Integer id;
    private String name;
}

該方式得到User類型的名為user的bean

package com.fanyinhang.config;
import com.fanyinhang.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(value={"com.fanyinhang.dao"})
public class AnnotationConfig {
    @Bean()
    public User user1(){
        return new User(2,"李四");
    }
}

UserDao配置如下:

package com.fanyinhang.dao;
import com.fanyinhang.bean.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

/**
 * @author fanyinhang
 * @version 1.0
 * @create 2019/10/8-19:17
 */
@Repository
public class UserDao {
    @Autowired()
    private User user1;
    
    @Override
    public String toString() {
        return "UserDao{" +
                "user1=" + user1 +
                '}';
    }
}
import com.fanyinhang.config.AnnotationConfig;
import com.fanyinhang.dao.UserDao;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
 * @author fanyinhang
 * @version 1.0
 * @create 2019/10/8-19:18
 */
public class Test3 {
    @Test
    public void testAutowired(){
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AnnotationConfig.class);
        UserDao userDao = context.getBean(UserDao.class);
        System.out.println(userDao);
    }
}

輸出結果如下:

UserDao{user1=User(id=2, name=李四)}

沒有加入@Value注解時是沒有問題的,但是加入了@Value之后

package com.fanyinhang.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
 * @author fanyinhang
 * @version 1.0
 * @create 2019/10/8-19:11
 */
@NoArgsConstructor
@Data
@AllArgsConstructor
@Component
public class User {
    @Value("1")
    private Integer id;
    @Value("張三")
    private String name;
}

再次運行testWired方法后

結果輸出如下:

UserDao{user1=User(id=1, name=張三)}

為什么會出現這種情況?

一開始,怎么也想不通,查看網上的資料大多數是說@Bean和@Value有執行順序這一說法。

為了驗證這一說法,做個對比試驗

去掉了一個@Value(“張三”)

package com.fanyinhang.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
 * @author fanyinhang
 * @version 1.0
 * @create 2019/10/8-19:11
 */
@NoArgsConstructor
@Data
@AllArgsConstructor
@Component
public class User {
    @Value("1")
    private Integer id;
    //@Value("張三")
    private String name;
}

結果輸出如下:

UserDao{user1=User(id=1, name=李四)}

問題原因

@Value和@Bean在不同文件下時,@Bean比@Value先執行。這樣就回導致@Bean注入的值失效。

解決辦法

網上說@Value和@Bean在不同文件下時,@Value比@Bean先執行,因此,我做了如下設置

把User.java下的@Value注解去掉,而是將@Value注解放在@bean同一文件下

package com.fanyinhang.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;
/**
 * @author fanyinhang
 * @version 1.0
 * @create 2019/10/8-19:11
 */
@NoArgsConstructor
@Data
@AllArgsConstructor
@Component
public class User {
    private Integer id;
    private String name;
}
package com.fanyinhang.config;
import com.fanyinhang.bean.User;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(value={"com.fanyinhang.dao"})
public class AnnotationConfig {
    @Bean()
    public User user1(@Value("1") Integer id,@Value("張三") String name){
        return new User(2,"李四");
    }
}

此時再運行測試方式,輸出結果如下:

UserDao{user1=User(id=2, name=李四)}

到此,相信大家對“如何理解@Value和@Bean的執行順序問題”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

奉新县| 饶河县| 景洪市| 芷江| 阿勒泰市| 乳山市| 大石桥市| 西峡县| 南召县| 凌云县| 马公市| 榆林市| 宝鸡市| 繁昌县| 长泰县| 吉木萨尔县| 南木林县| 美姑县| 朔州市| 故城县| 广宗县| 兴宁市| 乌拉特中旗| 厦门市| 全南县| 惠水县| 梁河县| 察哈| 鹤岗市| 乐平市| 蓬溪县| 定日县| 西和县| 邯郸市| 庆安县| 古交市| 阿尔山市| 津南区| 万荣县| 武安市| 广安市|