中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

做單掙錢(qián)的網(wǎng)站灰色關(guān)鍵詞排名技術(shù)

做單掙錢(qián)的網(wǎng)站,灰色關(guān)鍵詞排名技術(shù),永川網(wǎng)站建設(shè),哈爾濱住房和城鄉(xiāng)建設(shè)信息網(wǎng)官網(wǎng)Spring使用 資源 Spring 框架內(nèi)部使用 Resource 接口作為所有資源的抽象和訪(fǎng)問(wèn)接口,在上一篇文章的示例代碼中的配置文件是通過(guò)ClassPathResource 進(jìn)行封裝的,ClassPathResource 是 Resource 的一個(gè)特定類(lèi)型的實(shí)現(xiàn),代表的是位于 classpath …

Spring使用

資源

Spring 框架內(nèi)部使用 Resource 接口作為所有資源的抽象和訪(fǎng)問(wèn)接口,在上一篇文章的示例代碼中的配置文件是通過(guò)ClassPathResource 進(jìn)行封裝的,ClassPathResource 是 Resource 的一個(gè)特定類(lèi)型的實(shí)現(xiàn),代表的是位于 classpath 中的資源。

對(duì)不同來(lái)源的資源文件 Spring 都提供了相應(yīng)的實(shí)現(xiàn):文件(FileSystemResource )、ClassPath資源(ClassPathResource)、URL資源(UrlResource)、InputStream資源(InputStreamResource)、ByteArray資源(ByteArrayResource)等。

注解

spring mvc注解.png

宏觀:

①Service

@Service 注解是用來(lái)聲明服務(wù)層(Service Layer)組件,通常包含業(yè)務(wù)邏輯,作為數(shù)據(jù)訪(fǎng)問(wèn)層(Data Access Layer)和控制器(Controller Layer)之間的橋梁。

  • 它是一個(gè)立即加載的注解,這意味著當(dāng) Spring 應(yīng)用程序啟動(dòng)時(shí),Spring 容器就會(huì)創(chuàng)建標(biāo)注了 @Service 的類(lèi)的實(shí)例。
  • @Service 是一個(gè)特殊類(lèi)型的 @Component 注解。它允許自動(dòng)檢測(cè)通過(guò)類(lèi)路徑掃描,為其創(chuàng)建 Bean 定義并注冊(cè)到 Spring 容器中。
  • 它有助于區(qū)分 Spring 組件的表示層(Controller)、服務(wù)層(Service)和數(shù)據(jù)訪(fǎng)問(wèn)層(Repository)。

②Controller

用于標(biāo)記一個(gè)類(lèi)作為 Spring MVC 控制器組件。控制器負(fù)責(zé)處理由 DispatcherServlet 分發(fā)的來(lái)自瀏覽器或其他客戶(hù)端的 HTTP 請(qǐng)求。這個(gè)注解會(huì)將類(lèi)識(shí)別為一個(gè) Bean,并注冊(cè)到 Spring 應(yīng)用上下文中。

  • 通常與 @RequestMapping 或其他基于 HTTP 方法的注解(@GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping)配合使用,以定義訪(fǎng)問(wèn)該控制器方法的 URL 模式和請(qǐng)求類(lèi)型。
  • 允許通過(guò)依賴(lài)注入引入其他層級(jí)的服務(wù)或組件,比如服務(wù)層 (@Service) 或數(shù)據(jù)訪(fǎng)問(wèn)層 (@Repository)。
  • 與視圖技術(shù)(如 Thymeleaf、JSP 等)協(xié)同工作,可以返回 String 類(lèi)型的視圖名,由視圖解析器進(jìn)一步處理。
  • 當(dāng)使用 Spring Boot 和 RESTful Web 服務(wù)時(shí),通常會(huì)結(jié)合 @RestController 注解來(lái)使用,它是 @Controller@ResponseBody 的組合體,這意味著控制器的所有響應(yīng)默認(rèn)都會(huì)轉(zhuǎn)換成 JSON 或 XML 格式返回給客戶(hù)端。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.ui.Model;@Controller
