개발자 미니민의 개발스터디

[spring] 컴포넌트 스캔을 이용한 빈 등록

by mini_min
[spring] 컴포넌트 스캔을 이용한 빈 등록

✔️ 컴포넌트 스캔으로 빈 등록

: 특정 패키지에 위치한 클래스를 스프링 빈으로 자동 등록해주는 설정방식이다.

@Component, @Controller, @RestController, @Service, @Repository 등의 애노테이션을 기본적으로 스캔하는 빈을 등록한다.

@Autowired, @Required, @Resource, @Inject 같은 애노테이션들도 활성화된다.

<!-- @Component, @Service, @Controller, @Repository 등 스테레오 타입 애노테이션 활성화 시키기 -->
<!-- Service : 일을 하는 애한테 붙이는 것 -->
<!-- Controller : 나중에 MVC 에서 사용한다. -->
<!-- Repository : DB 작업하는 애들한테 사용한다. -->
<context:component-scan base-package="com.anno.user6"/>

 

 

✔️ @Component : 자동으로 빈을 등록(객체 생성)

: 자동으로 빈을 등록(객체 생성)

빈의 이름은 클래스명의 첫글자를 소문자로 하는 클래스명이다.

동일한 빈 이름이 2개 이상이 있으면 에러가 발생한다. (절대 xxx 이름중복xxx)

 

@Component
public class UserServiceImpl implements UserService {
	private String name;
	private String tel;
	private int age;
	
	public UserServiceImpl() {
		this.name = "김자바";
		this.tel = "010-1111-2222";
		this.age = 20;
	}
	
	@Override
	public String message() {
		String s = name + " : " + tel + " : " + age + 
				 (age >= 19 ? " , 성인 " : " , 미자 ");
		
		return s;
	}
	
	
}

 

빈의 이름을 부여하여 빈 등록도 가능하다.

// 빈의 이름을 부여하여 빈 등록도 가능하다.
@Component("user6.userServiceImpl2")
public class UserServiceImpl2 implements UserService {
	private String name;
	private String tel;
	private int age;
	
	public UserServiceImpl2() {
		this.name = "다자바";
		this.tel = "010-3456-3456";
		this.age = 22;
	}
	
	@Override
	public String message() {
		String s = name + ", " + tel + ", " + age + 
				 (age >= 19 ? " , 성인 " : " , 미자 ");
		
		return s;
	}
	
	
}

 

✨ @Resource : JAVA것, JDK9부터는 기본으로 제공안함

✨ @PostConstruct : JAVA것, JDK9부터는 기본으로 제공안함

✨ @PreDestroy : JAVA것, JDK9부터는 기본으로 제공안함

🔥 @Component("user7.userService") : 패키지 명이랑 클래스명으로 이름 주기

@Component
public class User {
	
	//@Autowired 		
	
	//JAVA것, JDK9부터는 기본으로 제공안함
	@Resource(name = "user7.userService")
	private UserService userServiceImpl;
	
	public User() {
		System.out.println("생성자..");
	}
	
	@PostConstruct 	//JAVA것, JDK9부터는 기본으로 제공안함
	public void init() {
		System.out.println("생성자 호출 후 바로 다음에 호출.. 초기화");
	}
	
	public void write() {
		System.out.println("-- @Resource, @PostConstruct, @PreDestroy  -- ");
		System.out.println(userServiceImpl.message());
	}
	
	@PreDestroy		//JAVA것, JDK9부터는 기본으로 제공안함
	public void destroy() {
		System.out.println("객체 소멸전 호출...");
	}

}
//패키지 명이랑 클래스명으로 이름 주기
@Component("user7.userService")
public class UserServiceImpl implements UserService {
	private String name;
	private String tel;
	private int age;
	
	public UserServiceImpl() {
		this.name = "김자바";
		this.tel = "010-1111-2222";
		this.age = 20;
	}
	
	@Override
	public String message() {
		String s = name + " : " + tel + " : " + age + 
				 (age >= 19 ? " , 성인 " : " , 미자 ");
		
		return s;
	}
	
	
}

 

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기