Spring Boot(어노테이션 모음)

RedNine·2024년 1월 2일
0

스프링

목록 보기
17/17

🎨 @Bean

스프링 IoC 컨테이너가 관리하는 객체, 즉 빈(Bean)을 정의한다. MyBatis 설정을 위한 SqlSessionFactory를 빈으로 등록할 때 사용할 수 있다.

  • 태그를 이용해서 빈즈를 등록시켜주는 것과 동일하게 대신 등록시켜주는 어노테이션이다.
@Configuration
public class MyBatisConfig {
    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        return factoryBean.getObject();
    }
}

🎨 @ConfigurationProperties

외부 설정값을 빈에 바인딩하는데 사용된다. 이를 통해 MS-SQL 연결 정보를 정의할 수 있다.

@ConfigurationProperties("spring.datasource")
public class DatabaseProperties {
    private String url;
    private String username;
    private String password;
    // getter와 setter 생략
}

🎨 @Override

메서드가 상위 클래스나 인터페이스의 메서드를 재정의함을 나타낸다. 스프링 시큐리티 설정에서 사용할 수 있다.

  • 메서드명이 오버라이딩이 된 메서드인지 확인해주는 기능을 가진 어노테이션이다.
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .anyRequest().authenticated()
            .and()
            .formLogin();
    }
}
  • @Required : 지정한 메서드가 반드시 호출되는지를 체크해주는 어노테이션
    • 이 메서드를 반드시 호출해야되는데 만약에 호출하지 않으면 에러를 유발시킨다, 멤버변수와 관련된 에러메세지를 출력시켜준다.

🎨 @Configuration

스프링 IoC 컨테이너에게 해당 클래스가 빈 설정 정보를 가지고 있음을 알린다. MyBatis 설정을 위해 사용할 수 있다.

  • .java에 @Configuration을 지정하여 xml환경설정 파일 대신에 빈클래스를 등록 시켜서 환경설정을 해주는 역할을 한다.
@Configuration
public class MyBatisConfig {
    // @Bean 등의 어노테이션을 사용한 메서드 정의
}

🎨 @Controller

해당 클래스가 웹 요청을 처리하는 컨트롤러임을 나타낸다.

@Controller
public class MyController {
    @Autowired
    private MyService myService;
    @RequestMapping("/my")
    public String myMethod() {
        // ...
    }
}

🎨 @Autowired

스프링 IoC 컨테이너에게 필드나 메서드에 의존성을 주입해야 함을 나타낸다. 서비스나 DAO를 주입할 때 사용한다.

  • 스프링 빈에 의존하는 다른 빈을 자동으로 주입하고 싶을 때 사용한다.
    ex) 같은기능(<bean> autowire="byType"/>)
@Controller
public class MyController {
    @Autowired
    private MyService myService;
    // ...
}
  • @Autowired 특징
    1 생성자, 멤버변수(=속성), 메서드에 지정이 가능하다.
    2 @Autowired메서드를 호출하면서 매개변수가 의존성객체를 자동으로 얻어서 넣어준다.(멤버변수에)
    3 Setter Method외에 다른 메서드에서 동일하게 적용이 된다.
    4 해당하는 빈즈객체가 없거나 두 개이상 존재시 에러를 유발한다.
    ✔두 개이상 존재시 에러가 발생한 경우 : @키워드(속성명=속성값,,,속성명2=속성값2,,,)
    Autowired(required=true)무조건 가져와서 옵션을 부여하지만, 가져올 빈 객체가 없으면 에러가 유발된다.

✨멤버변수에 @Autowired을 준다면
간소화하여 자동으로 주입한다.

🎈app2.xml
<bean id="moniter" class="anno2.SystemMoniter" />
<bean id="sender" class="anno2.SmsSender" />
🎈SystemMoniter.java
@Autowired
private SmsSender sender;
        ,,,
/*
@Autowired(required=false)
public void setSender(SmsSender sender) {
 	this.sender = sender;
	System.out.println("setSender() 호출됨 => "+sender);//sender.toString
}
*/

