ApplicationContextAware


ApplicationContextAware를 사용할려면

setAC(AC ac){}를 오버라이딩해야한다

Application을 인자로 받아와야한다.

가지고와서 빈이나 컨텍스트 주소값이랑 메인메서드에서 주소값을 확인해보니 같다.

컨텍스트를 받아와 빈을 가져올수도있는데 가져와서 뭐하지?

빈에서 직접 접근해서 쓸때가 있나보다.

블로그에 설명글은 

bean에서 ApplicationContext에 직접 접근 시 사용

이라고 한다.

웹을 구현하다보면 언젠간 사용할때가 생기지않을까싶다.

그리고 init-Method보다 먼저 호출된다 

======================================================================

Annotation


이때까지 @Override만 사용해봤다

라벨정도라고 보면은 된다고 한다.

자바에서 제공하는

@Deprecated, @Override 등등있다고 한다.


1. @Deprecated는 직접 작성한 메소드나 클래스(필드까지는모르겠다.)

를 사용하지 않았으면 한다고 알려주는기능이라고한다.

저 어노테이션 얹고 호출하면 짝대기가 찍 올라와있다.

좋은기능인거 같다.


2.@Override

슈퍼클래스의 메서드를 수정해서 사용하는것이다.

이때까지는 그냥 별생각없이 사용했는데 설명을 보니 이 어노테이션을 사용하면

슈퍼클래스 내용이 수정되면 나에게 에러문구가 뜨니

수정해야할내용을 쉽게 알수있을거같다.


커스텀 어노테이션도 조금해봤는데 복잡하네요

이건 다음에 마저정리해서 올리겠습니다.


===================================================

Cumtom Annotation


어노테이션내용을 직접 작성해서 사용하는것 같습니다.

이건 조금하다가 밥먹으러가서 많이 못했습니다.

작성법은 


접근제한 @interface 어노테이션명 {

ex)

String value();//    value가 기본값이라고 합니다. 뒤에 default같은 옵션도 넣을수있습니다.

}


입니다.

코드를 짤때는 메타데이터 용도로만 짜봤습니다.

작성한 어노테이션 위에 @Target, @Retention 등 설정을 할수있습니다.

다른것도 더있는데 안해봤습니다.

@Target() = 인자로 ElementType타입을 넣을수있습니다.

FILED = 

ENUM = 

....

이것저것 컨스트럭터도 보이고 말그대로 단어를 넣으면 단어그대로 형식에 적용할수있습니다.

@Retention() = 인자로 RetentionPolicy타입을 넣을수있습니다.

선택내용은 SORUCE, CLASS, COMPILE 이며

SOURCE = 소스까지 유지(컴파일시 사라짐), 바이트코드로 컴파일전까지 일까요?

CLASS = 컴파일까지 유지, 컴파일후 CLASS파일까지는 남아있다고하네요. 바이트코드로 된파일을 말하는걸까요?

COMPILE = vm에 실행동안에도 유지


1.여튼 메인메서드에서 method라는 타입으로 어노테이션을 얹은 메서드,필드를 넣어줍니다.

ex)Method method = TheClass.class.getMethod("doThis”);


2.methodthod에 선언된 어노테이션을 가져옵니다.

ex)Annotation[] annotations = method.getDeclaredAnnotations();


3.위에 어노테이션배열에서 어노테이션을 뽑아왔습니다.

형변환을 할수있는지 확인해줍니다.

if (annotation instanceof 커스텀어노테이션명)


4.true면은 커스톰어노테이션으로 캐스팅해줍니다.

커스텀어노테이션 customAnno = (커스텀어노테이션) annotation;


5.커스텀어노테이션에 만든 메서드를 호출해줍니다. 위에서 어노테이션적용할때 설정한 값이 리턴됩니다.

customAnno.exam();


어렵네요 다~음에 쓸때가오면 다시 공부해보겠습니다