728x90
반응형

어떤 @Service 어노테이션을 쓰는 비지니스 로직이 있는 객체에서 

나의 경우에는 Map을 초기화 해놓고 싶었다. 


그러니까 소스로 예를 들면,


@Service

public class test {

   public Map<String, Object> map;  // 이거 초기화 세팅을 어디서...?


    public void foo() {

        map.get("key");

    }

}


저 map을 초기화 해놓고 foo() 메소드에서 쓰고싶은데

어떻게 하면 좋을까?




예전에는 bean 설정에서 init-method 설정을 통해 초기화해주는 메소드에서 구현하면 되었다.

아래와 같이 initData 메소드에서 세팅하면 된다.


<bean name="testService" class="com.test.TestService" init-method="initData" />




근데 어노테이션으로 간단히 하려면.

아래와 같이 사용하면 된다.


@Service

public class test {

   public Map<String, Object> map; 

    

    @Autowired private AaaObject aaaObj;


    @PostConstruct

    public void init() {

        map = new HashMap<String, Object>();

        map.put("aaa", aaaObj);

    }


    public void foo() {

        map.get("key");

    }

}



@PostConstruct 어노테이션을 설정해놓은 init 메소드는 WAS가 띄워질 때 실행된다. 



저 위에 예제에서 보면, AAAObject는 오토와이어링이 되어있는데,

과연 map에 들어있는 객체는 스프링에서 객체 생성을 해주었을까? 


PostConstruct의 메소드를 실행하기전에 오토와이어링으로 인해서 객체가 잘 생성 되었는가?

아니면 오토와이어링이 되기 전에 PostConstruct가 실행되었는가.. 



정답은 '잘 생성이 되어있다.'

autowired가 먼저 된 후 init 메소드가 실행된다~



출처: http://marobiana.tistory.com/105 [Take Action]

728x90
반응형

'Web Programming > java-jsp' 카테고리의 다른 글

java 예외 try catch finally  (0) 2018.08.29
JAVA Method 클래스  (0) 2018.08.29
[자바][Java] DecimalFormat 클래스  (0) 2018.08.28
JSONP를 이용하여 Cross Domain 해결  (0) 2015.12.29
도움이 되는 사이트들  (0) 2015.10.21
728x90
반응형

DecimalFormat이란... 10진수의 값을

원하는 포멧으로 변형해 주는 클래스를 말합니다.
DecimalFormat 클래스는 객체를 생성할 때 new 연산자를 사용합니다.
format 메소드를 사용해서 특정 패턴으로 값을 포맷할 수 있습니다.

 



패턴 형식은 '0'과 '#'을 사용 해서 지정합니다.
예를들면, '00.###', '0.#', '000.##'등으로 패턴을 지정할 수 있습니다.
'0' 은 표시한 자리수만큼의 값을 최소한으로 표시해야한다는 것이며,

#은 표시한 소수점자리수만큼 반올림하여 표시해야한다는 것입니다.

 



예를들어 12.3456789의 경우에 아래와 같습니다.
'00.###' = 12.346
'0.#' = 12.3 
'000.##' : 012.35

 

해당 패턴을 지정하여 DecimalFormat을 사용하는 방법은 아래와 같습니다.
DecimalFormat fmt=new DecimalFormat("00.###");
String decimal= fmt.format(12.3456789);
위와 같이 사용하면 decimal에는 12.346이 반환되죠.

 



DecimalFormat의 패턴을 변경하려 할 때는

void applyPattern(String pattern)를 사용합니다.
fmt.applyPattern("000.###")으로 변경하면

이후에는 변경된 Pattern이 포맷으로 적용됩니다.

 

다음 예제를 보면


 

 

실행결과

 


Decimal 패턴의 형식은 "0"과 "#" 외에도 여러 종류가 더 있습니다.
더 자세한 내용은 Java API DOC을 참고 하세요.

728x90
반응형
728x90
반응형

Javascript의 보안 정책 중 하나인 SOP(Same-Origin Policy) 때문에 데이터를 호출하는 도메인과 데이터를 반환하는 도메인의 주소가 다르면 

ajax를 이용할 수 없다. 그러나 JSONP(JSON with Padding)를 이용하면 간단히 해결 가능하다.