🎨 @RequestMapping

웹 요청과 컨트롤러의 메서드를 매핑한다.

@Controller
public class MyController {
    @RequestMapping("/my")
    public String myMethod() {
        // ...
    }
}

🎨 @MappedSuperclass

JPA에서 엔티티가 공통으로 사용하는 필드를 부모 클래스에 정의할 때 사용한다. 여러 엔티티에서 공통적으로 사용하는 필드나 매핑 정보를 한 곳에서 관리할 수 있다.
@MappedSuperclass가 적용된 클래스는 엔티티가 아니므로 테이블과 매핑되지 않고, 직접 생성, 조회, 삭제 등의 작업을 할 수 없다. 대신 이 클래스를 상속받는 자식 클래스에게 매핑 정보를 상속하며, 자식 클래스는 각각의 테이블과 매핑된다.

예를 들어, 모든 엔티티에 공통으로 적용되는 생성일시와 수정일시를 관리하는 경우

@MappedSuperclass
public abstract class BaseEntity {
    private LocalDateTime createdDate;
    private LocalDateTime modifiedDate;
    // getter, setter 생략
}

그리고 이 BaseEntity를 상속받아 엔티티를 정의하면, 각 엔티티는 createdDate와 modifiedDate 필드를 공통으로 가지게 된다.

@Entity
public class MyEntity extends BaseEntity {
    @Id
    private Long id;
    private String name;
    // ...
}

MyEntity 엔티티는 BaseEntity의 createdDate, modifiedDate 필드뿐만 아니라 자신의 id, name 필드까지 총 4개의 필드를 가지게된다.

🎨 @SuppressWarnings("serial")

컴파일러 경고를 무시하도록 지시한다.
"serial"은 직렬화 관련 경고를 무시하도록 하고, Serializable 인터페이스를 구현하는 클래스에 사용할 수 있다.

@SuppressWarnings("serial")
public class MyDTO implements Serializable {
    private String name;
    private int age;
}

🎨 @Component

어노테이션으로 스캔 대상을 지정하여 자동적으로 그 패키지에 들어가 있는 모든 클래스 중에서 @Component가 붙어있는 클래스를 자동으로 빈즈로 등록시켜주는 어노테이션이다.

🎨 @SuppressWarnings

@SuppressWarnings는 자바에서 제공하는 어노테이션으로, 컴파일러의 특정 경고를 무시하도록 한다.

@SuppressWarnings("unused")
public class Book {
    private String title;
    private String author;
    public void unusedMethod() {
        // ...
    }
}

🎈LomBok 라이브러리

🎨 @ToString

Lombok 라이브러리에서 제공하는 @ToString 어노테이션은 클래스에 대한 toString() 메서드를 자동으로 생성한다.

import lombok.ToString;
@ToString
public class Book {
    private String title;
    private String author;
}

🎨 @Data

Lombok 라이브러리를 사용하여 getter, setter, equals, hashCode, toString 메서드를 자동으로 생성한다. DTO나 VO에 사용할 수 있다.

@Data
public class MyDTO {
    private String name;
    private int age;
}

🎨 @EqualsAndHashCode(callSuper = false)

Lombok 라이브러리를 사용하여 equals와 hashCode 메서드를 자동으로 생성한다.
callSuper = false는 상위 클래스의 필드는 이 메서드에 포함되지 않음을 나타낸다. DTO나 VO에 사용할 수 있다.

@EqualsAndHashCode(callSuper = false)
public class MyDTO {
    private String name;
    private int age;
}

🎈Jackson 라이브러리

🎨 @JsonIgnoreProperties

@JsonIgnoreProperties는 Jackson 라이브러리에서 제공하는 어노테이션으로 JSON 직렬화/역직렬화 과정에서 특정 프로퍼티를 무시하도록 설정한다.

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties({"author"})
public class Book {
    private String title;
    private String author;
}

0개의 댓글

관련 채용 정보