스프링 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(); } }
외부 설정값을 빈에 바인딩하는데 사용된다. 이를 통해 MS-SQL 연결 정보를 정의할 수 있다.
@ConfigurationProperties("spring.datasource") public class DatabaseProperties { private String url; private String username; private String password; // getter와 setter 생략 }
메서드가 상위 클래스나 인터페이스의 메서드를 재정의함을 나타낸다. 스프링 시큐리티 설정에서 사용할 수 있다.
- 메서드명이 오버라이딩이 된 메서드인지 확인해주는 기능을 가진 어노테이션이다.
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() .and() .formLogin(); } }
- @Required : 지정한 메서드가 반드시 호출되는지를 체크해주는 어노테이션
- 이 메서드를 반드시 호출해야되는데 만약에 호출하지 않으면 에러를 유발시킨다, 멤버변수와 관련된 에러메세지를 출력시켜준다.
스프링 IoC 컨테이너에게 해당 클래스가 빈 설정 정보를 가지고 있음을 알린다. MyBatis 설정을 위해 사용할 수 있다.
- .java에 @Configuration을 지정하여 xml환경설정 파일 대신에 빈클래스를 등록 시켜서 환경설정을 해주는 역할을 한다.
@Configuration public class MyBatisConfig { // @Bean 등의 어노테이션을 사용한 메서드 정의 }
해당 클래스가 웹 요청을 처리하는 컨트롤러임을 나타낸다.
@Controller public class MyController { @Autowired private MyService myService; @RequestMapping("/my") public String myMethod() { // ... } }
스프링 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 } */
웹 요청과 컨트롤러의 메서드를 매핑한다.
@Controller public class MyController { @RequestMapping("/my") public String myMethod() { // ... } }
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개의 필드를 가지게된다.
컴파일러 경고를 무시하도록 지시한다.
"serial"은 직렬화 관련 경고를 무시하도록 하고, Serializable 인터페이스를 구현하는 클래스에 사용할 수 있다.@SuppressWarnings("serial") public class MyDTO implements Serializable { private String name; private int age; }
어노테이션으로 스캔 대상을 지정하여 자동적으로 그 패키지에 들어가 있는 모든 클래스 중에서 @Component가 붙어있는 클래스를 자동으로 빈즈로 등록시켜주는 어노테이션이다.
@SuppressWarnings는 자바에서 제공하는 어노테이션으로, 컴파일러의 특정 경고를 무시하도록 한다.
@SuppressWarnings("unused") public class Book { private String title; private String author; public void unusedMethod() { // ... } }
Lombok 라이브러리에서 제공하는 @ToString 어노테이션은 클래스에 대한 toString() 메서드를 자동으로 생성한다.
import lombok.ToString; @ToString public class Book { private String title; private String author; }
Lombok 라이브러리를 사용하여 getter, setter, equals, hashCode, toString 메서드를 자동으로 생성한다. DTO나 VO에 사용할 수 있다.
@Data public class MyDTO { private String name; private int age; }
Lombok 라이브러리를 사용하여 equals와 hashCode 메서드를 자동으로 생성한다.
callSuper = false는 상위 클래스의 필드는 이 메서드에 포함되지 않음을 나타낸다. DTO나 VO에 사용할 수 있다.@EqualsAndHashCode(callSuper = false) public class MyDTO { private String name; private int age; }
@JsonIgnoreProperties는 Jackson 라이브러리에서 제공하는 어노테이션으로 JSON 직렬화/역직렬화 과정에서 특정 프로퍼티를 무시하도록 설정한다.
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @JsonIgnoreProperties({"author"}) public class Book { private String title; private String author; }