티스토리 뷰
Spring 자주 사용하는 어노테이션 설명
@Configuration
— config용으로 사용할 때
— @Bean을 수동적으로 빈에 등록
— @Bean을 Bean에 등록할 때 싱글톤이 되도록 함
@Bean
— @Configuration이나 @Component 어노테이션이 붙은 클래스 내에 메서드 레벨에서 사용 가능
— @Configuration이나 @Component 없이 사용하면 빈에 등록 되지만 싱글톤 유지가 안됨
— 특정 객체를 의존하는 다른 객체들에게 의존성을 주입하기 위해서 사용
— 개발자가 직접 작성하지 않은 서드파티 라이브러리의 설정과 같은 의존성을 주입받기 위해 사용
— 중복된 이름이 없도록 주의
@Component
— 자바 빈으로 등록 시켜 줌
— Spring 프레임워크에서 인스턴스 생성과 소멸을 관리 (DI)
— @ComponentScan 있어야 자동 등록이 가능
// @Component 없이 사용시 에러
public class xxxUtil {
...
}
@RequiredArgsConstructor
public class xxxService{
private final ApiUtil apiUtil;
...
}
Error
Parameter 0 of constructor in ...service.xxxService required a bean of type '...commons.util.xxxUtil' that could not be found.
// ************************************************************************************************************
// @Component 사용시 정상작동
@Component
public class xxxUtil {
...
}
@RequiredArgsConstructor
public class xxxService{
private final ApiUtil apiUtil;
...
}
@Autowired
— Spring에서 필요한 종속성의 인스턴스를 자동으로 주입
— Spring 관리 빈으로 표시하기 위한 범용 어노테이션
— Spring은 @Component의 메타 어노테이션인 @Service, @Controller 및 @Repository 라는 보다 구체적인 어노테이션들을 제공
@RequiredArgsConstructor
— 초기화 되지않은 final 필드나, @NonNull 이 붙은 필드에 대해 생성자를 생성해 주며, 주로 의존성 주입(Dependency Injection) 편의성을 위해서 사용
// @RequiredArgsConstructor 사용 이전
public class XXX {
@Autowired
private XXXService xxxService;
}
// @RequiredArgsConstructor 사용 이후
@RequiredArgsConstructor
public class XXX {
private final XXXService xxxService;
}
@AllArgsConstructor
— 클래스에 존재하는 모든 필드에 대한 생성자를 자동으로 생성
— 모든 필드 값을 파라미터로 받는 생성자를 생성
@NoArgsConstructor
— 파라미터가 없는 생성자를 생성
@Deprecated
— 더 이상 사용하지 않기를 바라는 API, 안정성을 보장하지 않거나 조만간 삭제할 API 등에 사용
@Override
— 메서드 선언에만 달 수 있으며, 이 어노테이션의 의미는 상위 타입(부모 타입)의 메서드를 재정의했음을 의미
— 컴파일러에게 부모 클래스에 있는 메서드명과 매개 변수 등이 동일한지 체크
@Data
— @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor, @Value 를 합쳐 놓음
@Getter
— private 필드 변수를 외부에서 접근 가능하도록 함
@Setter
— private 필드 변수를 외부에서 접근 가능하도록 함
@ToString
— 갖고 있는 값을 문자열로 만들어 리턴 하도록 함
@Value
— properties 파일로 관리되는 설정 정보를 사용할 수 있도록 정의
application.properties
xxx.key = test
@Value("${xxx.key}")
private String key;
@EqualsAndHashCode
— equals() 메소드와 hashCode() 메소드가 자동으로 생성
— equals : 내용이 같은지 비교, hasCode : 두 객체가 같은 객체인지 비교
@Builder
— 빌터 패턴 별 특징
— 1. 점층적 생성자 패턴 각 생성자를 오버로딩 해서 만드는 기초적인 방식
public class User {
private String id; //필수
private String password; //필수
private Auth auth; //선택
public User(String id) {
this.id= id;
}
public User(String id, String password) {
this.id = id;
this.password = password;
}
public Member(String id, String password, Auth auth) {
this.id = id;
this.password = password;
this.auth = auth;
}
}
User user = new User("test", "123", A);
— 2. 자바 빈즈 패턴 getter/setter를 이용하여 객체를 생성할때 필드를 주입
public class User {
private String id; //필수
private String password; //필수
private Auth auth; //선택
public String getId() {
return getId;
}
public void setId(String getId) {
this.getId = getId;
}
...
}
User user = new User();
user.setId("test");
user.setPassword("123");
user.setAuth(A);
— 3. 빌더 패턴 자바 빈즈 패턴처럼 받되, 데이터 일관성을 위해 정보들을 다 받은 후에 객체를 생성
public class User {
private String id; //필수
private String password; //필수
private Auth auth; //선택
public static class Builder {
private final String id;
private final String password;
private Auth auth;
// 필수변수는 생성자로 값을 넣음
public Builder(String id, String password) {
this.id = id;
this.password = password;
}
// 변수별 메소드는 빌더클래스의 필드값을 set하고 빌더객체를 리턴
public Builder auth(Auth auth) {
this.auth= auth;
return this;
}
// 빌더메소드
public User build() {
return new User(this);
}
}
public User(Builder builder) {
this.id = builder.id;
this.password = builder.password;
this.auth = builder.auth;
}
}
User user = new Builder("test", "123")
.auth(Auth.A)
.build();
— 빌더 클래스(패턴)을 용의하게 사용
@Builder
public class User {
private String id; //필수
private String password; //필수
private Auth auth; //선택
}
User user = User.builder() // @Builder으로 생성된 빌더클래스 생성자
.id("test")
.password("123")
.auth(Auth.A)
.build();
참조 : https://sudo-minz.tistory.com/133
@Alias
— mybatis에서 지원하는 어노테이션이며 별칭 지정 사용
@Alias("userDto")
public class UserDTO {
private String id;
private String name;
}
<select id="findById" resultType="userDto">
SELECT * FROM USER
WHERE ID = #{id}
</select>
@Repository
— DAO(Data Access Object)나 Repository Bean을 나타내는 데 사용
— @Repository 어노테이션을 사용하면 해당 클래스가 DB와 상호 작용하는 클래스임을 유추 가능
— 스프링 빈으로 등록하면 해당 클래스에서 제공하는 DB 연동 기능을 스프링에서 관리
— root-context.xml에 SqlSessionFactory와 SqlSessionTemplate 빈 객체 주입 및 데이터소스 설정
@Repository
public class TestDaoImpl {
@Autowired
SqlSession sqlSession;
public void insertData(String data) {
sqlSession.insert("test.insertData", data);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
<insert id="insertData" parameterType="java.lang.String">
INSERT INTO TB_TABLE SET data = #{data}
</insert>
</mapper>
@Mapper
— MyBatis 3.0부터 지원하며 @Mapper 선언 후 interface를 생성하면 따로 implements(구현) 생략
— 생성한 메서드명과 sql Id가 일치하도록 함
— namespace는 인터페이스의 풀패키지 경로를 입력
@Mapper
public interface TestMapper {
public int insertData(String data);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxx.xxx.api.TestMapper">
<insert id="insertData" parameterType="java.lang.String">
INSERT INTO TB_TABLE SET data = #{data}
</insert>
</mapper>
@Transactional
— DB에 수행되는 쿼리들을 하나의 트랜젝션으로 묶어주며, 속성 혹은 예외처리 종류에 따라 rollback기능을 동작
— 메서드 단위로 설정
@JsonInclude
— Jackson의 ObjectMapper 사용 없이 Json 데이터를 Java Object로 변환
@Valid
— 클라이언트에서 넘어온 데이터를 객체(DTO or VO)에 바인딩 시 아래 어노테이션 유효성 검사
Anotation 제약조건
@NotNull | Null 불가 |
@Null | Null만 입력 가능 |
@NotEmpty | Null, 빈 문자열 불가 |
@NotBlank | Null, 빈 문자열, 스페이스만 있는 문자열 불가 |
@Size(min= , max= ) | 문자열, 배열등의 크기 충족 여부 |
@Pattern(regex= ) | 정규식 충족 여부 |
@Max(숫자) | 지정 값 이하 충족 여부 |
@Min(숫자) | 지정 값 이상 충족 여부 |
@Future | 현재 보다 미래 충족 여부 |
@Past | 현재 보다 과거 충족 여부 |
@Positive | 양수만 가능 |
@PositiveOrZero | 양수와 0만 가능 |
@Negative | 음수만 가능 |
@NegativeOrZero | 음수와 0만 가능 |
이메일 형식만 가능 | |
@Digits(integer= , fraction = ) | 대상 수가 지정된 정수와 소수 자리 수 보다 작은 지 여부 |
@DecimalMax(value= ) | 지정된 값(실수) 이하 여부 |
@DecimalMin(value= ) | 지정된 값(실수) 이상 여부 |
@AssertFalse | false 여부 |
@AssertTrue | true 여부 |
public class Test {
@NotEmpty
private String id;
@NotEmpty
private String password;
...
}
@RestController
public class TestController {
...
@PostMapping("/test")
public ResponseEntity selectTest(@RequestBody @Valid Test test) {
...
}
}
@Validated
— @Valid의 확장된 기능이며, 그룹핑 목적으로 사용
@Controlleradvice
— 전역 예외 처리 기능
— @ExceptionHandler, @InitBinder, @ModelAttribute, @Component 포함되어 있음
— @Component을 통해 빈으로 관리 가능
@RestControllerAdvice
— Controlleradvice 기능 + @ResponseBody 가 포함되어 있음
— Json 데이터 타입
@ExceptionHandler
— Bean에서 발생하는 예외를 잡아 하나의 메서드에서 처리해주는 어노테이션
— Controller와 RestController에서는 사용이 가능하며 @Service나 @Repository가 적용된 곳에는 사용이 불가능
@ConfigurationProperties(prefix = "")
— Spring Boot 에서 properties 파일에 정의된 프로퍼티 중 주어진 prefix 를 가지는 프로퍼티들을 POJO 에 매핑하여 Bean 으로 만들수 있게 해주는 어노테이션
— Spring boot 2.2 부터 @ConfigurationPropertiesScan 을 이용하여 자바 빈에 등로되어 @Component 어노테이션 선언이 제외 됨 즉 Immutable한 프로퍼티 지원 가능해짐
꾸ㅡㅈ4ㄷㄱ5ㅏㅓ23542
'Java & Spring & SpringBoot' 카테고리의 다른 글
Spring Boot 내장 Was (tomcat, undertow) Https 적용 방법 (0) | 2023.08.24 |
---|---|
Spring @RequestMapping에서 @PathVariable 허용된 값만 사용하는 법 (0) | 2023.07.20 |
Java Map 모든 key, value 가져오기 (0) | 2023.07.13 |
Spring Boot Redis Session Key Prefix 변경하기 (0) | 2023.06.23 |
Spring @RequiredArgsConstructor 사용 이유 (0) | 2023.05.18 |
- Total
- Today
- Yesterday
- 은파호수공원
- 스쿠터 여행
- 오라클 DB 링크
- 리니지m
- 보성 여행
- 인터바이크
- kendo grid
- 돌장갑
- 군산 여행
- 국제반점
- 남자 혼자 국내 여행
- 군산 가볼만한곳
- 군산 게스트하우스
- 영광 여행
- 송내 룸카페
- 나래바이크
- vscode
- 제주도 스쿠터 여행
- 송내 카페
- 베스파LX
- 송내역 카페
- 송내역 룸카페
- 남자 혼자 여행
- 윈드스크린
- 담양 여행
- 고흥 여행
- 초원사진관
- 스쿠터 전국 일주
- 전국 일주 여행
- Docker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |