- JPA는 Entity를 생성할 때 reflection을 사용하기에 기본 생성자가 필수다. 그러나 접근제어자는 public, proteced여야만 한다. Lazy load시 생성되는 proxy객체가 해당 Enitty의 기본생성자를 이용하기에 생성자접근을 막는다면 proxy를 생성할 수 없다.
- 클래스 설계 및 코드에서는 클래스간의 의존관계는 추상적인 것에 의존하도록 작성한다. 런타임 의존관계시에 실제 사용되는 클래스는 어플리케이션 컨텍스트에게 맡긴다.(IoC)
- DI를 통해 OCP를 잘 이용할 수 있다. 스프링을 사용한다는 것은 DI를 어떻게 잘 사용할 수 있을지 고민하는 것.
- 스프링은 POJO를 위한 프레임워크이다. (현재까지도 그런지는 잘 모르겠다)
- 어플리케이션 컨텍스트의 오브젝트 scope는 기본 Singleton이다. 설정을 통해 porototype(생성 시 새로운객체생성)scope를 가질 수 있다.
- 어플리케이션 컨텍스트는 객체를 싱글톤으로 생성한다.(singleton패턴과는 달리 기본생성자를 private으로 설정하지 않는다.)
- Servlet과 같은 서비스 오브젝트도 보통하나만 생성이 되고 요청시 생성되는 여러쓰레드들이 생성된 하나의 servlet객체들과 통신한다.