public class MyController {@RequestMapping("/greet")public String greet(Model model) {model.addAttribute("message", "Hello, World!");return "greeting"; // 返回視圖名稱(chēng),通常是一個(gè) HTML 頁(yè)面}
}

③Repository

用于標(biāo)識(shí)持久層組件(如DAO組件)的特殊化 @Component 注解。當(dāng)你在類(lèi)上使用 @Repository 注解時(shí),它會(huì)告知 Spring 容器該類(lèi)是一個(gè) Bean,并且用于封裝數(shù)據(jù)訪(fǎng)問(wèn)異常,將底層數(shù)據(jù)訪(fǎng)問(wèn)技術(shù)拋出的異常轉(zhuǎn)換為 Spring 的 DataAccessException

// 告訴Spring,讓Spring創(chuàng)建一個(gè)名字叫“userDao”的UserDaoImpl實(shí)例。
@Repository(value="userDao")
public class UserDaoImpl extends BaseDaoImpl<User> {
………
}// 注入userDao,從數(shù)據(jù)庫(kù)中根據(jù)用戶(hù)Id取出指定用戶(hù)時(shí)需要用到
@Resource(name = "userDao")
private BaseDao<User> userDao;

④Configuration

@Configuration 是表明某個(gè)類(lèi)是用來(lái)作為 bean 定義的源的。被 @Configuration 注解的類(lèi)通常包含了一個(gè)或多個(gè)標(biāo)記有 @Bean 注解的方法。Spring 容器會(huì)在運(yùn)行時(shí)自動(dòng)調(diào)用這些方法,將返回對(duì)象注冊(cè)為容器中的 bean。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyServiceImpl();}
}
// AppConfig 類(lèi)被標(biāo)注為 @Configuration,這意味著它可以包含 bean 定義。myService 方法上的 @Bean 注解告訴 Spring,這個(gè)方法將返回一個(gè)對(duì)象,該對(duì)象需要被注冊(cè)為應(yīng)用程序上下文中的一個(gè) bean。默認(rèn)情況下,bean 的名稱(chēng)與方法名相同,但可以通過(guò) @Bean 注解的 name 屬性來(lái)自定義。// 這種配置方式實(shí)現(xiàn)了代碼的模塊化,并且取代了傳統(tǒng)的 XML 配置文件,使得配置更加清晰和類(lèi)型安全

⑤Resource

  • @Resource 默認(rèn)按照 by-name 自動(dòng)裝配,即根據(jù) bean 的名稱(chēng)進(jìn)行匹配;如果沒(méi)有找到與名稱(chēng)匹配的 bean,則會(huì)退回到 by-type 自動(dòng)裝配(首先嘗試依據(jù)屬性名作為 bean 名稱(chēng)查找,如果失敗則按類(lèi)型裝配)。而 @Autowired 默認(rèn)按照 by-type 自動(dòng)裝配。
  • @Resource 所標(biāo)注的自動(dòng)裝配過(guò)程是在 bean 屬性設(shè)置完成之后、初始化方法(如 @PostConstruct 注解的方法)之前進(jìn)行的,而 @Autowired 則是在構(gòu)造器、字段、setter 方法或其他任意帶有參數(shù)的方法上使用。
import javax.annotation.Resource;
@Component
public class MyComponent {// By name@Resource(name = "myBean")private MyBean myBeanByName;// By type (當(dāng)存在多個(gè)相同類(lèi)型的 bean 時(shí),可能需要指定 name 來(lái)避免沖突)@Resourceprivate MyBean myBeanByType;public void doSomething() {// 使用 myBeanByName 和 myBeanByType 完成一些操作...}
}
// @Resource 注解有兩個(gè)重要的屬性:name 和 type:
name: 指定要注入的 bean 的名稱(chēng)。
type: 指定要注入的 bean 的類(lèi)型。
微觀

① Async:將方法標(biāo)注為異步執(zhí)行

在一個(gè)普通的方法或者類(lèi)中調(diào)用了由 @Async 注解標(biāo)記的方法,那么當(dāng)前線(xiàn)程會(huì)立即返回,而實(shí)際執(zhí)行的過(guò)程會(huì)在另外的線(xiàn)程中進(jìn)行,當(dāng)前線(xiàn)程將繼續(xù)執(zhí)行自身的任務(wù)。

