[eclipse] 외부 에디터 사용할때 새로고침 자동으로 설정

화면쪽 작업을 할 때, 이클립스 에디터 말고 다른 에디터를 사용하고 싶다. 하지만 다른 에디터에서 저장을 해도 화면에 바로 적용이 안되고 이클립스에서 Refresh를 해줘야 하는 불편함이 있다. 그래서 찾아보니 Refresh 안해도 되게 하는 설정이 있다.

Eclipse 메뉴에서 Window > Preferences 선택하면 창이 뜬다.
그리고 General > Workspace 페이지로 가서 Refresh using native hooks or polling 설정을 체크해 주면 된다.

이것을 설정하면, 파일 업로드를 해도 Refresh를 해줘야 했었는데 Refresh 안해도 될 것 같다.

참고 : http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2Ftasks%2Ftasks-52.htm

[spring] static에서 spring bean 가져오기

먼저 목적은 아래와 같은 코드가 작동하게 하는 것이다.

@Component
public class Foo {
    public void doA(){
        System.out.println("doA");
    }
}

public class Boo {
    @Autowired
    public static Foo foo;
}

public class ApplicationTests {
    @Test
    public void contextLoads() {
        Boo.foo.doA();
    }
}

물론 디자인 상으로는 클래스에 저장되는 static 자원에서 객체를 가리키게 하는 것은 좋지 않지만, 이런 상황에서 그나마 깔끔하게 처리하는 방법은 없을까?

문제점 :

  1. 먼저 @Autowired는 Spring에 의해서 관리되야 주입을 해주는데, Boo는 현재 그렇지 않다.
  2. 아무리 Boo에서는 클래스 레벨에서 Foo를 사용하고 싶다고 하더라도 객체는 클래스 로딩된 후에 생성되기 때문에 Boo 클래스가 로딩될 당시에 Foo 객체는 존재하지 않는다.

해결책 :

  • Boo 도 싱글턴 객체로 스프링에서 관리되게 등록해준다.
  • Boo 객체가 생성될 때 Foo 객체를 가져오고, static 필드에 넘겨준다.

먼저 첫번째 방법은 @PostContruct를 이용해서 static 필드에 값을 넘겨주는 방법이다.

@Component
public class Boo {

    public static Foo foo;

    @Autowired
    private Foo fooInstance;

    @PostConstruct
    private void init() {
        foo = fooInstance;
    }
}

두번째 방법은 생성자에 @Autowired를 사용하는 방법이다.

@Component
public class Boo {

    public static Foo foo;

    @Autowired
    private Boo(Foo foo) {
        this.foo = foo;
    }
}

생성자나 init 같은 함수들은 private으로 하더라도 Spring이 알아서 접근해서 호출해준다. 생성자에 @Autowired는 파라미터로 들어오는 bean을 주입시켜 준다.

참고 : http://stackoverflow.com/questions/17659875/autowired-and-static-method

[sublime] 매크로 만들기

개요

자주 사용하는 서브라임 기능들의 묶음을 매크로로 만들어서 쓸 수 있다.

Tools > Record Macro 선택 후 원하는 작업들을 한 후에 Tools > Stop Recording Macro 를 선택하면 작업들이 임시 저장되고, 영구 저장하고 싶다면 Tools > Save Macro를 해서 파일로 저장하면 된다.

한가지 예제를 만들어보자.

예제

평소에 DTO나 VO 같은 객체를 생성할 때, 모든 필드에 private을 써주는 것은 참 번거로운 일이다. 그래서 문자열 앞에 private을 붙여주는 매크로를 하나 만들었다. 첨부된 매크로를 ‘서브라임/Data/Packages/User/‘ 밑에 저장한다.


privateModifier.sublime-macro


다음 서브라임 메뉴에서 Preferences > Key Bindings - User를 열고 아래 소스를 붙여넣어 준다.

[
    { "keys": ["ctrl+k", "ctrl+p"], "command": "run_macro_file", "args": {"file": "Packages/User/privateModifier.sublime-macro"} }
]

이제 준비 완료다. 이제 어디서든 ctrl+k, ctrl+p 를 누르면 모든 문자열 앞에 private 이 붙는다.

아래와 같은 코드가 있다고 가정해보자.

int memberNo;
String memberId;
String memberName;
int age;

ctrl+k, ctrl+p를 누른 결과는 다음과 같다.

private int memberNo;
private String memberId;
private String memberName;
private int age;

결론

공통으로 뺄 수 있는 작업들은 매크로로 빼고, 단축키로 사용하면 훨씬 작업 속도가 빨라질 것이다. 아쉽지만 replace 기능은 매크로로 저장되지 않는다. 그래도 최대한 있는 기능들을 활용해서 조금이나마 야근을 안하는데 도움이 됐으면 좋겠다.