Controller 동작 관련
@Controller
class ~ {
@GetMapping("test")
public String ~ (@RequestParam("a") String a, Model model) {
model.addAttribute("a", a);
return "test_view";
}
}
// Controller로 등록하고
// @GetMapping 안에 적어준 경로가 요청되면
// ?a=test 이런식으로 @RequestParam에 들어갈 내용을 받아주고
// model에 a라는 이름으로 받아온 값을 저장해서
// test_view로 던져주면
// test_view에서는 던져준 a를 view에 원하는 곳에 활용
@Controller
@ResponseBody // 얘 추가됌
class ~ {
@GetMapping("test")
public Test ~ (@RequestParam("a") String a) {
Test test = new test();
test.setTest("test");
return test;
}
}
// @ResponseBody 객체를 JSON 형태로 변환해줌
- @ResponseBody를 사용
- HTTP의 BODY에 문자 내용을 직접 반환
- viewResolver 대신에 HttpMessageConverter가 동작
- 기본 문자처리: StringHttpMessageConverter
- 기본 객체처리: MappingJackson2HttpMessageConverter
- byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
Repository 관련
// Repsoitory 일반적인 인터페이스 작성 형식
public interface UserRepository {
User save(User user);
Optional<User> findById(Long id);
Optional<Member> findByName(String name);
List<Member> findAll();
}
// 기능 구현 알아서 해보고
// Test 작성은 필수
class UserRepositoryTest {
UserRespository repository = new UserRepository();
@Test
public void save() {
User user = new User();
user.setName("test");
repository.save(user);
User result = repository.findById(user.getId()).get(); // 참고로 id는 자동으로 ++하며 등록된다고 생각
Assertions.assertThat(result).isEqualTo(user);
}
}
// 이런식으로 검증해보면서 하면 됌
// 코드 생각 나는대로 다 짜고 나중에 테스트 돌리면
// 만약 여기서부터 잘못 됐고 뒤에 작성한 코드들을 완전히 체계적으로 작성한게 아니면
// 머리 아파지기 시작함
// 확실하게 정복하고 넘어가는게 좋음
Service
Service {
private final UserRepository repository = new UserRepository();
public Long join(User user) {
userRepository.save(user);
return user.getId();
}
// 나머지는 형식 같음
}
// 테스트 진행
ServiceTest {
UserService userService = new UserService();
UserRepository userRepository = new UserRepository();
@Test
public void 회원가입 {
User user = new User();
user.setName("test");
long userId = userService.join(user);
User findUser = userService.findById(userId).get();
assertEquals(user.getName(), findUser.getName());
}
}
의존관계
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
// private final로 만들어 놨을 때 스프링 빈으로 등록된 것이 있으면 자동으로 주입해줌
// 직접 등록
@Configuration
public class SpringConfig {
@Bean
public UserService userService() {
return new UserService(UserRepository());
}
@Bean
public UserRepository userRepository() {
return new UserRepository();
}
}
// 스프링 컨테이너에 스프링 빈 저장소로
// 메소드의 이름과 반환 객체 형식으로 등록이 됌
AOP
- Aspect Oriented Programming 관점 지향 프로그래밍
- 공통 관심 사항 vs 핵심 관심 사항 분리
@Component
@Aspect
public class TimeTraceApp {
@Around("execution(* hello.hellospring..*(..))")
// 대충 동작 과정 execute()
}
'Spring > Basic' 카테고리의 다른 글
[Basic] BeanFactory / ApplicationContext (0) | 2024.08.27 |
---|---|
[Basic] 의존 관계 설정 관련해서 알면 좋은 개념 (0) | 2024.08.21 |
[Basic] Tomcat 직접 등록을 통한 환경 세팅 방법 (0) | 2024.08.09 |
[Basic] 웹 스코프 (0) | 2024.04.07 |
[Basic] 빈 스코프 (0) | 2024.04.07 |