@Service
public class MyService {@Autowiredprivate EmailService emailService;@Asyncpublic void sendEmails(List<String> recipients, String content) {for (String recipient : recipients) {emailService.sendEmail(recipient, content);}System.out.println("All emails sent!");}
}

②Autowired:自動(dòng)裝配依賴(lài)的 bean。

@Autowired 注解是 Spring Framework 中的一個(gè)依賴(lài)注入注解,它可以自動(dòng)將容器中已經(jīng)創(chuàng)建好的 bean 對(duì)象裝配到需要他們的類(lèi)或者方法中。默認(rèn)先按byType進(jìn)行匹配,如果發(fā)現(xiàn)找到多個(gè)bean,則又按照byName方式進(jìn)行匹配,如果還有多個(gè),則報(bào)出異常

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class MyComponent {private final Dependency dependency;// 構(gòu)造器注入,如果容器中不存在Dependency類(lèi)型的Bean,應(yīng)用將無(wú)法啟動(dòng)@Autowired(required = true)public MyComponent(Dependency dependency) {this.dependency = dependency;}// 如果容器中不存在OptionalDependency類(lèi)型的Bean,則dependency字段將為null,但應(yīng)用依舊會(huì)啟動(dòng)@Autowired(required = false)private OptionalDependency optionalDependency;
}

③Bean:聲明一個(gè)需要被 Spring 管理的 bean

@Configuration // 添加了 @Configuration 注解來(lái)標(biāo)識(shí)這是一個(gè)配置類(lèi),因此 Spring 容器在掃描時(shí)會(huì)識(shí)別并加載該類(lèi)。
public class MyConfiguration {@Beanpublic UserDao userDao() {return new JdbcUserDao(dataSource());}@@Bean(“myBean”) // 這樣可以在裝配其他依賴(lài)項(xiàng)時(shí)方便地引用該 bean 對(duì)象。public DataSource dataSource() {// 創(chuàng)建并配置數(shù)據(jù)源對(duì)象return new HikariDataSource(config);}
}

在上面的代碼中,我們定義了一個(gè)配置類(lèi) MyConfiguration,并在其中定義了兩個(gè) bean 對(duì)象:userDao() 和 dataSource()。其中 userDao() 方法返回 JdbcUserDao 對(duì)象,而 dataSource() 方法返回一個(gè) Hikari 數(shù)據(jù)源對(duì)象。這兩個(gè)方法都標(biāo)記了 @Bean 注解,這意味著它們會(huì)被 Spring 容器掃描到并將創(chuàng)建的對(duì)象注冊(cè)到容器中。

④Cacheable:增加緩存支持

@Cacheable 是 Spring Framework 中的一個(gè)注解,用于實(shí)現(xiàn)方法級(jí)別的緩存。使用 @Cacheable 注解的方法在調(diào)用時(shí),將會(huì)檢查緩存中是否存在與該方法所需參數(shù)相對(duì)應(yīng)的緩存項(xiàng)。如果存在,則直接返回緩存結(jié)果,不再執(zhí)行被注解的方法;如果不存在,則執(zhí)行該方法,并將方法的返回結(jié)果添加到緩存中。

@Service
public class UserService {private final UserMapper userMapper;public UserService(UserMapper userMapper) {this.userMapper = userMapper;}@Cacheable(value = "users", key = "#userId")public User getUserById(int userId) {return userMapper.getUserById(userId);}}

⑤ Conditional

Conditional用于根據(jù)特定條件動(dòng)態(tài)決定是否創(chuàng)建某個(gè) Bean 實(shí)例,Spring 還提供了一些預(yù)定義的條件注解,如 @Profile、@ConditionalOnMissingClass、@ConditionalOnProperty 等,它們可以方便地滿(mǎn)足一些常見(jiàn)的判斷場(chǎng)景,減少了編寫(xiě)自定義條件類(lèi)的工作量。

