반응형

Core Concerns : 특정 시스템의 핵심 가치와 고유 목적이 그대로 드러난 관심영역

Crosscutting Concerns ; 로깅, 보안, 트랜잭션 관리등과 같이 여러 모듈간 공통적으로 적용되는 공통 관심영역

1. JoinPoint

- Crosscutting Concerns 모듈이 삽입되어 실행될수 있는 특정 위치

- 제어 흐름중의 한 시점(메소드 호출시점, 예외 던져지는 시점등)

2. PointCut

 - JoinPoint 중 AOP를 적용하기 위한 선별된 JoinPoint

 - Pattern Matcing과 PointCut Designator를 묶어 룰을 정함.

3. Advice

 - JoinPoint에 삽입되어 동작할 수 있는 코드

 - 동작시점 

   before : Matching 된 JoinPoint 이전에 동작하는 Advice

   after returning : Matching  된 JoinPoint가 성공적으로 return 된 후 동작하는 Advice

   after throwing : Matching  된 JoinPoint가 Exception 이 발생하여 종료된 후 동작하는 Advice

   after  : Matching  된 JoinPoint가 종료된후 동작하는 Advice

   around ; Matcing 된 Joinpoint 전후에 동작

4. Weaving 

 - Core Concerns 모듈에 Crosscutting Concerns 모듈 역어서 동작수행

5. Aspect

 - 어디에서(Pointcut) 무엇을 할 것인지(Advice)를 합쳐놓은것을 말함


728x90
반응형

'Development > Java' 카테고리의 다른 글

[Spring]SpEL(Spring Expression Language)  (0) 2012.07.31
[Spring]Autowiring  (0) 2012.05.03
[Spring]Spring Bean Scope  (0) 2012.04.09
[Spring]Dependency Injection  (0) 2012.03.21
[Spring in Action]DispatcherServlet 구성  (0) 2011.10.25
반응형

1. Singleton Scope

- SpringContatiner는 해당 Bean에 대한 여러개의 요청이나 참조에 대해 하나의 Bean 인스턴스만 생성해서 제공함.

- 사용자의 요청시마다 유지해야할 data일 경우 Singleton Scope는 부적합.

- scope을 별도로 지정하지 않을경우 기본값은 Singleton Scope이다.


2. Prototype Scope

- SpringContainer는 요청시마다 새로운 인스턴스 생성하여 제공.


3. Request Scope

- Http Request마다 새로운 인스턴스 를 생성하여 제공


4. Session Scope

- Http Session마다 새로운 인스턴스 를 생성하여 제공

728x90
반응형

'Development > Java' 카테고리의 다른 글

[Spring]Autowiring  (0) 2012.05.03
[Spring]AOP 주요 구성요소  (0) 2012.04.13
[Spring]Dependency Injection  (0) 2012.03.21
[Spring in Action]DispatcherServlet 구성  (0) 2011.10.25
[Spring In Action]Spring MVC 요청의 생명주기  (0) 2011.10.17
반응형
Bean Definition 파일에 정의 한 dependency 관련 정보를 바탕으로 객체 사이의 의존 관계를 Container가 자동적으로 연결해주는것을 말한다. Container API 에 종속되는것을 줄일수 있다.
- Setter Injection : Setter 메소드 구현을 통해 해당 객체 초기화시 Container로 부터 참조관계에 놓인 특정 리소스를 할당받음.
- Constructor Injection : Constructor 구현을 통해 특정 객체 초기화 시 Contatiner로부터 참조 관계에 놓인 특정 리소스를 할당 받는 방법

-- Setter Injection 예
[속성 정의 파일 ] 
  1. <bean id="“movieService&quot;" class="….MovieServiceImpl">
  2.    <property name="“genreService&quot;" ref="“genreService&quot;/"></property></bean>
  3.    <bean id="”genreService”" class="”....GenreServiceImpl”/">
  4. </bean>
[구현클래스 ] 
  1. public class MovieServiceImpl implements MovieService{
  2.       DepBean genreService;
  3.       public void setGenreService(GenreService genreService) {
  4.             this.genreService = genreService;
  5.       }
  6. //중략
  7. }
