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

淺談@Value和@Bean的執(zhí)行順序問題

 更新時間:2021年06月16日 08:34:50   作者:qq_27397913  
這篇文章主要介紹了@Value和@Bean的執(zhí)行順序問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

問題描述

使用@Autowired處理多個同種類型的bean,出現(xiàn)@Value和@Bean的執(zhí)行順序問題。

首先使用掃描包+注解的方式注冊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);
    }
}

輸出結(jié)果如下:

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;
}

再次運(yùn)行testWired方法后

結(jié)果輸出如下:

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

為什么會出現(xiàn)這種情況?

一開始,怎么也想不通,查看網(wǎng)上的資料大多數(shù)是說@Bean和@Value有執(zhí)行順序這一說法。

為了驗(yàn)證這一說法,做個對比試驗(yàn)

去掉了一個@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;
}

結(jié)果輸出如下:

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

問題原因

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

解決辦法

網(wǎng)上說@Value和@Bean在不同文件下時,@Value比@Bean先執(zhí)行,因此,我做了如下設(shè)置

把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,"李四");
    }
}

此時再運(yùn)行測試方式,輸出結(jié)果如下:

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

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,有什么理解不到位的地方,請大家多多指正,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

新河县| 长春市| 马鞍山市| 永年县| 易门县| 华坪县| 惠东县| 巴东县| 吉林市| 双峰县| 修水县| 达日县| 萍乡市| 伊川县| 三亚市| 阿克苏市| 长顺县| 宣化县| 介休市| 长兴县| 广州市| 西安市| 库伦旗| 垣曲县| 宁晋县| 湘西| 全椒县| 丘北县| 绥阳县| 荥经县| 灌阳县| 松潘县| 乌拉特前旗| 博客| 新津县| 霍山县| 松江区| 乌什县| 黄平县| 阿勒泰市| 色达县|