WEB JAVA SPRING/etc

Spring 어노테이션

sshhhh 2023. 8. 28. 11:08

본래 주석이란 뜻으로, 인터페이스를 기반으로 한 문법이다.

주석과는 그 역할이 다르지만 주석처럼 코드에 달아 클래스에 특별한 의미를 부여하거나 기능을 주입할 수 있다.

<기능>
- 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보 제공
- 소프트웨어 개발 환경이 빌드나 배포시 코드를 자동으로 생성할 수 있도록 정보 제공
- 런타임에 특정 기능을 실행하도록 정보를 제공

 

자바 코드에 적용되는 내장 어노테이션

@Override

  • 선언한 메서드가 오버라이드 되었다는 것을 나타냅니다.
  • 만약 상위(부모) 클래스(또는 인터페이스)에서 해당 메서드를 찾을 수 없다면 컴파일 에러를 발생 시킵니다.
public class Animal {
    public void speak() {
    }

    public String getType() {
        return "Generic animal";
    }
}

public class Cat extends Animal {
    @Override
    public void speak() { // This is a good override.
        System.out.println("Meow.");
    }

    @Override
    public String gettype() { // Compile-time error due to mistyped name.
        return "Cat";
    }
}

@Deprecated

  • 해당 메서드가 더 이상 사용되지 않음을 표시합니다.
  • 만약 사용할 경우 컴파일 경고를 발생 키십니다.

@SuppressWarnings

  • 선언한 곳의 컴파일 경고를 무시하도록 합니다.

@SafeVarargs

  • Java7 부터 지원하며, 제너릭 같은 가변인자의 매개변수를 사용할 때의 경고를 무시합니다.

@FunctionalInterface

  • Java8 부터 지원하며, 함수형 인터페이스를 지정하는 어노테이션입니다.
  • 만약 메서드가 존재하지 않거나, 1개 이상의 메서드(default 메서드 제외)가 존재할 경우 컴파일 오류를 발생 시킵니다.

참고 : https://bangu4.tistory.com/199

 

 


 

 

 

~공부하며 추가중~~

 

#어노테이션

@ToString(exclude= {"val3"}) 원하는 속성만 출력되도록 조정함 ->val3 속성은 출력x
 @GetMapping("hello") hello url로 이동하면 컨트롤러를 실행하겠다.
@RunWith(SpringRunner.class) spring과 관련된 test를 하겠다
@SpringBootTest 이것만 쓰면 application context 전부 로딩해서 무거워진다.
위에거 쓰는 이유
@Autowired 메서드가 자동으로 호출되고, 인스턴스가 자동으로 주입,
변수, Setter메서드, 생성자, 일반 메서드에 적용
@EqualsAndHashCode(of = {"~"}) 동등성 비교- of : 포함, exclude : 제외
@Transactional entity 매니저를 통한 데이터 변경은 트랜잭션안에서
이루어져야 하기 때문에 꼭 넣기 
 @OneToMany(mappedBy = "member") mappedBy : 연관관계 주인이 아니다. 
order 테이블에 있는 member필드에 의해 매핑된것 ,
읽기전용 : 여기에 값을 넣는다해서 외래키 값이 변경되지 않음
@JoinColumn 매핑을 어떻게 할건지 : 연관관계 주인으로 fk
@Enumerated(EnumType.STRING) enum은 꼭 넣어야함,
ordinal : 숫자로 들어감..1,2,3 이렇게 들어가서 중간에 뭐가 끼면 
숫자가 밀린다. 꼭 String으로 쓸것
@Inheritance
(strategy = InheritanceType.JOINED)
상속관계 부모에 작성 ( Item -> Album,Book, Movie ) ,
joined : 가장 정규화된 스타일..싱글테이블
@DiscriminatorValue("A") 상속관계 매핑 (album)
@PersistenceContext  spring이 jpa가 Entity Manager를 만들어서 EntityManager를 여기에 주입,
EntityManager em;  선언하며 엔티티 매니저를 주입해준다.
@Repository Component scan해서 spring bean 자동등록
@Transactional(readOnly = true) JPA의 데이터 변경시에 꼭 있어야 함 (트랜잭션 안에서 변경할 것)
그래야 lazy로딩같은것도 된다 ,
 (readOnly = true) : jpa 성능 좋게 해줌 (읽기전용 -> 부하를 많이 주지 않음)
 @Transactional  이렇게 따로 설정하면 이게 우선순위 (기본값 readOnly=false) ,
롤백한다(=DB에 있는거 다버린다)
@ExceptionHandler Controller계층에서 발생하는 에러를 잡아서 메서드로 처리
   
   
   
   
   

 

 

 

 

#Lombok

getter/setter/tosting등의 메소드 자동으로 호출해준다.

@NonNull null XX , NullPointerExcenption에 대한 대비책
@Getter/Setter get,set
@Builder 빌더패턴 사용할 수 있도록 코드 생성
@EqualsAndHashCode  
@Data  @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode,
 파라미터가 없는 기본생성자까지 자동으로 생성
@RequiredArgsConstructor 지정된 속성들에 대한 생성자 생성 (final이 있는 필드만 생성자 만들어줌)
@NoArgsConstructor 파라미터 받지않는 생성자 생성
@AllArgsConstructor 모든 속성에 대한 생성자 생성 
@Value  
@Log  
@Synchronized  
@SneakyThrows  

 

of( ) 설명
PageRequest.of(int page, int size) 페이지번호(0부터시작),페이지당 데이터수
PageRequest.of(int page, int size,
                            Sort.Direction.ASC, String~)
페이지번호(0부터시작),페이지당 데이터수,정렬방향,칼럼들
PageRequest.of(int page, int size,Sort 페이지번호(0부터시작),페이지당 데이터수,정렬방향