配置注解
@Value
配合application.yaml文件使用,在里面配置属性,在java代码中获取属性
girl:
name: 小花
age: 18
content: content:${name},age:${age}@Value("${girl.name}")
private String name;
@Value("${girl.age}")
private Integer age;
@Value("${girl.content}")
private String content;@ConfigrationProperties
@Component
这两个可将属性配置到Bean,通过Component将Bean注解到Spring容器 “告诉 Spring:这个类你是我的 bean,帮我扫描、创建、放进容器,别人要用直接来拿。”
通过反射把下面的girlPropertis实例化 放进spring的大容器IOC容器 谁想用的话直接用@AutoWired注解注入使用
@Component 还有三个专用“马甲”,功能完全一样,只是语义更清晰:
| 注解 | 含义 | layer |
|---|---|---|
@Repository | 持久层(DAO) | DAO |
@Service | 业务层(Service) | Service |
@Controller / @RestController | 表现层(Web) | Controller |
- 生命周期小结
-
启动时包扫描(
@ComponentScan) -
遇到
@Component→ 创建 bean 定义 → 实例化 → 依赖注入 → 放进单例池 -
运行时别人直接注入即可,不用 new
@ConfigurationProperties(prefix="girl")
@Component
public class GirlProperties {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}@PostConstruct
java自带的初始化🪝注解,不是spring专有的哦
“bean 造好、依赖全部注完以后,立刻自动执行一次,用来做‘二次初始化’。”
@Component
public class CacheWarmup {
@Autowired
private DictService dictService; // 1. 先注入
private Map<String, String> cache = new HashMap<>();
@PostConstruct
public void load() { // 2. 再执行
cache = dictService.findAll();
System.out.println("字典缓存预热完成,共 " + cache.size() + " 条");
}
}注意事项
-
方法不能有参数;返回类型必须是
void -
方法可以私有(
private),Spring 照样反射调用 -
异常往外抛会导致整个容器启动失败
-
只在单例 bean 里保证执行;
prototypebean 由使用者自己触发
是java自带的注解,此注解标记的方法用于在对象创建后依赖注入完成后执行一些初始化操作。 和@PostConstruct对应的还有一个@PreDestroy,是在bean销毁时调用,通常需要做一些释放资源的操作。
在init()方法中取出所有的策略接口实现对象放入strategyMap 中,key为:userType+”:“+orderStatusEnum,即bean的名称,value为对象本身。
Map<String, OrderCancelStrategy> strategies = SpringUtil.getBeansOfType(OrderCancelStrategy.class); strategyMap.putAll(strategies); _log_.debug("订单取消策略类初始化到map完成!");
数据注解
@AllArgsConstructor
@NoArgsConstructor
无参构造器与全参构造器
@Date
DTO,VO等
参数注解
@PathVariable
路径参数的使用
@RequestBody
→当传入对象为json格式时使用
Spring MVC 中的一个注解,用于将控制器方法的返回值(如User对象)直接作为 HTTP 响应体(json等格式)返回给客户端。它通常用于构建 RESTful API,使得方法的返回值可以直接作为响应体发送给客户端
@RequestParam
-
用于接收 URL 查询参数(
?id=123) -
可设置默认值、是否必填:
如 List<Long> ids)
@PathVariable
@GetMapping("/user/{id}")
public User getUser(@PathVariable("id") Long uid) {
return userService.findById(uid);@RequestParam
必须要求,?后跟的请求参数
public void changePrice(@PathVariable Long id ,@RequestParam("price") BigDecimal price){
}@RequestParam 是 Spring MVC 中最常用的参数绑定注解之一,作用:把 URL 查询参数或表单字段映射到控制器方法形参。 基本用法(查询参数)
@GetMapping("/user")
public User getUser(@RequestParam("id") Long uid) { ... }
请求示例
GET /user?id=123 → uid = 123
参数名同形参可省略
@GetMapping("/user")
public User getUser(@RequestParam Long id) { ... }
GET /user?id=26 → id = 26
默认值 & 非必填
@GetMapping("/list")
public List\<User> list(
@RequestParam(required = false, defaultValue = "1") int page,
@RequestParam(required = false, defaultValue = "10") int size) { ... }
- 接收多值(数组/集合
- 接受map
请求参数
@PutMapping
修改
@GetMapping
@DeleteMapping
@PostMapping
无中生有
@PutMapping
修改
方法
@Transaction
SpringCache
@EnableCaching:开启缓存注解功能 @Cacheable:查询数据时缓存,将方法的返回值进行缓存。condition unless @CacheEvict:用于删除缓存,将一条或多条数据从缓存中删除。 @CachePut:用于更新缓存,将方法的返回值放到缓存中 @Caching:组合多个缓存注解; @CacheConfig:统一配置@Cacheable中的value值
生命周期
@PostConstruct
是java自带的注解,此注解标记的方法用于在对象创建后依赖注入完成后执行一些初始化操作。 和@PostConstruct对应的还有一个@PreDestroy,是在bean销毁时调用,通常需要做一些释放资源的操作。
在init()方法中取出所有的策略接口实现对象放入strategyMap 中,key为:userType+”:“+orderStatusEnum,即bean的名称,value为对象本身。
1.Bean定义类
-
@Component:通用的注解,任何类都可以用。 -
@Controller:标记控制层(Web 层)。 -
@Service:标记业务逻辑层。 -
@Repository:标记数据访问层(DAO 层)。- 注意: 虽然这四个注解在底层功能上基本一样,但区分开来是为了代码可读性,以及方便 AOP 做切面(比如只拦截
@Service做事务)。
- 注意: 虽然这四个注解在底层功能上基本一样,但区分开来是为了代码可读性,以及方便 AOP 做切面(比如只拦截
2.依赖注入类
也就是‘我要用这个对象’。
-
@Autowired:Spring 自带的,默认按类型(Type)注入。 -
@Qualifier:配合@Autowired使用,当有多个同类型的 Bean 时,指定名字。 -
@Resource:JDK 标准的,默认按名字(Name)注入。 -
@Value:注入配置文件(application.properties)中的简单值,如@Value("${server.port}")。
3. Web 开发类 (Spring MVC)
也就是处理 HTTP 请求的。
-
@RestController:相当于@Controller+@ResponseBody,直接返回 JSON 数据(现在前后端分离最常用的)。 -
@RequestMapping:定义请求路径。 -
@GetMapping/@PostMapping:@RequestMapping的简写,限定了请求方法。 -
@RequestBody:接收前端传来的 JSON,转成 Java 对象。 -
@RequestParam:接收 URL 问号后面的参数(如?name=zhangsan)。 -
@PathVariable:接收 URL 路径上的参数(如/user/{id})。
4. 配置类 (代替 XML)
也就是‘手动组装’ Bean。
-
@Configuration:标记这是一个配置类(相当于以前的applicationContext.xml)。 -
@Bean:放在方法上。通常用于引入第三方库的组件(因为我们改不了第三方库的源码,没法在人家类上加@Component)。- 比如: 你配置 Redis 的
RedissonClient时,肯定是在一个方法上加@Bean。
- 比如: 你配置 Redis 的
5. 功能增强类 (AOP & Scope)
-
@Transactional:开启声明式事务。 -
@Scope:定义 Bean 的作用域(单例singleton还是多例prototype)。 -
@EnableAspectJAutoProxy:开启 AOP 支持。”
1. @Component 和 @Bean 的区别?
-
作用对象不同:
-
@Component作用在 类 上(通常是我们自己写的类)。 -
@Bean作用在 方法 上(通常是配置类里的方法)。
-
-
使用场景不同:
-
如果我们能修改源码(自己写的),直接在类上加
@Component最方便。 -
如果我们引用了第三方包(比如 Redis、MyBatis),没法改它的源码,就只能在配置类里用
@Bean方法把它的对象new出来返回给 Spring。
-
2. @Autowired 和 @Resource 的区别?
(这个之前讲过,简单复习)
-
出身不同:
@Autowired是 Spring 的;@Resource是 Java 标准的。 -
查找策略不同:
@Autowired优先找类型;@Resource优先找名字。