-
[Spring] @Component , @Configuration[Spring] 2024. 6. 26. 16:31
프로젝트를 진행하면서 Configuration 을 설정하며 만들었던 기억이 있는데 하나도 안쓰고 있어서 도대체 언제 쓰는건지 궁금해하던 찰나 스프링 시큐리티를 배우면서 Configuration을 설정하는 걸 보고 정리해야되겠다 싶어서 정리한다 ..
Java Config 생성
src/main/resources 에 있는 applicationContext.xml 파일을 대체하기 위해, config.java 파일을 생성한다.
@Configuration
외부 라이브러리 또는 내장 클래스를 Bean으로 등록하고자 할 경우 사용한다. ( 개발자가 직접 제어가 불가능한 클래스)
해당 클래스에서 1개 이상의 @Bean을 제공하는 클래스의 경우 반드시 @Configuration을 사용한다.
스프링 설정 파일로서 스프링 컨테이너를 생성하게 만드는 어노테이션이다.
이 어노테이션이 붙은 클래스는 Config 파일이 되어 xml 파일과 같은 기능을 한다.
@Configuration @EnableWebSecurity @Slf4j public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception { httpSecurity.authorizeRequests(authorizeRequest -> authorizeRequest .anyRequest() .authenticated() ) .formLogin(Customizer.withDefaults()); httpSecurity.rememberMe(rememberMe -> rememberMe .rememberMeParameter("rememeber") .tokenValiditySeconds(300) ); return httpSecurity.build(); } }
@Component
개발자가 직접 작성한 클래스를 Bean에 등록하려고 사용한다.
@Controller, @Service, @Repository 등의 어노테이션에서 상속한다.
Ioc 컨테이너 객체를 생성할 때 자동으로 객체가 생성되며 싱글톤이다.
@ComponentScan 의 대상으로 자동으로 스프링 컨테이너에 빈으로 등록됨.@Service public class UserService { @Autowired private UserRepository userRepository; @Autowired private RoleRepository roleRepository; @Transactional public User createUser(String email, String password, String name, String profileImage, boolean emailStatus) throws Exception { if (userRepository.findByName(name) != null) { throw new Exception("이미 생성된 아이디 입니다."); } if (userRepository.findByEmail(email) != null) { throw new Exception("이미 생성된 이메일 입니다."); } User newUser = new User(); newUser.setName(name); newUser.setEmail(email); newUser.setProfileImage(profileImage); newUser.setEmailStatus(emailStatus); newUser.setPassword(password); roleToUser(newUser, UserRoleType.user); return userRepository.save(newUser); } }
참고자료
https://parkjeongwoong.github.io/articles/Web/5
https://velog.io/@albaneo0724/Spring-Component%EC%99%80-Configuration%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://youngjinmo.github.io/2021/06/bean-component/
'[Spring]' 카테고리의 다른 글
[Spring] Task 실행과 스케쥴링 (0) 2024.08.15 [Spring] JPA , JDBC, Hibernate, Spring data JPA 차이 (0) 2024.07.02 [Spring] @Transactional (0) 2024.05.27 [Spring] Spring Boot로 JDBC Template 기반 애플리케이션 만들기 (0) 2024.05.15 [Spring] Spring Boot의 핵심 개념과 사용 예제 (0) 2024.05.14