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

SpringBoot?常用注解詳細解析

 更新時間:2026年02月27日 10:46:15   作者:莫寒清  
Spring?Boot常用注解總結(jié)包括啟動類、依賴注入、配置管理、Web開發(fā)、條件裝配、功能啟用及其他常用注解,本文介紹SpringBoot?常用注解詳細解析,感興趣的朋友跟隨小編一起看看吧

一句話總結(jié)

  • 整體記憶:啟動靠 @SpringBootApplication,IOC 靠組件注解 + @Autowired,配置靠 @Value/@ConfigurationProperties,Web 層靠 @RestController + 各種 @xxxMapping,擴展能力靠 @Enable 系列,細節(jié)控制靠條件裝配和事務(wù)、校驗等注解。
  • 面試常問:
    • @SpringBootApplication 里面包含了什么?
    • @RestController@Controller 的區(qū)別?
    • @Autowired@Resource 的區(qū)別?
    • @ConfigurationProperties@Value 的區(qū)別及使用場景?
    • 自動裝配是如何依賴 @ConditionalOnXXX 系列的?

詳細解析

一、啟動類注解

Spring Boot 應(yīng)用的入口類需要通過注解聲明啟動邏輯,一個注解頂三個傳統(tǒng)配置。

注解作用
@SpringBootApplication啟動類核心注解,是以下三個注解的組合(約定優(yōu)于配置的入口):
1. @SpringBootConfiguration:聲明當前類是配置類(等價于 @Configuration);
2. @EnableAutoConfiguration:開啟自動配置(讓 Spring Boot 自動加載符合條件的 Bean);
3. @ComponentScan:默認掃描當前包及子包下的 @Component 及其衍生注解(如 @Service)標記的類,注冊為 Bean。

面試點小結(jié)

  • 高頻問題:如果不想讓某些包被掃描,或者想自定義掃描路徑,怎么做?—— 使用 @SpringBootApplication(scanBasePackages = "...") 或者在 @ComponentScan 中單獨配置。

代碼示例:自定義掃描包路徑

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
// 方式一:直接在 @SpringBootApplication 上指定掃描包
@SpringBootApplication(scanBasePackages = {
        "com.example.service",
        "com.example.web"
})
public class CustomScanApplication {
    public static void main(String[] args) {
        SpringApplication.run(CustomScanApplication.class, args);
    }
}
// 方式二:配合 @ComponentScan 單獨配置(等價寫法)
@SpringBootApplication
@ComponentScan(basePackages = {
        "com.example.service",
        "com.example.web"
})
class AnotherApplication {
}

代碼示例:啟動類寫法

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

二、依賴注入(IOC)注解

Spring 的核心是 IOC(控制反轉(zhuǎn)),常見問題就是:誰是 Bean?Bean 如何注入?注入沖突時怎么解決?

1. 聲明 Bean 的注解(標記類/方法為可被 IOC 管理的組件)

注解作用
@Component通用組件標記(所有被 IOC 管理的類的基礎(chǔ)注解)。
@Service標記業(yè)務(wù)層(Service 層)組件(等價于@Component,語義更明確)。
@Controller標記 Web 控制器組件(等價于@Component,語義更明確)。
@Repository標記數(shù)據(jù)訪問層(DAO 層)組件(等價于@Component,語義更明確,Spring 會自動將特定數(shù)據(jù)訪問異常轉(zhuǎn)換為 Spring 統(tǒng)一異常層次)。
@Configuration標記配置類(通常用于聲明@Bean方法),等價于傳統(tǒng) Spring 的 XML 配置文件。
@Bean聲明一個 Bean(標注在方法上,方法返回值會被注冊到 IOC 容器)。

代碼示例:分層組件與配置類

import org.springframework.stereotype.Service;
import org.springframework.stereotype.Repository;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Service
public class UserService {
    public String getUserName() {
        return "Tom";
    }
}
@Repository
public class UserRepository {
    // 模擬持久層
}
@Configuration
public class AppConfig {
    @Bean
    public String commonBean() {
        return "I am a bean";
    }
}

易混點

  • @Component/@Service/@Controller/@Repository 功能幾乎相同,主要是語義和分層清晰,方便維護和 AOP 等按層次織入。
  • @Configuration 的類中方法如果標了 @Bean,默認是單例且有 CGLIB 增強,同一個 @Bean 方法多次調(diào)用只會返回同一個 Bean。

