第一章练习答案
练习 1:完整三层架构
java
// Entity
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false, unique = true)
private String email;
// getters, setters, constructors
}
// Repository
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByEmail(String email);
}
// Service
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public List<User> findAll() {
return userRepository.findAll();
}
public User findById(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new RuntimeException("User not found"));
}
public User save(User user) {
return userRepository.save(user);
}
}
// Controller
@RestController
@RequestMapping("/api/users")
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping
public List<User> getAllUsers() {
return userService.findAll();
}
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
@PostMapping
public User createUser(@RequestBody User user) {
return userService.save(user);
}
}练习 2:多个实现选择
java
public interface MessageService {
void send(String message);
}
@Component("emailService")
public class EmailService implements MessageService {
@Override
public void send(String message) {
System.out.println("Email: " + message);
}
}
@Component("smsService")
public class SmsService implements MessageService {
@Override
public void send(String message) {
System.out.println("SMS: " + message);
}
}
@Service
public class NotificationService {
@Autowired
@Qualifier("emailService")
private MessageService messageService;
public void notify(String message) {
messageService.send(message);
}
}练习 3:配置类
java
@Configuration
public class AppConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
return mapper;
}
}
@Service
public class ExternalApiService {
private final RestTemplate restTemplate;
@Autowired
public ExternalApiService(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
public String fetchData() {
return restTemplate.getForObject("https://api.example.com/data", String.class);
}
}返回第一章概览