Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Github
- https
- DTO
- 프레임워크
- vue
- Java
- 깃허브에러
- REST API
- JavaScript
- framework
- bean
- pls-00103
- CS
- 뷰
- autowired
- HTTP
- JSON
- Spring Framework
- SQL
- GIT
- Spring
- react
- API
- 어노테이션
- 개발자기록
- vue3
- Entity
- oracle
- error
- spring boot
Archives
- Today
- Total
o-ohi-code 님의 블로그
[Spring Framework] 어노테이션 정리-1 본문
@Autowired
@Autowired 는 스프링이 알아서 객체를 찾아서 넣어주는 (DI / 의존성 주입) 어노테이션이다.
@Autowired
BaseServiceFacade baseServiceFacade;
- BaseServiceFacade 라는 객체를 직접 new(생성) 하지 않아도 스프링이 미리 만들어놓은 Bean(객체) 자동으로 주입
- + Bean 을 통해(의존성 관리),
- + @Autowired 를 통해 (의존성 주입)
@Aspect
현재 클래스가 AOP 기능을 담고 있는 클래스를 스프링에게 명시해주는 어노테이션
@Component
@Aspect
@Slf4j
public class LoggerAspect {
// 코드
}
- 이 클래스는 반드시 @Component나 @Configuration으로 Bean 등록을 해야한다.
- 그래야 Spring 컨테이너가 이 클래스를 관리하고 AOP를 적용 할 수 있다.
@Around
특정 메서드의 실행 전, 실행 후, 예외 발생 시점까지 모두 감싸서 제어할 수 있는
AOP 어노테이션이다.
https://o-ohi-code.tistory.com/35
[Spring] AOP 란?
AOP (Aspect-Oriented Programming)공통 기능을 분리해서 코드 중복 없이 관리하는 기법 핵심 로직은 그대로 두고, 부가적인 기능(로깅, 트랜잭션, 보안 등) 만 따로 떼어내는 것을 말한다.🤔 AOP 왜 사용
o-ohi-code.tistory.com
@Component
@Aspect
@Slf4j
public class LoggerAspect {
//Logger log = LoggerFactory.getLogger(getClass());
// @Around("execution(* com..handler.*.*(..)) or execution(* com..service.*.*(..)) or execution(* com..dao.*.*(..))")
@Around("execution(* kr.co.erp..controller..*(..)) || execution(* kr.co.erp..servicefacade..*(..)) || execution(* kr.co.erp..dao..*(..))")
public Object logPrint(ProceedingJoinPoint joinPoint) throws Throwable {
@AllArgsConstructor
클래스의 모든 필드를 파라미터로 받는 생성자를 자동으로 만들어주는 Lombok 어노테이션
@AllArgsConstructor
public class EmpUpdateTO {
private String birthDate;
private String deptCode;
private String empCode;
private String empName;
private String gender;
private String authorityCodeNumber;
private String basicAddress;
private String detailAddress;
private String email;
private String levelOfEducation;
private String phoneNumber;
private String positionCode;
private String userId;
private String workplaceCode;
private String zipCode;
}
// 모든 필드 포함 생성자 (@AllArgsConstructor)
public EmpUpdateTO(String birthDate, String deptCode, String empCode, ..., String zipCode) {
this.birthDate = birthDate;
this.deptCode = deptCode;
...
this.zipCode = zipCode;
}
AllArgumentsConstructor (모든/매개변수/생성자) : 모든 필드 값을 넣을 수 있는 생성자를 만들어 준다는 뜻이다.
이렇게 되면 생성자(new)를 만들 때 바로 값을 넣어 줄 수 있는 편리함이 생긴다.
// 이런식으로
EmpUpdateTO emp = new EmpUpdateTO("E001", "영웅", "010-0000-0000", "D001", ...);
🤔 하지만 여기서 드는 의문
현재 예제) 코드는 DTO 클래스로,
- MyBatis : SQL 쿼리 결과를 DTO의 setter 로 주입한다.
- JPA : DB 에서 값을 가져올 때 기본 생성자 + setter 로 객체를 생성한다.
그래서 DTO는 기본 생성자(@NoArgsConstructor) 만 있으면 된다!
그럼 @AllArgsConstructor 는 왜 사용하는 걸까?
ex1) 테스트 코드에서 직접 객체 생성해야 할 때,
테스트 코드, Mock 객체 만들 때 빠르게 세팅 가능!
EmpUpdateTO emp = new EmpUpdateTO("E001", "영웅", "010-0000-0000", ...);
ex2) 서비스 컨트롤러 간 데이터 넘길 때 빠르게 만들고 싶을 때
setter 여러 번 안 쓰고 깔끔하게 처리 가능
return new EmpUpdateTO(empCode, empName, ..., zipCode);
ex3) 값이 고정된 샘플 객체 만들 때
초기값 고정할 때 유리
return new EmpUpdateTO("E999", "테스트직원", ..., "00000");
'프레임워크(Framework)' 카테고리의 다른 글
Web Framework 란? (1) | 2025.04.09 |
---|---|
[Framework] 프레임워크란? (0) | 2025.04.04 |