這句話是什么意思?

  • Spring 會為標注了 @Configuration 的類創(chuàng)建一個 CGLIB 代理子類,攔截對 @Bean 方法的調(diào)用。
  • 無論是在容器內(nèi)部互相調(diào)用,還是你手動拿到配置類實例去調(diào)用 @Bean 方法,最終都會從 IOC 容器中取同一個單例 Bean,而不是每次 new 一個。

什么是 CGLIB?

  • CGLIB(Code Generation Library)是一個基于 字節(jié)碼增強 的類庫,可以在運行時為某個類生成一個子類,并通過方法攔截實現(xiàn) AOP、代理等功能。
  • 和基于 JDK 的動態(tài)代理只支持接口不同,CGLIB 可以代理沒有實現(xiàn)接口的普通類,這也是 Spring 能夠增強 @Configuration 類、普通 Bean 類的關(guān)鍵手段之一。

代碼示例:@Configuration + @Bean 的單例與代理行為

@Configuration
public class BeanConfig {
    @Bean
    public User user() {
        return new User();
    }
    @Bean
    public List<User> userList() {
        // 雖然看起來調(diào)用了兩次 user(),但因為有 CGLIB 代理,這里返回的是同一個單例 Bean
        return Arrays.asList(user(), user());
    }
}

擴展:如果這里的類不是 @Configuration 而只是 @Component,那么 user() 方法不會被代理攔截,每次調(diào)用都會 new 一個對象,userList 中就會有兩個不同的 User 實例。

2. 注入 Bean 的注解(從 IOC 容器中獲取 Bean)

注解作用
@AutowiredSpring 原生注入注解(默認按類型注入,可配合 @Qualifier 按名稱指定,支持構(gòu)造器/Setter/字段注入)。
@ResourceJSR-250 標準注解(默認按名稱注入,無名稱時按類型注入,來自 jakarta.annotation / javax.annotation)。
@Qualifier配合@Autowired使用,指定注入的 Bean 名稱(解決同類型多 Bean 的歧義問題)。
@Primary標記同類型 Bean 中的“主選” Bean(當@Autowired遇到多 Bean 時優(yōu)先選擇它)。
@Lazy標記 Bean 為延遲加載(默認 IOC 啟動時創(chuàng)建 Bean,@Lazy會在首次使用時創(chuàng)建)。
@Scope指定 Bean 的作用域(如 singleton(默認單例)、prototype(多例)、request(HTTP 請求作用域)等)。

面試高頻:@Autowired vs @Resource

  • 來源不同@Autowired 來自 Spring,@Resource 來自 JSR 規(guī)范(更標準化)。
  • 裝配策略不同@Autowired 先按類型匹配,再結(jié)合 @Qualifier;@Resource 默認按名稱,找不到再按類型。
  • 推薦實踐:實際開發(fā)中更常見的是 @Autowired + 構(gòu)造器注入(更利于單元測試、不可變設(shè)計)。

代碼示例:@Autowired、@Qualifier、@Primary

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
public interface MessageService {
    String send();
}
@Component("emailService")
@Primary // 同類型多個 Bean 時,優(yōu)先注入
class EmailService implements MessageService {
    @Override
    public String send() {
        return "send email";
    }
}
@Component("smsService")
class SmsService implements MessageService {
    @Override
    public String send() {
        return "send sms";
    }
}
@Component
class MessageController {
    // 指定注入 smsService,而不是默認的 @Primary emailService
    @Autowired
    @Qualifier("smsService")
    private MessageService messageService;
}

三、配置管理注解

Spring Boot 通過 application.properties / application.yml 管理配置,常見問題是:簡單配置用什么?復(fù)雜配置用什么?如何支持類型安全?

注解作用
@Value讀取單個配置屬性(支持 SpEL 表達式),如 @Value("${server.port}"),適合零散簡單配置。
@ConfigurationProperties批量綁定配置到 Java 對象(適用于復(fù)雜配置,如 prefix="spring.datasource" 綁定一組屬性,支持 JSR303 校驗)。
@PropertySource加載自定義配置文件(默認加載 application.properties,可用此注解加載其他文件,如 @PropertySource("classpath:my-config.properties"))。
@EnableConfigurationProperties啟用 @ConfigurationProperties 標記的類(通常配合 @Configuration 或在啟動類上使用)。