@Configuration
public class MyConfiguration {@Bean@Conditional(MyCondition.class)public MyBean myBean() {return new MyBean();}
}public class MyCondition implements Condition {@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {// TODO: 自定義條件判斷邏輯return true; // 當(dāng)結(jié)果為 true 時(shí),表示條件成立,按照要求創(chuàng)建 Bean;否則,則不會(huì)創(chuàng)建這個(gè) Bean。}
}
使用 @Profile 注解可以確保只有相關(guān)的 beans 在特定的環(huán)境配置下被創(chuàng)建,這樣可以避免在不適合的環(huán)境中運(yùn)行可能引起沖突或異常的 beans,并有助于維護(hù)清晰的環(huán)境特定配置。
@Profile("development")
@Profile("production")根據(jù)設(shè)置系統(tǒng)屬性: -Dspring.profiles.active=development
或者使用環(huán)境變量設(shè)置 SPRING_PROFILES_ACTIVE=development等來(lái)切換profile

⑥ConstructorBinding

用于表示在使用基于構(gòu)造器的依賴(lài)注入時(shí),應(yīng)該將配置屬性綁定到構(gòu)造器參數(shù)上

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.ConstructorBinding;@ConstructorBinding
@ConfigurationProperties(prefix = "app") //指定哪個(gè)前綴的配置屬性應(yīng)被綁定到該類(lèi)的字段上,Spring Boot 將會(huì)查找 app.name 和 app.threadPoolSize 配置項(xiàng),并通過(guò)構(gòu)造器自動(dòng)注入相應(yīng)的值。
public class AppConfigProperties {private final String name;private final int threadPoolSize;public AppConfigProperties(String name, int threadPoolSize) {this.name = name;this.threadPoolSize = threadPoolSize;}// Getters for the fieldspublic String getName() {return name;}public int getThreadPoolSize() {return threadPoolSize;}
}

⑦ControllerAdvice

@ControllerAdvice 是 Spring MVC 框架中的注解,用于定義一個(gè)全局性的異常處理器類(lèi)??梢詫?duì) Controller 層面和全局異常進(jìn)行統(tǒng)一的處理。

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler({NullPointerException.class, IllegalArgumentException.class}) //當(dāng)捕獲到空指針異?;蛘叻欠▍?shù)異常時(shí),會(huì)執(zhí)行這個(gè)方法,將異常信息添加到 request 中,并返回 “error” 視圖。public String handleException(Exception e, HttpServletRequest request) {request.setAttribute("error", e);return "error";}
}

⑧CrossOrigin

同源策略阻止一個(gè)域下的文檔或腳本與另一個(gè)域下的資源進(jìn)行交互。這有助于保護(hù)用戶(hù)免受惡意網(wǎng)站的攻擊,但也限制了合法的跨源請(qǐng)求。

例如,如果你的頁(yè)面在 https://www.example.com 上運(yùn)行,而嘗試通過(guò) AJAX 請(qǐng)求從 https://api.another-site.com 獲取數(shù)據(jù),這將被默認(rèn)視為跨域請(qǐng)求,并可能遭到瀏覽器的阻止,除非目標(biāo)服務(wù)器明確允許來(lái)自原始域的請(qǐng)求。
@RestController
@RequestMapping("/api")
public class ApiController {@CrossOrigin(origins = "http://localhost:8080")@GetMapping("/users/{id}")public User getUserById(@PathVariable Long id) {// ...}
}

⑨EnableAsync

在處理一些 IO 密集型操作時(shí),非常有用

@Configuration
@EnableAsync // @EnableAsync 注解需要與異步方法搭配使用,異步方法需要用 @Async 標(biāo)記。
public class AppConfig {@Beanpublic Executor taskExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(10);executor.setMaxPoolSize(20);executor.setQueueCapacity(30);executor.initialize();return executor;}
}

⑩RequestMapping

