1. 스프링은 엄청나게 많은 필터를 가지고 있다

A라는 큰 성이 있는데 그 안에 왕의 집이 있다

B라는 나라랑 전쟁중이고

 

B나라 적군이 A나라에 침입을 하려해서 A나라에서 입구에서 아이디 카드를 확인해서

검열을 해준다 이것을 필터라고 한다

 

A나라 사람이라고 하더라도

특정 권한을 가진 사람만 왕의 집에만 들어오게 한다

이때도 필터라는게 필요하다

 

필터 : 문지기 (임무)

 

스프링 자체가 기본적으로 가지고 있는 필터도 있다

사용중이지 않은 필터를 사용하겠다고 설정할 수도 있고

사용자가 직접 필터를 생성해서 사용할 수 있다

 

섬 == 톰캣

왕의집 == 스프링 컨테이너

 

서로 가지고 있는 필터는 다르게 불린다

 

톰캣이 가지고 있는 필터는 필터라고 한다 web.xml

스프링이 가지고 있는 필터는 인터셉터 라고 한다 (AOP)

 

2. 스프링은 엄청나게 많은 어노테이션을 가지고 있다 (리플렉션, 컴파일 체킹)

주석 // : 컴파일러가 무시하는것

 

어노테이션 @ : 주석인데 컴파일러가 체킹할 수있게 힌트를 주는것

오버라이딩된 메서드 위에 @Override 적혀있으면 메서드가 있는지 확인하고

없으면 컴파일 에러를 내어준다

 

리플렉션 : 어떤 해당 클래스가 어떤 필드, 어떤 메서드 등등 들고있는지  분석하는 기법

런타임시에 분석한다

 

스프링에서는 어노테이션을 활용해서 객체 생성을 한다

@Component : 클래스 메모리에 로딩

@Autowired : 로딩된 객체를 해당 변수에 집어 넣어

라는 약속이 되어 있다면

 

A라는 클래스 위에 @Component가 적혀있으면 스프링이 IOC, 스캔해서 heap 메모리에 넣는다

 

A객체를 클래스 B에서 사용하고 싶을때 자바에서는 A a = new A(); 로해서 새로운 객체를 만드는데

스프링에서는 A a; 선언만 하고 위에다가 @Autowired를 적어두면

스프링이 스캔할때 B클래스 내부에 어떤애가 있는지 분석하는 기법을 리플렉션 이라고 하고

메서드 필드 어노테이션이 있는지 체킹할 수 있고 무엇을 하라고 설정할 수 도 있다

 

그래서 스프링 컨테이너에서 A 객체가 있는지 확인하고 있다면 변수에 해당 객체 담고

없으면 null이 된다