面試高頻:@ConfigurationProperties vs @Value

  • @Value:適合零散、簡單、單個字段的配置讀取,不支持批量映射和校驗。
  • @ConfigurationProperties:適合成組配置、需要類型安全和校驗的場景,推薦用于中大型項目。

代碼示例:@Value 與 @ConfigurationProperties 讀取配置

// application.yml
app:
  name: demo-app
  version: v1.0
server:
  port: 8081
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {
    private String name;
    private String version;
    // getter / setter 省略
}
@Component
public class ConfigDemo {
    // 讀取單個配置
    @Value("${server.port}")
    private int serverPort;
}

四、Web 開發(fā)注解

Spring Boot 內(nèi)置 Spring MVC,以下注解用于處理 HTTP 請求、響應(yīng)和參數(shù),是Controller 層面試的重災(zāi)區(qū)。

1. 控制器與請求映射

注解作用
@RestControllerRESTful 控制器(等價于 @Controller + @ResponseBody,返回數(shù)據(jù)直接序列化為 JSON/JSONP/XML 等)。
@Controller傳統(tǒng) MVC 控制器(返回視圖名或配合 @ResponseBody 返回數(shù)據(jù))。
@RequestMapping通用請求映射(可標記類或方法,指定 URL 路徑、請求方法等,如 @RequestMapping("/user"))。
@GetMapping@RequestMapping(method = RequestMethod.GET) 的簡寫(處理 GET 請求)。
@PostMapping處理 POST 請求(類似@GetMapping)。
@PutMapping處理 PUT 請求。
@DeleteMapping處理 DELETE 請求。

代碼示例:@RestController 與請求映射

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/users")
public class UserController {
    @GetMapping("/{id}")
    public String getUser(@PathVariable Long id) {
        return "user id = " + id;
    }
    @PostMapping
    public User createUser(@RequestBody User user) {
        // 簡化處理:直接返回請求體
        return user;
    }
}

易錯點

  • @RestController 已經(jīng)包含 @ResponseBody,不要再在方法上重復(fù)標注 @ResponseBody。
  • 類上 @RequestMapping + 方法上 @GetMapping,最終路徑是類路徑 + 方法路徑拼接。

2. 請求參數(shù)與響應(yīng)

注解作用
@RequestBody將請求體(如 JSON)反序列化為 Java 對象(用于 POST/PUT 等帶請求體的請求)。
@RequestParam讀取 URL 中的查詢參數(shù)(如 @RequestParam("username") String name),可設(shè)置默認值、是否必填。
@PathVariable讀取 URL 路徑中的占位符(如 @GetMapping("/user/{id}") 配合 @PathVariable("id") Long userId)。
@ResponseBody將返回值序列化為 JSON/XML(通常配合@Controller使用,@RestController已內(nèi)置此注解)。
@ResponseStatus設(shè)置響應(yīng)狀態(tài)碼(如@ResponseStatus(HttpStatus.CREATED)返回 201 狀態(tài)碼)。
@CrossOrigin解決跨域問題(標記類或方法,指定允許的源、方法等,常與前后端分離一起使用)。

面試常問

  • @RequestBody@RequestParam 的區(qū)別?—— 一個讀 請求體,一個讀 查詢參數(shù)/表單字段。
  • @PathVariable@RequestParam 的典型使用場景?—— 資源 ID 通常用路徑變量,篩選條件用查詢參數(shù)。

代碼示例:@RequestParam、@PathVariable、@CrossOrigin

import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
@CrossOrigin(origins = "http://localhost:3000")
public class DemoController {
    // GET /hello?name=Tom
    @GetMapping("/hello")
    public String hello(@RequestParam String name) {
        return "hello " + name;
    }
    // GET /order/100
    @GetMapping("/order/{id}")
    public String getOrder(@PathVariable("id") Long orderId) {
        return "order id = " + orderId;
    }
}

五、條件裝配注解(自動配置核心)

Spring Boot 的自動配置本質(zhì)上就是:根據(jù)條件裝配不同的 Bean,因此 @ConditionalOnXXX 是理解自動配置的關(guān)鍵。