-- Constructor Injection 예
  1. <bean id="“movieService" class="“org.anyframe.exercise.moviefinder.service.impl.MovieServiceImpl">
  2.      <constructor-arg ref="“movieDao/"></constructor-arg></bean>   
  3.      <bean id="movieDao" class="org.anyframe.exercise.moviefinder.service.impl.moviedao"/>
  4. </bean>
[구현클래스 ] 
  1. public class MovieServiceImpl implements MovieService {
  2.       private MovieDao movieDao;
  3.       public MovieServiceImpl(MovieDao movieDao) {
  4.            this.movieDao = movieDao;
  5.      }
  6. }
% Circular Dependencies
  1. <bean id="beanFirst" class="test.BeanFirst">
  2.       <constructor-arg ref="beanSecond"></constructor-arg>
  3. </bean>
  4. <bean id="beanSecond" class="test.BeanSecond">
  5.       <constructor-arg ref="beanFirst"></constructor-arg>
  6. </bean>
 두개의 서로다른 Bean이 constructor-arg 를 이용해 서로의 Bean을 참조하는 경우에 BeanCurrentlylnCreationException 발생


728x90
반응형
반응형
  1. <servlet>
  2.     <servlet-name>actionServlet</servlet-name>
  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  4.     <load-on-startup>1</load-on-startup>
  5. </servlet>
DispatcherServlet이 로드되면 이 서블릿에 부여된 이름을 기반으로 이름지어진 XML 파일을 이용하여 스프링 어플리케이션 컨텍스트를 로드한다. (actionServlet-servlet.xml) 
  1. <servlet-mapping>
  2.     <servlet-name>actionServlet</servlet-name>
  3.     <url-pattern>*.html</url-pattern>
  4. </servlet-mapping>
html로 끝나는 모든 URL 처리 
  1. <listener>
  2.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  3. </listener>

컨텍스트 로더 구성 