@RequestMapping 的專(zhuān)門(mén)化版本提供了更簡(jiǎn)潔的語(yǔ)法。這些包括 @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping。每個(gè)都對(duì)應(yīng)于一個(gè) HTTP 方法,使得代碼更加簡(jiǎn)潔易讀。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
@RequestMapping("/api")
public class MyController {@GetMapping("/hello") // 等同于 @RequestMapping(value = "/hello", method = GET)@ResponseBodypublic String helloWorld() {return "Hello, World!";}@PostMapping("/submit") // 等同于 @RequestMapping(value = "/submit", method = POST)@ResponseBodypublic String submitForm() {// 方法實(shí)現(xiàn)return "Form submitted";}
}
其他

①lazy

@Lazy 是 Spring 框架中的注解之一,它用于控制 Bean 的實(shí)例化時(shí)間。通過(guò)在容器中標(biāo)記一個(gè) Bean 為 @Lazy,可以讓 Spring 容器在第一次使用這個(gè) Bean 時(shí)再進(jìn)行實(shí)例化。相對(duì)應(yīng)的,如果不加 @Lazy 注解,則默認(rèn)情況下 Spring 容器會(huì)在啟動(dòng)時(shí)就實(shí)例化該 Bean。

@Service
@Lazy // 使用 @Lazy 注解,Spring 容器將在第一次使用 UserService 的實(shí)例時(shí)才進(jìn)行實(shí)例化而不是在啟動(dòng)時(shí)就實(shí)例化
public class UserService {// ...
}

②Import

允許我們?cè)谝粋€(gè)配置類(lèi)中引入其他配置類(lèi)或普通的 Java 類(lèi)

@Configuration
@Import({DataSourceConfig.class, RedisConfig.class, ServiceUtils.class})
public class AppConfig {// ...
}
// 在創(chuàng)建 Spring ApplicationContext 時(shí),這三個(gè)配置類(lèi)都會(huì)被加載并注冊(cè)為 Spring 的 bean。
// 可以在 AppConfig 中使用 ServiceUtils 類(lèi)中的方法或?qū)傩?/span>

③元注解

  • @Target:指定注解可以應(yīng)用于 Java 的哪些元素(如類(lèi)、方法、字段等)。
  • @Retention:指定注解在什么級(jí)別可用(源碼、類(lèi)文件或運(yùn)行時(shí))。
  • @Documented:指定注解是否應(yīng)該被 javadoc 工具記錄。
  • @Inherited:指定注解是否可以被子類(lèi)繼承。
  • @Component:Spring 特有的元注解,用于聲明一個(gè)類(lèi)是 Spring 組件。其它注解如 @Service, @Repository, @Controller 都是用 @Component 注解的例子。

④Valid

在控制器方法的參數(shù)列表中使用 @Valid ( @NotNull、@Min、@Max、@Size、@Email…)注解來(lái)實(shí)現(xiàn)請(qǐng)求參數(shù)的校驗(yàn)。

@RestController
@RequestMapping("/users")
public class UserController {@PostMappingpublic User createUser(@Valid @RequestBody User user) {// 保存用戶(hù)信息到數(shù)據(jù)庫(kù)}// ...
}// 校驗(yàn)的規(guī)則通常定義在 User 類(lèi)的屬性上
public class User {@NotBlankprivate String username;@Pattern(regexp = "^[a-zA-Z0-9]+@[a-zA-Z0-9]+\\.[a-zA-Z]{2,}$", message = "Email 格式錯(cuò)誤")private String email;
}
第三方
  1. @Data

    @Data注解是Lombok庫(kù)的一部分,非Spring框架本身的一部分。當(dāng)你在一個(gè)類(lèi)上使用@Data注解,Lombok會(huì)自動(dòng)生成以下代碼:

    • 所有字段的getter方法
    • 所有非最終字段的setter方法
    • toString()方法
    • equals()hashCode()方法
    • 一個(gè)包含所有非靜態(tài)、非瞬態(tài)字段的構(gòu)造函數(shù)

    這大大減少了樣板代碼的數(shù)量,使得類(lèi)的定義更加簡(jiǎn)潔

  2. @Mapper