注解作用
@Conditional通用條件裝配(需自定義 Condition 接口實現(xiàn),很少直接在業(yè)務(wù)代碼中使用,多見于基礎(chǔ)框架)。
@ConditionalOnClass當類路徑中存在指定類時,才加載當前 Bean(如 @ConditionalOnClass(DataSource.class))。
@ConditionalOnMissingClass當類路徑中不存在指定類時,才加載當前 Bean。
@ConditionalOnBean當 IOC 容器中存在指定 Bean 時,才加載當前 Bean。
@ConditionalOnMissingBean當 IOC 容器中不存在指定 Bean 時,才加載當前 Bean(用于提供默認實現(xiàn),典型場景:允許用戶自定義覆蓋)。
@ConditionalOnProperty當配置文件中存在指定屬性且值符合條件時,才加載當前 Bean(如 @ConditionalOnProperty(prefix="redis", name="enable", havingValue="true"))。
@ConditionalOnResource當類路徑中存在指定資源(如文件)時,才加載當前 Bean。

代碼示例:@ConditionalOnProperty 控制功能開關(guān)

// application.yml
feature:
  sms:
    enabled: true
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;
@Component
@ConditionalOnProperty(prefix = "feature.sms", name = "enabled", havingValue = "true")
public class SmsSender {
    // 只有當 feature.sms.enabled = true 時才會裝配
}

理解自動配置的一句話:自動配置 = 一堆 @Configuration 類 + 各種 @ConditionalOnXXX 條件判斷 + SpringFactoriesLoader 加載機制。

六、功能啟用注解(@Enable 系列)

以下注解用于開啟 Spring Boot 的擴展功能,本質(zhì)上是導(dǎo)入對應(yīng)配置類,再配合條件裝配完成 Bean 注冊。

注解作用
@EnableAutoConfiguration開啟自動配置(@SpringBootApplication已包含此注解)。
@EnableScheduling開啟任務(wù)調(diào)度(支持@Scheduled注解)。
@EnableAsync開啟異步方法支持(配合@Async使用)。
@EnableCaching開啟緩存支持(配合@Cacheable、@CachePut等注解)。
@EnableTransactionManagement開啟聲明式事務(wù)支持(配合@Transactional使用)。
@EnableFeignClients開啟 Feign 客戶端(用于微服務(wù)遠程調(diào)用)。

代碼示例:@EnableScheduling + @Scheduled 定時任務(wù)

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@SpringBootApplication
@EnableScheduling
public class ScheduleApplication {
    public static void main(String[] args) {
        SpringApplication.run(ScheduleApplication.class, args);
    }
}
@Component
class TaskJob {
    // 每 5 秒執(zhí)行一次
    @Scheduled(fixedRate = 5000)
    public void run() {
        System.out.println("task running...");
    }
}

七、其他常用注解

注解作用
@Transactional聲明事務(wù)(標記方法或類,支持事務(wù)隔離級別、傳播行為等配置,是 Spring 事務(wù)的核心入口)。
@Valid/@Validated開啟參數(shù)校驗(配合 jakarta.validation 約束注解,如 @NotBlank、@Max)。
@Profile標記 Bean 僅在指定環(huán)境(如 dev、prod)中生效(通過 spring.profiles.active 配置激活)。
@Import手動導(dǎo)入其他配置類或 Bean(類似 XML 中的 <import>,可實現(xiàn)簡易模塊組合)。
@Aspect標記 AOP 切面類(配合 @Pointcut、@Before 等實現(xiàn)切面編程)。

常見面試點簡要說明

  • @Transactional
    • 默認只對 RuntimeException 及其子類 回滾,如需對受檢異?;貪L要顯式配置 rollbackFor。
    • 作用在接口/類/方法上,以方法級別優(yōu)先;注意自調(diào)用導(dǎo)致事務(wù)失效的問題。
  • @Profile
    • 常與多數(shù)據(jù)源、多環(huán)境配置一起使用;可以用 @Profile("dev") 標記開發(fā)環(huán)境專用 Bean。
    • 生產(chǎn)環(huán)境通常通過 JVM 參數(shù)或配置中心設(shè)置 spring.profiles.active。

代碼示例:@Transactional 聲明式事務(wù)

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class OrderService {
    @Transactional(rollbackFor = Exception.class)
    public void createOrder() {
        // 1. 插入訂單表
        // 2. 扣減庫存
        // 3. 發(fā)生異常時整體回滾
    }
}

代碼示例:@Valid 參數(shù)校驗

// 引入依賴(通常在 pom.xml 中):
// spring-boot-starter-validation
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Max;
public class UserDTO {
    @NotBlank(message = "用戶名不能為空")
    private String name;
    @Max(value = 120, message = "年齡不能超過 120")
    private int age;
    // getter / setter 省略
}
import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ValidateController {
    @PostMapping("/users")
    public String create(@Valid @RequestBody UserDTO user) {
        return "ok";
    }
}