ContextLoaderListener 구성후에 설정파일 위치 지정해야한다. 지정하지 않으면 /WEB-INF/applicationContext.xml을 검색하게 된다. 

  1. <context-param>
  2.     <param-name>contextConfigLocation</param-name>
  3.     <param-value>classpath:webservice/*-webservice.xml</param-value>
  4. </context-param>


728x90
반응형
반응형


1. 요청이 가장 먼저 들르는곳은 DispatcherServlet이다. DispatcherServlet이 프론트 컨트롤러 역할을 한다. 

2. DispatcherServlet은 요청을 스프링 MVC 컨트롤러로 보낸다. 이때 요청을 어느 컨트롤러로 보낼지 알아내기 위해 Handler Mapping에 도움을 청한다. Handler Mapping은 요청에 담긴 URL을 참고해서 결정을 내린다.

3. 컨트롤러가 결정되면 DisspatcherServlet이 요청을 Coltroller로 보낸다. Controller에서는 비지니스 로직을 수행하거나 여러개로 서비스에 비지니스 로직의 책임을 위임하기도 한다. 결론적으로 비지니스로직의 처리가 끝날때까지 기다린다. 처리가 끝난면 브라우저에 표시될 정보가 만들어진다. 이 정보가 Model 이라고한다.

4. Controller는 모델 정보다 이정보를 보여줄 view의 이름을 ModelAndView 객체에 담아 DispatcherServlet으로 돌러 보낸다. 

5. ModelAndView가 DispatcherServlet에 도착하면 ViewResolver에게 실제 view를 보여줄 Jsp 페이지를 검색해줄것을 요청한다. (View 페이지가 Jsp 일 경우) ModelAndView객체에는 실제 Jsp페이지에 대한 레퍼런스를 갖고 있는것이 아니라 뷰를 검색하는데 사용되는 논리적인 이름을 갖고 있다.

6. 마지막으로 view 객체에 모델 데이터를 전달한다. 

728x90
반응형
반응형
- Dirty Read
  Transaction에서 다른 Transaction에 의해 변경됐지만 아직 커밋되지 않은 데이터를 읽어버리는 문제.
  이 데이터가 커밋되지 않고 롤백 됐을경우 첫번째 Transaction에서 읽은 데이터는 유요하지 않은 데이터가 된다.

- NonRepeatable Read
  Transaction이 같은 질의를 2번 이상 수행할때 서로 다른 데이터를 얻기 되는것을 말한다. 
  각 질의 사이에 다른 Transaction이 데이터를 변경하는 경우에 발생한다. 

- Phantom Read 
  Transaction이 둘 이상의 데이터 행을 읽은 다음, 동시에 다른 Transaction이 추가 행을 삽입할때 발생한다.
  첫번째 질의에는 없어떤 행이 두번째 질의에서는 나타나게된다.

Nonrepeatable Read와 Phantom Read 의 차이가 헷갈려서 인터넷을 찾아본 결과, 
Nonrepeatable Read는 Transaction 중간에 Update나 Delete가 끼어들어 데이터의 변형이 일어났을 경우이고
Phantom Read는  중간에 Insert가 수행되어서 행이 추가되는 경우라는 차이가 있다고 한다.  
728x90
반응형
반응형
 애트리뷰트 용도 
diskExpiryThreadIntervalSeconds   얼마나 자주 디스크 만료 스레드를 실행시킬지 지정. 디스크에 저장된 캐시에서 만료될 항목을 제거할 주기(기본값 : 120초)
diskPersistent  VM 종료시 VM 재시작에 대비해 디스크를 이용해 캐시 내용을 저장할지 여부(기본값 : false) 
eternal 캐시 항목의 영구성을 지정. 영구설정시 만료되지 않음(필수) 
maxElementsInMemory  메모리에 캐시될 수 있는 항목의 최대 개수(필수)
memoryStoreEvictionPolicy   maxElementsInMemory에 도달했을 때 제거하는 방법지정. 기본으로는 '가장 사용된지 오래된(LRU : theLeast Recently Used)' 사용, 이외에 '선입선출(FIFO : First In/First-Out)'이나 '가장 사용되지 않은(LFU : Less Frequently Used)'
name 캐시의 이름 (필수) 
overflowToDisk  maxElementsInMemory 한도에 도달했을때 오버플로우된 항목을 디스크로 넘길지 여부(필수) 
timeToIdleSeconds  캐시항목이 사용된 지 얼마나 지났을때 만료시킬지 지정(기본값 : 0) 
timeToLiveSeconds   캐시된 후 캐시에서 만료되기 전까지 지낼 수 있는 최대 시간. 0은 영구히 캐시에 남아있을수 있음(기본값 : 0)

캐시 설정시 defaultCache는 반드시 있어야 한다. defaultCache는 캐시 사용시 다른 적절한 캐시를 찾을수 없을 때 사용된다. 

 
	





728x90
반응형
반응형
driverClassName : JDBC 드라이버 패키지명을 포함한 완전한 클래스명
url : 데이터 베이스에 필요한 JDBC URL
initialSize : 풀이 시작될 때 생성할 커넥션 수
maxActive : 풀에서 동시에 제공하는 최대 커넥션 수
maxIdl : 동시에 휴먼 상태로 유지도리 수 있는 최대 커넥션 수

  1. <bean id="defaultHubDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  2.         <property name="driverClassName" value="org.hsqldb.jdbcDriver"></property>
  3.         <property name="url" value="jdbc:hsqldb:hsql://localhost/roadrantz/roadrantz"></property>
  4.         <property name="username" value="username"></property>
  5.         <property name="password" value="pw"></property>
  6.         <property name="maxActive" value="80"></property>
  7.         <property name="maxIdle" value="50"></property>
  8. </bean>


728x90
반응형
반응형
[abc] : a, b or c
괄호안에 있는 문자가 존재하면 true(연결된것은 안됨)
  1. public class Test {
  2.     public static void main(String[] args) {
  3.             Pattern pattern      = Pattern.compile("[ABCD]");
  4.         Matcher matcher = pattern.matcher("A");
  5.         System.out.println(matcher.matches());
  6.     }
  7. }
결과 : true 
if문 쓰는것보다 훨씬 유용한것 같다.  


728x90
반응형

+ Recent posts