Spring Boot 常用注解

一、放在类上面,让 Spring 管理这个类

@Component

把这个工具类交给 Spring 管理,别的类可以直接拿来用

类上写法

复制代码
@Component
public class CacheClient {
    public void set(String key, Object value) {
        // 存Redis
    }
}

别的类怎么引用

复制代码
@Service
public class ShopService {
    // 直接引用上面的 CacheClient
    @Autowired
    private CacheClient cacheClient;

    public void save() {
        cacheClient.set("key", "value");
    }
}

@Service

业务类交给 Spring 管理,Controller 可以调用

类上写法

复制代码
@Service
public class ShopService {
    public Shop getById(Long id) {
        // 查询店铺
        return new Shop();
    }
}

别的类怎么引用

复制代码
@RestController
public class ShopController {
    // 引用 Service
    @Autowired
    private ShopService shopService;

    @GetMapping("/shop/{id}")
    public Shop getShop(@PathVariable Long id) {
        return shopService.getById(id);
    }
}

@RestController

接收前端请求,提供接口,不用别人引用它

写法

复制代码
@RestController
@RequestMapping("/shop")
public class ShopController {
    // 前端访问 /shop/1 就会进来
    @GetMapping("/{id}")
    public String test() {
        return "hello";
    }
}

@Mapper

数据库操作接口,Service 里可以调用查库

写法

复制代码
@Mapper
public interface ShopMapper {
    Shop selectById(Long id);
}

别的类怎么引用

复制代码
@Service
public class ShopService {
    @Autowired
    private ShopMapper shopMapper;

    public Shop getById(Long id) {
        return shopMapper.selectById(id);
    }
}

@Configuration

配置类,里面定义工具,别人可以引用

写法

复制代码
@Configuration
public class ThreadPoolConfig {
    @Bean
    public ExecutorService threadPool() {
        return Executors.newFixedThreadPool(10);
    }
}

别的类怎么引用

复制代码
@Service
public class ShopService {
    @Autowired
    private ExecutorService threadPool;
}

二、加在方法上:自动执行

@PostConstruct

对象一创建好,方法自动跑一次

复制代码
@Service
public class ShopService {
    @Autowired
    private CacheClient cacheClient;

    // 项目启动自动执行
    @PostConstruct
    public void preload() {
        System.out.println("启动自动存缓存");
        cacheClient.set("hotShops", "店铺数据");
    }
}

@PreDestroy

项目关闭前自动执行一次

复制代码
@Component
public class MyCleaner {
    @PreDestroy
    public void close() {
        System.out.println("项目关闭,释放资源");
    }
}

三、数据库事务

@Transactional

方法内报错,所有数据库操作全部回滚

复制代码
@Service
public class ShopService {
    @Transactional
    public void update(Shop shop) {
        // 一步错,全部回滚
        mapper.updateById(shop);
    }
}
相关推荐
葫芦和十三2 小时前
图解 MongoDB 23|两地三中心:跨可用区部署怎么扛机房故障
后端·mongodb·agent
勇哥java实战分享4 小时前
PaddleOCR 太慢?我换成 RapidOCR 后,速度直接起飞
后端
苏三说技术9 小时前
LangChain4j 和 LangGraph4j,哪个更好?
后端
ServBay10 小时前
7 个AI开发中真正用得上的 MCP Server,配合Claude Code食用效果更佳
后端·claude·mcp
妙码生花10 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十五):优化细节、网络请求封装
前端·后端·ai编程
用户67570498850211 小时前
Go 语言里判断字符串为空,90% 的人都写错了!
后端·go
Flittly11 小时前
【AgentScope Java新手村系列】(16)从RAG到多路检索
java·spring boot·spring
用户67570498850211 小时前
Go 进阶必修:90% 的人都没用对的“表驱动法”
后端·go
小兔崽子去哪了11 小时前
Java 生成二维码解决方案
java·后端