1,Vue.js 状态管理与使用
在 <template>
中,可以通过 $store.state
来直接访问 Vuex 的状态。
<template>
<div>{{ $store.state.someData }}</div>
</template>
在 setup()
中使用 store:需要在 <script>
中通过 useStore()
来获取 store 实例。
import { useStore } from 'vuex';
export default {
setup() {
const store = useStore();
console.log(store.state.someData);
}
};
2,HTTP 和 WebSocket 数据通信
HTTP 通信:后端使用 @PostMapping
等注解来接收前端请求,通常通过 Map
或者实体类来传输前后端的参数和数据。
@PostMapping("/api/data")
public ResponseEntity<String> handleData(@RequestBody Map<String, Object> data) {
// 处理前端传来的数据
return ResponseEntity.ok("Success");
}
WebSocket 通信:WebSocket 协议是全双工通信,可以使用 JSON 数据对象实现前后端通信。
JSON对象要转化为String来传递
前端使用 socket.send()
发送信息,通过 socket.onmessage
接收后端的信息:
socket.send(JSON.stringify({ message: 'Hello' }));
socket.onmessage = msg => {
const data = JSON.parse(msg.data);
console.log(data);
};
后端通过 WebSocket Server 类中的 @OnMessage
接收信息,并使用 sendMessage
方法发送信息:
@OnMessage
public void onMessage(String message, Session session) {
JSONObject data = JSONObject.parseObject(message);
// 接收并处理信息
}
public void sendMessage(Session session, String message) throws IOException {
session.getBasicRemote().sendText(message);
}
3,WebSocket 中 Mapper 调用的不同
HTTP 协议中的 Mapper:通常通过 @Autowired
注解直接注入 Mapper 实例,方便在服务类中调用。
@Autowired
private UserMapper userMapper;
WebSocket 协议中的 Mapper:由于 WebSocket 中的类实例生命周期不同,不能直接使用 @Autowired
注入。需要将 Mapper 声明为 public static
,并通过一个静态的 @Autowired
设置方法注入。
public static UserMapper userMapper;
@Autowired
public void setUserMapper(UserMapper userMapper) {
WebSocketServer.userMapper = userMapper;
}
4,线程加锁(ReentrantLock)
ReentrantLock
是 Java 中提供的可重入锁,允许线程在获取锁之后可以多次获取,不会发生死锁。适用于需要明确锁的获取和释放时机的场景。
5,RestTemplate
是 Spring 提供的用于发起 HTTP 请求的类,可以在后端中用于与其他服务进行通信。
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.postForObject("http://127.0.0.1:3000/user/", requestBody, String.class);
6,
!=
:比较的是两个对象的内存地址,判断它们是否是同一个对象实例。
equals()
:比较的是两个对象的内容,判断它们的值是否相同(equals()
方法可以被重写以自定义比较逻辑)。