当前位置: 首页 > news >正文

做动漫头像的网站2008r2做网站

做动漫头像的网站,2008r2做网站,企业 cms,上海网站建设shzanen✅ 目标: 搜索模块支持不同内容类型(攻略、达人、游记等)每种搜索逻辑用一个策略类表示自动注册(基于注解 Spring 容器)新增搜索类型时,只需添加一个类 一个注解,无需改工厂、注册表等&#x…

✅ 目标:

  • 搜索模块支持不同内容类型(攻略、达人、游记等)
  • 每种搜索逻辑用一个策略类表示
  • 自动注册(基于注解 + Spring 容器)
  • 新增搜索类型时,只需添加一个类 + 一个注解,无需改工厂、注册表等!

🛠️ 技术方案:

  • Spring Boot
  • 自定义注解 @SearchType("guide") 进行标记
  • 启动时由 Spring 自动扫描并注册到 Map<String, SearchStrategy>

📁 项目结构如下(Spring Boot)

search-system-springboot/
├── SearchSystemApplication.java
├── annotation/
│   └── SearchType.java
├── strategy/
│   ├── SearchStrategy.java
│   ├── GuideSearch.java
│   ├── ExpertSearch.java
│   ├── TravelNoteSearch.java
│   └── SearchStrategyFactory.java
└── controller/└── SearchController.java

✅ 关键文件内容如下:


🔹 SearchStrategy.java(策略接口)

package strategy;public interface SearchStrategy {void search(String keyword);
}

🔹 @SearchType 注解(用于标记策略类型)

package annotation;import java.lang.annotation.*;@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SearchType {String value(); // 类型名称,如 "guide"
}

🔹 SearchStrategyFactory.java(策略注册器)

package strategy;import annotation.SearchType;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;import java.util.HashMap;
import java.util.Map;@Component
public class SearchStrategyFactory {@Autowiredprivate ApplicationContext context;private final Map<String, SearchStrategy> strategyMap = new HashMap<>();@PostConstructpublic void init() {Map<String, Object> beans = context.getBeansWithAnnotation(SearchType.class);for (Object bean : beans.values()) {Class<?> clazz = bean.getClass();SearchType annotation = clazz.getAnnotation(SearchType.class);String type = annotation.value().toLowerCase();strategyMap.put(type, (SearchStrategy) bean);}}public SearchStrategy getStrategy(String type) {SearchStrategy strategy = strategyMap.get(type.toLowerCase());if (strategy == null) {throw new IllegalArgumentException("不支持的搜索类型: " + type);}return strategy;}
}

🔹 示例策略类 GuideSearch.java

package strategy;import annotation.SearchType;
import org.springframework.stereotype.Component;@Component
@SearchType("guide")
public class GuideSearch implements SearchStrategy {public void search(String keyword) {System.out.println("搜索攻略:" + keyword);}
}

🔹 示例策略类 ExpertSearch.java

package strategy;import annotation.SearchType;
import org.springframework.stereotype.Component;@Component
@SearchType("expert")
public class ExpertSearch implements SearchStrategy {public void search(String keyword) {System.out.println("搜索达人:" + keyword);}
}

🔹 控制器 SearchController.java

package controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import strategy.SearchStrategy;
import strategy.SearchStrategyFactory;@RestController
@RequestMapping("/search")
public class SearchController {@Autowiredprivate SearchStrategyFactory factory;@GetMappingpublic String search(@RequestParam String type, @RequestParam String keyword) {SearchStrategy strategy = factory.getStrategy(type);strategy.search(keyword);return "搜索成功:" + type + " -> " + keyword;}
}

🔹 启动类 SearchSystemApplication.java

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

✅ 如何运行:

  1. 新建 Spring Boot 项目(Maven/Gradle 都可以)
  2. 创建上述包和类(annotationstrategycontroller
  3. 启动项目后访问:
http://localhost:8080/search?type=guide&keyword=台北夜市

输出:

搜索攻略:台北夜市

🚀 如何新增一个搜索类型?

比如新增 TravelNoteSearch

@Component
@SearchType("travelnote")
public class TravelNoteSearch implements SearchStrategy {public void search(String keyword) {System.out.println("搜索游记:" + keyword);}
}

就完事了,无需改动任何已有类!开闭原则 ✔️


http://www.dtcms.com/a/472018.html

相关文章:

  • 学Java第三十五天------接口
  • Java的多态快速入门
  • 莆田社交网站安卓app软件开发教程
  • 做php网站的环境小说网站的内容做
  • 海洋网站建设公司自动生成logo的软件
  • 品牌设计网站怎么做标小智logo在线设计
  • 实时热搜榜榜单湖南seo推广多少钱
  • 高端网站建设价格经常使用( )对网页的布局进行控制
  • 大麦网抢票:基于Wireshark协议分析
  • 如何做一个静态网站健康管理 网站建设
  • 沈阳蓝德网站建设wordpress 后台登陆美化
  • 淘宝网站开发用到哪些技术受欢迎的徐州网站建设
  • 网站建设代码结构如何做网站网站代理
  • 网站刚刚开始怎么做优化推广seo
  • 企业网站的常见类型有网站备案是空间备案还是域名备案
  • 备案需要写网站建设方案书蚌埠百度做网站
  • 连接物理与数字世界 昂瑞微如何炼成射频芯片领域的领航者?
  • 二叉树的迭代遍历
  • 运营推广是什么工作sem优化软件哪家好
  • 广州网站建设哪个平台好胖子马wordpress模板:q8免费版
  • 青岛 建网站域名做网站
  • 企业网站的制作原则网站系统建设系广告经营者
  • 平谷网站建设公司视觉设计网站推荐
  • 蚌埠网站制作哪里有朝阳区住房和城乡建设部网站
  • 商城网站建设 优帮云徐州小学网站建设
  • 中国空间站成为全人类太空之家可以免费观看电视电影
  • c++ const_cast 用法
  • SOUI里实现打印预览续
  • C++基础:(十)vector 类的基础使用
  • 网站内容架构wordpress无法创建目录