원래 ajax의 코드는 아래와 같다. 그러나 아래 코드로는 Cross Domain에 직면했을때 정상적인 responseText를 얻을 수가 없다.

1
2
3
4
5
6
7
8
9
10
11
12
13
$.ajax({
  type: "POST",
  url: "search.do",
  data: $('#searchbox').val(),
  contentType: "application/x-www-form-urlencoded; charset=UTF-8",
  success: function(data) {
    if (data != null) {
      // ...
    } else {
      //....
    }
  }
});


1. JSONP를 이용한 Ajax 호출(Client)

 - 반환되는 데이터 (JSON)가 아래와 같다고 하자.

1
2
3
4
{
  'result': 'user',
  'go': '테스트'
}


 - JSONP를 통한 호출은 아래와 같다. (두 가지 방법 중 아무거나 해도 상관없다.)

 1. $.getJSON()

1
2
3
$.getJSON("http://ip:8080/jsp/upload?id=user&callback=?", function(data) {
  alert(data.result + ", " + data.go);
});
 
 2. $.ajax();

1
2
3
4
5
6
7
8
9
$.ajax({
  dataType: "jsonp",
  success: function(data) {
    if (data != null) {
      alert(data.result + ", " + data.go);
    }
  }
});
 
jQuery 1.2부터는 JSONP 호출에 대한 네이티브 지원이 제공되고 있다. JSONP 콜백을 지정한 경우 다른 도메인에 있는 JSON 데이터를 로드할 수 
있으며 JSON 콜백은 url?callback=? 라는 구문을 사용하여 지정할 수 있다.

 $.getJSON() 메소드를 자세히 살펴보면 URL 맨 끝에 callback= 이라는 문자열과 함께 ? 기호를 사용하고 있다. ? 문자열 자리에는 ajax 콜백 

 함수명이 들어가야 하는데, 만약 위의 샘플 코드와 같이 익명 함수를 콜백 함수로 지정한다면 ?기호를 쓰면 되고, 그렇지 않은 경우엔 실제 콜백

 함수명을 적어주면 된다. 익명 콜백함수 사용시, ? 기호는 jquery가 ajax 호출시 익명 함수의 이름(예:jsonp1234567890)을 넘겨주게 된다.


2. JSON 반환(Server)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
  request.setCharacterEncoding("UTF-8");
  response.setCharacterEncoding("UTF-8");
 
  // 전송된 데이터를 추출(id와 콜백 메소드명)
  String id = request.getParameter("id");
  String callBack = request.getParameter("callback");
 
  // 반환 될 데이터
  JSONObject obj = new JSONObject();
  obj.put("result", id);
  obj.put("go", "테스트");
 
  // 호출 할 javascript 콜백 메소드를 지정 해 준다.
  PrintWriter out = response.getWriter();
  out.write(callBack + "(" + obj.toString() + ")");
  System.out.println(callBack + "(" + obj.toString() + ")");
 
  out.flush();
  out.close();
}

Serlvet으로 구현한 데이터 반환 메소드이다. JSONP는 Get방식으로만 데이터를 가져올 수 있으므로 doGet메소드에 로직을 작성하였다. 
위 코드를 살펴보면 먼저 전달받은 데이터들을 json 형태로 구성한 뒤 콜백함수의 이름으로 감싸줘야 한다. 

최종적으로 반환해야 할 문자열은 아래와 같다. 말 그대로 JSONP(json with padding)이다.

1
jQuery17204359748272690922_1338291446125({"result":"user","go":"테스트"})


3. 결과

-- 퍼옴 --


728x90
반응형
728x90
반응형

생활코딩 페이스북 그룹 커뮤니티 정책 RFC

http://goo.gl/71Zt8f

생활코딩 페이스북 그룹에서 편안하게 활동하는데 도움이 될만한 방법을 알려드리기 위한 안내서입니다. 




개발에 도움이 되는 웹서비스와 도구들  

http://goo.gl/RsbzYX

프로그래밍을 위해서는 많은 도구가 필요하지 않습니다. 그것이 프로그래밍의 매력인 것 같습니다. 동시에 프로그래밍을 잘하기 위해서는 또한 도구가 필요합니다. 프로그래머들은 스스로가 도구를 만드는 직업인들이기 때문에 자기 자신이 사용하기 위한 위대한 도구들이 많이 있습니다. 또 그 위대한 도구들을 사용할 의지가 충만한 최고급의 유저층이 있습니다. 그래서 IT 기술의 수 많은 혁신이 개발자들의 도구로부터 출발하는 것이겠지요. 본 페이지는 이러한 도구들을 소개하고 있습니다. 




