본문 바로가기

Spring-boot

스프링부트, 롬복 @

Spring Boot 어노테이션

@Autowired : 스프링 컨테이너에서 Bean 객체를 자동으로 주입하기 위한 어노테이션

@Autowired
private ProductRepository productRepository;

 

@Bean : 스프링 컨테이너에서 Bean 객체를 생성하기 위한 메서드에 적용하는 어노테이션

@Configuration : 스프링 Bean 설정 정보를 포함하는 클래스에 사용하는 어노테이션

@Configuration
public class MyConfiguration {
@Bean
public MyBean myBean() {
return new MyBean();
}
@Bean
public MyOtherBean myOtherBean() {
return new MyOtherBean(myBean());
}
}

 

@Component : 일반적인 Bean으로 등록하기 위한 어노테이션
다른 클래스에서 사용하려면 @Autowired 어노테이션을 사용하여 주입

@Component
public class MyComponent {
public void doSomething() {
System.out.println("do something...");
}
}

 

@Controller : 스프링 MVC 컨트롤러 클래스를 정의하기 위한 어노테이션

@DeleteMapping
@GetMapping
@PostMapping
@PutMapping
HTTP DELETE, GET, POST, PUT 요청에 대한 처리 메서드를 매핑하기 위해 사용하는 어노테이션

@RequestMapping : HTTP 요청에 대한 처리 메소드를 매핑하기 위해 사용되는 어노테이션

@Controller
@RequestMapping("/example")
public class ExampleController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
@PostMapping("/world")
public String world() {
return "world";
}
@DeleteMapping("/delete")
public String delete() {
return "delete";
}
@PutMapping("/update")
public String update() {
return "update";
}
}

 

@RestController : RESTful 웹 서비스에서 컨트롤러 클래스를 정의하기 위한 어노테이션

@PathVariable : URL 경로의 일부를 처리하기 위해 사용되는 어노테이션

@RequestBody : HTTP 요청 본문 내용을 가져오기 위해 사용하는 어노테이션.
@RequestParam : HTTP 요청 매개 변수를 가져오기 위해 사용하는 어노테이션.

@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{userId}")
public User getUser(@PathVariable("userId") Long userId) {
User user = userService.getUser(userId);
return user;
}
@PostMapping("/")
public ResponseEntity<String> createUser(@RequestBody User user) {
userService.createUser(user);
return ResponseEntity.ok("User created successfully");
}
@GetMapping("/")
public List<Product> getProductsByCategory(@RequestParam(value = "category",
required = true) String category) {
List<Product> products = productService.getProductsByCategory(category);
return products;
}
}

 

@Qualifier : 동일한 타입의 Bean 객체 중에서 어떤 Bean을 주입해야 하는지 구분하기 위한 어노테이션

@Service
public class MyService {
@Autowired
@Qualifier("myRepository1")
private MyRepository myRepository;
// ...
}

 

@Repository : 데이터베이스 연동을 수행하는 DAO 클래스를 스프링 Bean으로 등록하기 위한 어노테이션

@Repository
public class PostDaoImpl implements PostDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public List<Post> getAllPosts() {
String sql = "SELECT * FROM posts";
List<Post> posts = jdbcTemplate.query(sql, new PostRowMapper());
return posts;
}
// ...
}

 

@Scope : 스프링에서 생성되는 Bean 객체의 범위를 지정하기 위한 어노테이션

기본적으로 스프링에서는 Bean이 싱글톤 범위로 생성, 이외의 다른 범위를 설정하려면 @Scope 어노테이션을 사용

@Component
@Scope("prototype")
public class MyPrototypeBean {
// ...
}

 

@Service : 해당 클래스가 비즈니스 로직을 수행하는 서비스임을 나타내는 어노테이션

@Transactional : 트랜잭션 처리를 위한 어노테이션

