반응형
1. ComponentScan
: base-package로 설정 된 하위 경로에 특정 어노테이션을 가지고 있는 클래스를 이용하여 bea으로 등록하는 기능
@Component 어노테이션이 작성 된 클래스를 인식하여 bean으로 등록
특수 목적에 따라 세부 기능을 제공하는 @Controller, @Service, @Repository, @Configuration등을 인식
컴포넌트 스캔 기본 대상
@Component | 컴포넌트 스캔에서 사용 |
@Controller | 스프링 MVC 컨트롤러에서 사용 |
@Service | 스프링 비즈니스 로직에서 사용 |
@Repository | 스프링 데이터 접근 계층에서 사용 |
@Componect
: 해당 클래스를 bean으로 등록할 수 있는 어노테이션
( value= " " ) 로 beam의 이름 설정
basePackeges 등록
: basePackeges에 등록 되지 않은 패키지는 스캔에서 제외
등록 된 패키지 내의 @Componenet 어노테이션을 탐색
2. excludeFilter
스캐닝에서 제외할 타입을 기술하면 해당 타입은 스캐닝에서 제외시킴
작성방법 : @ComponentScan(basePackages= " " , exbludeFilters= { @ComponenetScan.Filter( 제외시킬 값 설정 ) }
excludeFilter 설정 방법
1) 타입으로 설정
package com.greedy.section01.javaconfig.config;
import org.springframework.context.annotation.ComponentScan;
1. 타입으로 설정
@Configuration
@ComponentScan(basePackages="com.greedy.section01.javaconfig",
excludeFilters = {
@ConponentScan.Filter(
type = FilterType.ASSIGNABLE_TYPE,
classes = { MemberDAO.class }
)
})
public class ContextConfiguration2 {
}
2) 어노테이션 종류로 설정
package com.greedy.section01.javaconfig.config;
import org.springframework.context.annotation.ComponentScan;
2. 어노테이션 종류로 설정
@Configuration
@ComponentScan(basePackages="com.greedy.section01.javaconfig",
excludeFilters = {
@ConponentScan.Filter(
type = FilterType.ANNOTATION,
classes = {org.springframework.stereotype.Component.class}
)
})
public class ContextConfiguration2 {
}
3) 표현식으로 설정
package com.greedy.section01.javaconfig.config;
import org.springframework.context.annotation.ComponentScan;
3. 표현식으로 설정
@Configuration
@ComponentScan(basePackages="com.greedy.section01.javaconfig",
excludeFilters = {
@ConponentScan.Filter(
type = FilterType.REGEX,
pattern= {"com.greedy.section01.*"}
패턴안에 정규표현식을 작성할 수 있음
)
})
public class ContextConfiguration2 {
}
sueDefaultFilters 설정 방법
: useDefaultFilters를 false로 하면 모든 어노테이션을 스캔하지 않음
스캔할 대상 클래스만 따로 지정 가능
package com.greedy.section01.javaconfig.config;
import org.springframework.context.annotation.ComponentScan;
@Configuration
@ComponentScan(basePackages="com.greedy.section01.javaconfig",
useDefaultFilters=false,
includeFilters= {
@ComponentScan.Filter(
type=FilterType.ASSIGNABLE_TYPE,
classes = { MemberDAO.class } MemberDAO.class만 스캔됨.
)
})
public class ContextConfiguration3 {
}
ComponentScan 사용 예시
DTO
package com.greedy.section01.javaconfig;
public class MemberDTO {
private int sequence;
private String id;
private String pwd;
private String name;
public MemberDTO() {}
public MemberDTO(int sequence, String id, String pwd, String name) {
super();
this.sequence = sequence;
this.id = id;
this.pwd = pwd;
this.name = name;
}
public int getSequence() {
return sequence;
}
public void setSequence(int sequence) {
this.sequence = sequence;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "MemberDTO [sequence=" + sequence + ", id=" + id + ", pwd=" + pwd + ", name=" + name + "]";
}
}
basePackeges 등록
package com.greedy.section01.javaconfig.config;
import org.springframework.context.annotation.ComponentScan;
@Conriguration
@ComponentScan(basePackages="com.greedy.section01.javaconfig")
public class ContextConfiguration1 {
}
DAO interface
package com.greedy.section01.javaconfig;
public interface MemberDAO {
회원 번호로 회원 정보를 조회하는 메소드
MemberDTO selectMember(int sequence);
회원 정보를 저장하고 결롸를 리턴하는 메소드
boolean insertMember(MemberDTO newMember);
}
DAO 상속받는 Class
package com.greedy.section01.javaconfig;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Component;
@Component(value="memberDAO")
public class MemberDAOImpl implements MemberDAO{
private final Map<Integer, MemberDTO> memberMap;
public MemberDAOImpl() {
memberMap = new HashMap();
memberMap.put(1, new MemberDTO(1, "user01", "pass01", "홍길동"));
memberMap.put(2, new MemberDTO(1, "user02", "pass02", "유관순"));
}
매개변수로 전달 받은 회원 번호를 map에서 조회 후 회원 정보를 리턴해주는 용도의 메소드
@Override
public MemberDTO selectMember(int sequence) {
return memberMap.get(sequence);
}
매개변수를 전달 받은 회원 정보를 map에 추가하고 성고 실패 여부를 boolean으로 리턴하는 메소드
@Override
public boolean insertMember(MemberDTO newMember) {
int before = memberMap.size();
memberMap.put(newMember.getSequence(), newMember);
int after = memberMap.size();
return after > before ? true : false;
}
}
출력하기
package com.greedy.section01.javaconfig;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.greedy.section01.javaconfig.config.ContextConfiguration1;
public class Application1 {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(ContextConfiguration1.class);
bean이름 출력용
String[] beanNames = context.getBeanDefinitionNames(); // context 안에있는 모든 정보의 이름을 알려주세요
for(String beanName : beanNames) {
System.out.println("beanName : " + beanName);
}
bean 정보 출력용
MemberDAO memberDAO = context.getBean(MemberDAO.class);
System.out.println(memberDAO.selectMember(1));
System.out.println(memberDAO.insertMember(new MemberDTO(3, "user03", "pass03", "새로운 멤버")));
System.out.println(memberDAO.selectMember(3));
}
}
출력 결과
beanName : contextConfiguration1
MemberDTO [sequence=1, id=user01, pwd=pass01, name=홍길동]
true
MemberDTO [sequence=3, id=user03, pwd=pass03, name=새로운 멤버]
xml로 ComponentScan과 filter 설정
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="com.greedy.section02.xmlconfig"/>
<context:exclude-filter type="assignable" expression="com.greedy.section02.xmlconfig.MemberDAO"/>
</context:component-scan>
</beans>
반응형
'프로그래밍 > Spring & Spring boot' 카테고리의 다른 글
06 Spring : Setter 메소드 / 생성자를 통한 의존성 주입 방법 (0) | 2022.09.01 |
---|---|
05 Spring : DI(의존성 주입) (0) | 2022.09.01 |
04 Spring : Bean 등록방법_java based (0) | 2022.09.01 |
02 Spring : Bean 등록방법_ XML based (0) | 2022.09.01 |
01 Spring : Spring IoC / 스프링 컨테이너 (0) | 2022.08.31 |