DevEnjoy

One Step Closer

Day: 2015년 7월 8일

Spring Singleton

2015년 7월 8일 by YongPwi 1 Comment
  • Spring 인스턴스 생성시 Default로 Singleton으로 관리
  • Singleton으로 선언된 SpringBean의 경우 해당 Bean이 속한 Spring Container 안에서만 하나의 인스턴스가 생성/사용되는 것을 보장
  • Spring은 Singleton Registry를 만들어 직접 Singleton 형태의 오브젝트를 만들고 관리
  • Servlet은 대부분 멀티스레드 환경에서 Singleton으로 동작
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class UserDaoTest {
    public static void main(String args[]) throws ClassNotFoundException, SQLException {
        ApplicationContext context = new AnnotationConfigApplicationContext(DaoFactory.class);

        UserDao dao = new DaoFactory().userDao();

        UserDao dao3 = context.getBean("userDao", UserDao.class);
        UserDao dao4 = context.getBean("userDao", UserDao.class);

        System.out.println(dao3);
        System.out.println(dao4);
    }
}

// 동일한 인스턴스 결과
springbook.user.dao.UserDao@2c039ac6
springbook.user.dao.UserDao@2c039ac6

Singleton 패턴 구현 방식 문제점

  • private 생성자를 갖고 있기 때문에 상속 불가
    • 객체지향의 상속과 다형성 적용 불가
  • 테스트 하기 어렵다
    • Singleton은 만들어지는 방식이 제한적이므로 테스트에서 Mock Object로 대체하기 어려움
  • 서버환경에서 싱글톤이 하나만 만들어지는지 보장 불가
    • 서버에서 class loader 구성하는 방법에 따라서 하나 이상의 오브젝트가 만들어 질 수 있음
  • Singleton 사용은 전역 상태를 만들수 있다.


Spring Singleton

  • Sington Registry 덕분에 Singleton으로 사용될 클래스라도 public 생성자를 가질 수 있다.
  • Spring Sington Bean으로 사용되는 클래스를 만들때 개별적으로 바뀌는 정보는 필히 로컬변수로 선언해서 사용해야 한다.


Spring Bean 범위

  • Singleton
    • Container 한개에 한개만 생성되며 강제로 제거하지 않는 한 Container가 존재하는 동안 계속 유지된다.
  • Prototype
    • Container에 Bean을 요청할 때마다 매번 새로운 오브젝트 생성
  • Request
    • HTTP 요청시마다 생성, 웹 친화적인 Spring ApplicationContext의 컨텍스트에서만 유효
  • Session
    • 웹의 세션과 유사

참고

Spring의 Singleton과 Java static기반 Singleton 패턴의 차이
나는 싱글턴이 싫어요
[Spring 레퍼런스] 4장 IoC 컨테이너 #6

Posted in: Java, Programing Tagged: Singleton, Spring

IntelliJ EAP Font rendering

2015년 7월 8일 by YongPwi 2 Comments

IntelliJ 사용중 CheckStyle 플러그인 업데이트를 하였더니

IntelliJ가 재 시작시 정상적으로 실행이 되지 않았다,,,

확인해보니 CheckStyle 플러그인이 java 1.8 기반에서 동작해서 그런 문제였고,,,

IntelliJ시 필요한 java를 1.8로 올려야 했다,,,

버전 바꾸는 방법은

OS X 기준으로

응용 프로그램 > IntelliJ 선택 마우스 오른쪽 버튼 > 패키지 내용 보기 > Contents > Info.plist

1
2
      <key>JVMVersion</key>
      <string>1.6+,1.7+</string> //버전 변경 = > 1.8

상위 방법으로 손쉽게 가능하다.

그런데 문제는 java 1.8로 수정하니 IntelliJ 메뉴 및 콘솔, 에디터 폰트가 미묘하게 이상하게 변경 되었다.

– 기존 java 1.6

스크린샷 2015-07-08 오후 2.34.46

– 변경 java 1.8

스크린샷 2015-07-08 오후 2.36.38

폰트 설정 문제인가 싶어서 겁나게 메뉴 및 구글링을 하였지만,,,

방법을 찾지 못하여서 포기 하였다,,,

그런데 오늘 IntelliJ 15 릴리즈 소식에 받아서 다시 세팅을 하였는데,,,

역시나 Font 문제가 발생하였다,,,

그래서 얼마 전에 했던 삽질을 다시 좀 하다가 보니,,,

IntelliJ 정식 배포 이외에 IntelliJ 자체적으로 java를 포함하여 배포되는 버전에는

메뉴가 새롭게 추가된 것을 확인 하였다,,,(15 이외 버전은 확인 해보지 않았음,,,)

IntelliJ Preferences > Appearance & Bebavior > Appearance

상위 경로 메뉴에서 보면 Antialiasing 초기 세팅값이 Without LCD rendering 이다,,,

스크린샷 2015-07-08 오후 2.36.05

요놈 때문에 그런데,,,

스크린샷 2015-07-08 오후 2.37.01

상위 처럼 LCD Rendering in IDE and Editor 선택 Apply 하면

기존과 동일하게 font가 보기좋게 바뀐다.

쫌 뒤져보니

기존 java 1.6에서 사용중인 Quartz Graphics Framework 문제인듯 싶은데,,,

아직 명확하게 해결된 건 아닌듯 싶다,,,

삽질 하신 분들에게 조금이라도 도움이 되길,,,

IntelliJ Font rendering 참고 블로그

Posted in: Java, Programing Tagged: Antialiasing, font, IntelliJ

Calendar

7월 2015
일 월 화 수 목 금 토
« 2월   9월 »
 1234
567891011
12131415161718
19202122232425
262728293031  

Recent Posts

  • ubuntu bastion 설정
  • Spring Boot properties 암호화
  • Git Repository Bitbucket과 Issue Tracker Redmine 연동 설정
  • Spring Security 동일 session 제어
  • Spring @Mock, @Mockbean, @InjectMock

Recent Comments

  • pzotov (Ubuntu 14.04에서 Sonarqube 6.7.1 service 등록)
  • cours de theatre paris (AWS ELB와 Auto Scaling 연동, nginx)
  • bayern munich (IntelliJ EAP Font rendering)
  • camiseta del chelsea (OS X에서 APP 아이콘 변경)
  • cheap football shirts replica (jQuery Ajax에서 json Array 직렬화)

Copyright © [the-year] [site-link].

Powered by [wp-link] and [theme-link].