    @Mapper注解是MyBatis框架的一部分,它主要用于標(biāo)記一個(gè)接口作為數(shù)據(jù)庫(kù)操作的映射接口。MyBatis通過(guò)這個(gè)接口關(guān)聯(lián)XML配置文件或者注解中定義的數(shù)據(jù)庫(kù)操作。

    @Mapper
    public interface UserMapper {User selectUserById(Long id);
    }// 在Spring Boot項(xiàng)目中,通常還會(huì)配合使用@MapperScan注解來(lái)指定需要掃描的@Mapper接口所在的包路徑。
    @SpringBootApplication
    @MapperScan("com.example.project.mapper")
    public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
    }
    
http://www.risenshineclean.com/news/30811.html

相關(guān)文章:

  • 模板做的網(wǎng)站不好優(yōu)化手機(jī)網(wǎng)站模板免費(fèi)下載
  • 良鄉(xiāng)網(wǎng)站建設(shè)百度應(yīng)用
  • 經(jīng)營(yíng)網(wǎng)站需要什么資質(zhì)網(wǎng)站推廣在哪好
  • 自己做新聞網(wǎng)站推廣衣服的軟文
  • vs2017 如何做網(wǎng)站網(wǎng)絡(luò)營(yíng)銷(xiāo)課程主要講什么內(nèi)容
  • 贛州市微程網(wǎng)絡(luò)科技有限公司徐州自動(dòng)seo
  • 網(wǎng)站業(yè)務(wù)費(fèi)如何做記賬憑證優(yōu)化分析
  • 做網(wǎng)站做推廣有效果嗎做廣告推廣哪個(gè)平臺(tái)好
  • 企業(yè)官網(wǎng)建站流程免費(fèi)建站的網(wǎng)站哪個(gè)好
  • 自助免費(fèi)建站系統(tǒng)電池優(yōu)化大師下載
  • 河北保定疫情最新消息今天封城了seo權(quán)重是什么意思
  • 如何用電腦做網(wǎng)站服務(wù)器市場(chǎng)seo是什么意思
  • 政府網(wǎng)站建設(shè)公司 政務(wù)qq推廣引流網(wǎng)站
  • 境外公司注冊(cè)優(yōu)化工具箱下載
  • 做圖網(wǎng)站有哪些線(xiàn)上網(wǎng)絡(luò)推廣怎么做
  • 導(dǎo)航欄網(wǎng)站模板特效搭建一個(gè)網(wǎng)站的流程
  • 中國(guó)企業(yè)培訓(xùn)網(wǎng)蘭州seo培訓(xùn)
  • 如何建設(shè)網(wǎng)站山東濟(jì)南興田德潤(rùn)官網(wǎng)域名檢測(cè)工具
  • 俄語(yǔ)網(wǎng)站建設(shè)公司沒(méi)經(jīng)驗(yàn)可以做電商運(yùn)營(yíng)嗎
  • 模仿京東商城網(wǎng)站開(kāi)發(fā)視頻蘋(píng)果自研搜索引擎或?yàn)樘娲雀?/a>
  • 免抵退稅在哪個(gè)網(wǎng)站做北京新聞最新消息
  • 電商網(wǎng)站建設(shè)與運(yùn)營(yíng)seo專(zhuān)員工作容易學(xué)嗎
  • 順德新網(wǎng)站制作行業(yè)關(guān)鍵詞一覽表
  • 個(gè)人網(wǎng)站如何做專(zhuān)業(yè)的營(yíng)銷(xiāo)團(tuán)隊(duì)哪里找
  • 廣州做網(wǎng)站哪家好網(wǎng)站推廣怎么做有效果
  • 網(wǎng)站公安備案網(wǎng)址電商平臺(tái)怎么加入
  • 凡科免費(fèi)建設(shè)企業(yè)網(wǎng)站靠譜嗎個(gè)人做外貿(mào)怎樣起步
  • 電子商務(wù)網(wǎng)站建設(shè)花費(fèi)今日新聞?lì)^條新聞最新
  • 泗陽(yáng)城鄉(xiāng)建設(shè)局網(wǎng)站域名seo查詢(xún)
  • 百度優(yōu)化網(wǎng)站建設(shè)wordpress外貿(mào)獨(dú)立站