스프링은 다른 프레임워크에 비해 다음과 같은 특징을 가진다.
스프링 자체가 가볍거나 작은 규모의 코드로 이루어진 것은 아니다.
스프링은 20여개의 모듈로 세분화되고 복잡하고 방대한 코드를 가진 프레임워크다.
경량화는 기존 Java EE 기술의 불필요한 복잡함에 반대되는 개념에서 시작된다.
EJB는 무거운 자바 서버(WAS)가 필요했고, 다루기 힘든 설정파일, 패키징, 불편한 배포의 단점이 있다.
스프링은 톰캣과 같ㅌ은 단순한 서버 환경에서도 동작하고, 단순한 개발환경으로도 엔터프라이즈 애플리케이션 개발하는데 충분하다.
또한 기존 EJB 등의 프레임워크에서 만든 코드에 비해 코드량이 적고 단순하다
File : HelloBean.java
package tests;
/**
* Bean implementation class for Enterprise Bean: Hello
*/
public class HelloBean implements javax.ejb.SessionBean {
private javax.ejb.SessionContext mySessionCtx;
/**
* getSessionContext
*/
public javax.ejb.SessionContext getSessionContext() {
return mySessionCtx;
}
/**
* setSessionContext
*/
public void setSessionContext(javax.ejb.SessionContext ctx) {
mySessionCtx = ctx;
}
/**
* ejbActivate
*/
public void ejbActivate() {
}
/**
* ejbCreate
*/
public void ejbCreate() throws javax.ejb.CreateException {
}
/**
* ejbPassivate
*/
public void ejbPassivate() {
}
/**
* ejbRemove
*/
public void ejbRemove() {
}
public java.lang.String message;
//business methods
// all users can call getMessage()
public String getMessage() {
return message;
}
// all users can call setMessage() but only few users can set new message.
public void setMessage(String s) {
// get bean's caller using getCallerPrincipal()
java.security.Principal principal = mySessionCtx.getCallerPrincipal();
java.lang.String callerId= principal.getName();
// check if bean's caller is granted Mgr role
boolean isMgr = mySessionCtx.isCallerInRole("Mgr");
// only set supplied message if caller is "bob" or caller is granted Mgr role
if ( isMgr || callerId.equals("bob") )
message = s;
else
message = "Hello";
}
}
@Configuration
public class HelloConfiguration {
@Bean
public HelloController sampleController() {
return new SampleController;
}
}
IOC 컨테이너는 스프링의 가장 중요하고 핵심적인 기능이다.
자바의 리플렉션을 이용해서 객체의 생명주기를 관리하고 의존성 주입을 통해 각 계층이나 서비스들간의 의존성을 맞춘다.
이러한 기능들은 주로 환경설정을 담당한는 configuration 파일에 의해 설정되고 수행된다.
의존성이란 한 객체가 다른 객체를 사용할 때 의존한다고 한다.
아래 그림에서 Store 객체는 Pencil 객체를 의존한다.
public class Store {
private Pencil pencil;
}
두 객체 간의 의존성을 맺어주는 것을 의존성 주입이라고 한다.
스프링은 로깅이나 보안, 트랜잭션 등 핵심적인 비즈니스 로직과 관련이 없으나 여러 곳에서 공통적으로 쓰이는 기능들을 분리하여 개발해 실행 시에 서로 조합할 수 있는 AOP를 지원한다.
참고