到此這篇關(guān)于SpringBoot 常用注解的文章就介紹到這了,更多相關(guān)springboot 常用注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Zookeeper連接超時問題與拒絕連接的解決方案

    Zookeeper連接超時問題與拒絕連接的解決方案

    今天小編就為大家分享一篇關(guān)于Zookeeper連接超時問題與拒絕連接的解決方案,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Java中的volatile實現(xiàn)機制詳細解析

    Java中的volatile實現(xiàn)機制詳細解析

    這篇文章主要介紹了Java中的volatile實現(xiàn)機制詳細解析,本文的主要內(nèi)容就在于要理解volatile的緩存的一致性協(xié)議導(dǎo)致的共享變量可見性,以及volatile在解析成為匯編語言的時候?qū)ψ兞考渔i兩塊理論內(nèi)容,需要的朋友可以參考下
    2024-01-01
  • 關(guān)于Jackson的JSON工具類封裝 JsonUtils用法

    關(guān)于Jackson的JSON工具類封裝 JsonUtils用法

    這篇文章主要介紹了關(guān)于Jackson的JSON工具類封裝 JsonUtils用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 使用Spring Boot實現(xiàn)操作數(shù)據(jù)庫的接口的過程

    使用Spring Boot實現(xiàn)操作數(shù)據(jù)庫的接口的過程

    本文給大家分享使用Spring Boot實現(xiàn)操作數(shù)據(jù)庫的接口的過程,包括springboot原理解析及實例代碼詳解,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • 使用SpringBoot中整合Redis

    使用SpringBoot中整合Redis

    這篇文章主要介紹了使用SpringBoot中整合Redis,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java實現(xiàn)帶GUI的氣泡詩詞效果

    Java實現(xiàn)帶GUI的氣泡詩詞效果

    這篇文章主要為大家介紹了如何利用Java實現(xiàn)帶GUI的氣泡詩詞效果,文中的示例代碼講解詳細,對我們學(xué)習Java有一定幫助,感興趣的可以了解一下
    2022-12-12
  • 關(guān)于@JSONField和@JsonFormat的使用區(qū)別說明

    關(guān)于@JSONField和@JsonFormat的使用區(qū)別說明

    這篇文章主要介紹了關(guān)于@JSONField 和 @JsonFormat的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot中的跨域詳解

    SpringBoot中的跨域詳解

    這篇文章主要介紹了SpringBoot中的跨域詳解,在瀏覽器上當前訪問的網(wǎng)站,向另一個網(wǎng)站發(fā)送請求,用于獲取數(shù)據(jù)的過程就是跨域請求,跨域是瀏覽器的同源策略決定的,是一個重要的瀏覽器安全策略,需要的朋友可以參考下
    2023-08-08
  • Java Swing JComboBox下拉列表框的示例代碼

    Java Swing JComboBox下拉列表框的示例代碼

    這篇文章主要介紹了Java Swing JComboBox下拉列表框的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-12-12
  • Spring?Boot項目優(yōu)雅上線之日志、監(jiān)控、異常處理最佳實踐指南

    Spring?Boot項目優(yōu)雅上線之日志、監(jiān)控、異常處理最佳實踐指南

    要讓Spring Boot項目優(yōu)雅、穩(wěn)健地上線并持續(xù)高效運行,日志、監(jiān)控、異常處理就是那不可或缺的 儀表盤、導(dǎo)航和故障預(yù)警系統(tǒng),是我們必須重視的關(guān)鍵環(huán)節(jié),這篇文章主要介紹了Spring?Boot項目優(yōu)雅上線之日志、監(jiān)控、異常處理最佳實踐指南的相關(guān)資料,需要的朋友可以參考下
    2026-05-05

最新評論

龙岩市| 吉首市| 盘山县| 九龙坡区| 阳东县| 宁蒗| 桦南县| 荆门市| 石渠县| 乌什县| 七台河市| 永春县| 武隆县| 西峡县| 惠水县| 襄汾县| 揭西县| 巴塘县| 务川| 赣榆县| 沅江市| 泰宁县| 黄山市| 东城区| 马边| 平顺县| 广水市| 临清市| 永和县| 明星| 罗江县| 宁城县| 水富县| 迭部县| 博客| 伽师县| 齐齐哈尔市| 庆安县| 惠东县| 施甸县| 安新县|