+ 개발자 커뮤니티

http://goo.gl/J9lqYc

생각해보면 개발자들은 커뮤니티 지향 프로그래밍을 하고 있는 것일지도 모르겠습니다. 궁금한 것이 있으면 질문하고, 다른 사람의 궁금증을 풀어주면서 문제를 해결하는 것이 개발자들의 일상이라고 할 수 있을 것 같습니다. 페이스북이나 페이스북 밖에는 수 많은 개발자 커뮤니티가 있습니다. 본 페이지는 이런 커뮤니티들을 소개하고 있습니다.  




생활코딩 밖에서 프로그래밍 배우기

http://goo.gl/NjwRtA

생활코딩은 http://opentutorials.org/course/1 이라는 온라인 강의를 기반으로 시작된 활동입니다. 좋은 커리큘럼을 만들기 위해서 노력하고 있습니다만, 생활코딩만으로는 충분하지 않을 것입니다. 생활코딩 밖에는 휼룡한 커리큐럼들이 많이 있습니다. 본 페이지는 이런 커리큘럼들에 대해서 소개하고 있습니다. 



라이브러리 & 프레임 워크  

http://goo.gl/stHJYL

개발자들이 이용하는 다양한 라이브러리와 프래임웍크를 소개하는 페이지입니다. 



그룹 내의 설문 조사들 

http://goo.gl/Aj1fay

페이스북의 그룹에는 구성원들의 생각을 취합할 수 있는 매우 좋은 도구가 있습니다. '페이스북 질문'이 바로 그것인데요. 이 질문을 통해서 구성원들의 성향이나 취향의 분포를 알아보는 것도 재미 & 유익 할 것 같습니다. 본 페이지는 그런 질문들을 모아봤습니다. 



개발자 유머

http://goo.gl/30aMCR



프로그래밍 시작의 진입점 

http://goo.gl/ktdlne

생활코딩에는 프로그래밍에 입문하는 분들이 많이 있습니다. 이 분들에게 도움이 되는 대화들이 많이 오고가고 있는데요. 놓치기 어려운 대화들을 본 페이지에서 정리하고 있습니다. 


직업탐험

프로그래밍 언어를 사용하는 다양한 직업과 분야가 있습니다. 이러한 분야를 이해하는데 도움이 될 수 있는 대화를 모아둔 문서입니다. 

https://www.facebook.com/notes/%EC%83%9D%ED%99%9C%EC%BD%94%EB%94%A9/%EC%A7%81%EC%97%85-%ED%83%90%ED%97%98/834695219904349


프로그래밍 관련 유용한 문서들

http://goo.gl/LvjGxt


프로그래밍과 관련된 무상/할인 정책들

https://goo.gl/xwLsWO



생활코딩 페이스북 그룹 상단 게시물 리스트

그룹내에서 게시 되었던 공지사항들의 내역을 정리하는 문서입니다.

http://goo.gl/vfcJKQ

728x90
반응형
728x90
반응형

compile : 컴파일 할때 필요. 테스트 및 런타임에도 클래스 패스에 포함 된다. scorp 을 설정 하지 않는 경우 기본값이다.
runtime : 런타임에 필요. JDBC 드라이버 등이 예가 된다. 컴파일 시에는 필요하지 않지만, 실행 시에 필요한 경우.
provided : 컴파일 시에 필요하지만, 실제 런타임 때에는 컨테이너 같은 것에서 제공되는 모듈. servlet, jsp api 등이 이에 해당. 배포시 제외된다.
test : 테스트 코드를 컴파일 할때 필요. 테스트시 클래스 패스에 포함되며, 배포시 제외된다.

예시)
 <dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>servlet-api</artifactId>
   <version>2.5</version>
   <scope>provided</scope>
  </dependency>

  <dependency>
   <groupId>javax.servlet.jsp</groupId>
   <artifactId>jsp-api</artifactId>
   <version>2.1</version>
   <scope>provided</scope>
  </dependency>

728x90
반응형

+ Recent posts