@Service
@Transactional
public class MyService {
@Autowired
private MyRepository myRepository;
public void updateMyData(Long id, String name) {
MyData myData = myRepository.findById(id).orElseThrow(() -> new RuntimeException("Data not found"));
myData.setName(name);
myRepository.save(myData);
}
}
// updateMyData() 메소드가 실행될 때 트랜잭션 처리가 이루어짐
// 실행 도중 예외 발생 -> 롤백되어 이전 상태로

 

@Value : 프로퍼티 파일이나 환경 변수와 같은 외부 설정 정보를 주입하기 위한 어노테이션

@Service
public class MyService {
@Value("${my.service.name}")
private String serviceName;
public String getServiceName() {
return serviceName;
}
}

Lombok 어노테이션

@Getter

@Setter

getter()와 setter() 메서드를 자동으로 생성해주는 롬복 어노테이션

import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Person {
private String name;
private int age;
}
public class Example {
public static void main(String[] args) {
Person person = new Person();
person.setName("John");
person.setAge(30);
System.out.println(person.getName());
System.out.println(person.getAge());
}
}

 

@toString : 클래스에 대한 toString() 메서드를 자동으로 생성해주는 롬복 어노테이션

import lombok.ToString;
@ToString
public class Person {
private String name;
private int age;
private String address;
// ...
}

 

@EqualsAndHashCode : equals() 메서드와 hashCode() 메서드를 자동으로 생성해주는 롬복 어노테이션

import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class User {
private String name;
private int age;
private String email;
// ...
}

 

@Data : Getter, Setter, toString, equals, hashCode 메서드를 자동 생성해 주는 롬복 어노테이션

import lombok.Data;
@Data
public class Person {
private String name;
private int age;
private String address;
}

Getter 메서드 (getName(), getAge(), getAddress())
Setter 메서드 (setName(String), setAge(int), setAddress(String))
toString() 메서드
equals() 메서드
hashCode() 메서드 등 자동으로 생성됨

 

@AllArgsConstructor : 모든 필드를 파라미터로 받는 생성자를 자동 생성해주는 롬복 어노테이션

import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
@Getter
public class Person {
private String name;
private int age;
private String address;
}
// 사용 예시
Person person = new Person("name", 27, "city");

 

@NoArgsConstructor : 파라미터가 없는 생성자를 자동 생성해주는 롬복 어노테이션

import lombok.NoArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@NoArgsConstructor
public class Person {
@Getter @Setter private String name;
@Getter @Setter private int age;
}

 

@Slf4j : 로깅을 위한 롬복 어노테이션

debug, info, warn, error 레벨의 로그 메시지를 출력할 수 있다.

"{ }"는 로그 메시지에 출력될 변수 -> message

import lombok.extern.slf4j.Slf4j;
@Slf4j
public class MyClass {
public void myMethod() {
String message = "Hello, world!";
log.debug("Debug message: {}", message);
log.info("Info message: {}", message);
log.warn("Warning message: {}", message);
log.error("Error message: {}", message);
}
}

 

@Builder : 빌더 패턴을 쉽게 구현할 수 있도록 해주는 롬복 어노테이션

생성자 대신에 빌더를 이용해 객체를 생성할 수 있음

필드별로 빌더에 설정할 수 있도록 setter 메서드를 자동으로 생성해줌

import lombok.Builder;
@Builder
public class Person {
private String firstName;
private String lastName;
private int age;
private String address;
}
// ...
Person person = Person.builder()
.firstName("John")
.lastName("Doe")
.age(30)
.address("123 Main St.")
.build();

 

@Value : @Data와 같은 기능을 하지만 클래스를 변하지 않게 만들어 주는 어노테이션.

setter() 메서드를 생성하지 않고, 생성자는 해당 클래스의 모든 필드를 인자로 받는 생성자가 만들어짐.

equals, hashCode, toString 메서드가 자동으로 생성됨

import lombok.Value;
@Value
public class MyValueObject {
private final String name;
private final int age;
}