From ea4939df1c013fae3f11abd7e1c5df5e6fbe92d0 Mon Sep 17 00:00:00 2001 From: mjkhan21 Date: Mon, 27 May 2024 09:20:22 +0900 Subject: [PATCH] AbstractComponent -> AbstractComponent, AbstractBean --- .../xit/foundation/AbstractComponent.java | 88 +-------------- .../foundation/component/AbstractBean.java | 102 +++++++++++++++++- .../component/ManagedComponent.java | 68 ------------ .../foundation/data/paging/MybatisPlugin.java | 4 +- .../foundation/web/AbstractController.java | 4 +- 5 files changed, 109 insertions(+), 157 deletions(-) delete mode 100644 src/main/java/cokr/xit/foundation/component/ManagedComponent.java diff --git a/src/main/java/cokr/xit/foundation/AbstractComponent.java b/src/main/java/cokr/xit/foundation/AbstractComponent.java index 2d04fd9..46dc635 100644 --- a/src/main/java/cokr/xit/foundation/AbstractComponent.java +++ b/src/main/java/cokr/xit/foundation/AbstractComponent.java @@ -1,68 +1,18 @@ package cokr.xit.foundation; -import java.util.Date; import java.util.function.Supplier; -import javax.annotation.Resource; - -import org.egovframe.rte.fdl.property.EgovPropertyService; -import org.springframework.context.MessageSource; - import cokr.xit.foundation.data.Convert; -/**업무 컴포넌트나 기능 구현 컴포넌트를 정의할 때 상속받는 클래스. +/**기능 구현 컴포넌트를 정의할 때 상속받는 클래스. *

AbstractComponent를 상속받는 클래스는 *

* 등의 기능을 사용할 수 있다. - *

AbstractComponent의 상속 클래스는 '업무 용어 또는 기능 이름' + 'Bean'과 같이 이름을 명시한다.
- * 그리고 정의한 클래스를 애플리케이션 컨텍스트에 등록하려면, @Component 어노테이션을 적용하고 카멜 표기법으로 이름을 지정한다.
- * 다음은 그 예이다. - *

 package cokr.xit.example.business.service.bean;
- * {@code @Component("businessBean")}
- * public class BusinessBean extends AbstractComponent {
- *     ...
- * }
- *

정의한 컴포넌트를 사용하려면 @Resource 어노테이션에 이름을 명시해 객체에 주입한다. - *

 @Resource(name = "businessBean")
- * BusinessBean businessBean;
+ * @author mjkhan */ public class AbstractComponent { - /** 프로퍼티 서비스 */ - @Resource(name="propertyService") - protected EgovPropertyService properties; - /** 메시지 소스 */ - @Resource(name="messageSource") - protected MessageSource messages; - private String logName; - - /**로그이름을 설정한다. - * @param logName 로그이름 - */ - public void setLogName(String logName) { - this.logName = logName; - } - - /**현재 접근한 사용자를 반환한다. - * @param 사용자 정보 유형 - * @return 현재 접근한 사용자 - */ - protected T currentUser() { - return UserInfo.current(); - } - - /**현재 사용자의 접근정보를 반환한다. - * @return 현재 사용자의 접근정보 - */ - protected static Access currentAccess() { - return Access.current(); - } - /**lv와 rv가 같은 지 반환한다. * @param lv 좌측 값 * @param rv 우측 값 @@ -149,27 +99,6 @@ public class AbstractComponent { return Convert.toBoolean(obj); } - /**메시지 리소스 파일에서 key로 정의된 문자열과 args로 메시지를 만들어 반환한다. - * @param key 메시지 리소스 파일의 문자열 key - * @param args 해당 문자열에 전달할 인자 - * @return 메시지 - */ - protected String message(String key, String... args) { - return messages.getMessage(key, ifEmpty(args, () -> null), "", currentAccess().getLocale()); - } - - /**t가 공백이 아닌지 확인하고 t를 반환한다. - * t가 공백이면, NullPointerException을 발생시키며, 메시지는 message-common 프로퍼티 파일의 'valueRequired'키에 설정된 값으로 만든다. - * @param 객체 유형 - * @param t 값이나 객체 - * @param name assertion 실패 시 오류 메시지에 사용할 이름 - * @return t - */ - protected final T required(T t, String name) { - if (!isEmpty(t)) return t; - throw new NullPointerException(message("valueRequired", name)); - } - /**{@link Assert#rootCause(Throwable)} 참고 */ protected static final Throwable rootCause(Throwable t) { @@ -200,16 +129,7 @@ public class AbstractComponent { * @return Log */ protected Log log() { - return isEmpty(logName) ? log(getClass()) : Log.get(logName); - } - - /**주어진 Date에 지정한 날짜수만큼의 차이의 Date를 반환한다. - * @param date 날짜 - * @param days 날짜수 - * @return 새 Date - */ - protected static Date dateDiff(Date date, int days) { - return new Date(date.getTime() + (1000L * 60L * 60L * 24L * days)); + return log(getClass()); } /**현재 객체를 반환한다. diff --git a/src/main/java/cokr/xit/foundation/component/AbstractBean.java b/src/main/java/cokr/xit/foundation/component/AbstractBean.java index 3052185..7244100 100644 --- a/src/main/java/cokr/xit/foundation/component/AbstractBean.java +++ b/src/main/java/cokr/xit/foundation/component/AbstractBean.java @@ -1,3 +1,103 @@ package cokr.xit.foundation.component; -public abstract class AbstractBean extends ManagedComponent {} \ No newline at end of file +import java.util.Date; + +import javax.annotation.Resource; + +import org.egovframe.rte.fdl.property.EgovPropertyService; +import org.springframework.context.MessageSource; + +import cokr.xit.foundation.AbstractComponent; +import cokr.xit.foundation.Access; +import cokr.xit.foundation.Log; +import cokr.xit.foundation.UserInfo; +import cokr.xit.foundation.util.DateFormats; + +/**spring framework가 관리하는 컴포넌트를 정의할 때 상속받는 클래스. + *

AbstractBean를 상속받는 클래스는 + *

  • {@link #currentAccess() 현재 접속 정보}
  • + *
  • {@link #currentUser() 현재 접속한 사용자 정보}
  • + *
  • {@link #properties 프로퍼티 서비스}
  • + *
  • {@link #message(String, String...) 메시지 처리}
  • + *
+ * 등의 기능을 사용할 수 있다. + *

AbstractBean의 상속 클래스는 '업무 용어 또는 기능 이름' + 'Bean'과 같이 이름을 명시한다.
+ * 그리고 정의한 클래스를 애플리케이션 컨텍스트에 등록하려면, @Component 어노테이션을 적용하고 카멜 표기법으로 이름을 지정한다.
+ * 다음은 그 예이다. + *

 package cokr.xit.example.business.service.bean;
+ * {@code @Component("businessBean")}
+ * public class BusinessBean extends AbstractBean {
+ *     ...
+ * }
+ *

정의한 컴포넌트를 사용하려면 @Resource 어노테이션에 이름을 명시해 객체에 주입한다. + *

 @Resource(name = "businessBean")
+ * BusinessBean businessBean;
+ */ +public abstract class AbstractBean extends AbstractComponent { + /** 프로퍼티 서비스 */ + @Resource(name="propertyService") + protected EgovPropertyService properties; + /** 메시지 소스 */ + @Resource(name="messageSource") + protected MessageSource messages; + /** 날짜 포맷 모음 */ + protected DateFormats dateFormats = new DateFormats(); + private String logName; + + /**로그이름을 설정한다. + * @param logName 로그이름 + */ + public void setLogName(String logName) { + this.logName = logName; + } + + /**현재 접근한 사용자를 반환한다. + * @param 사용자 정보 유형 + * @return 현재 접근한 사용자 + */ + protected T currentUser() { + return UserInfo.current(); + } + + /**현재 사용자의 접근정보를 반환한다. + * @return 현재 사용자의 접근정보 + */ + protected static Access currentAccess() { + return Access.current(); + } + + /**메시지 리소스 파일에서 key로 정의된 문자열과 args로 메시지를 만들어 반환한다. + * @param key 메시지 리소스 파일의 문자열 key + * @param args 해당 문자열에 전달할 인자 + * @return 메시지 + */ + protected String message(String key, String... args) { + return messages.getMessage(key, ifEmpty(args, () -> null), "", currentAccess().getLocale()); + } + + /**t가 공백이 아닌지 확인하고 t를 반환한다. + * t가 공백이면, NullPointerException을 발생시키며, 메시지는 message-common 프로퍼티 파일의 'valueRequired'키에 설정된 값으로 만든다. + * @param 객체 유형 + * @param t 값이나 객체 + * @param name assertion 실패 시 오류 메시지에 사용할 이름 + * @return t + */ + protected final T required(T t, String name) { + if (!isEmpty(t)) return t; + throw new NullPointerException(message("valueRequired", name)); + } + + @Override + protected Log log() { + return isEmpty(logName) ? super.log() : Log.get(logName); + } + + /**주어진 Date에 지정한 날짜수만큼의 차이의 Date를 반환한다. + * @param date 날짜 + * @param days 날짜수 + * @return 새 Date + */ + protected static Date dateDiff(Date date, int days) { + return new Date(date.getTime() + (1000L * 60L * 60L * 24L * days)); + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/foundation/component/ManagedComponent.java b/src/main/java/cokr/xit/foundation/component/ManagedComponent.java deleted file mode 100644 index 852955f..0000000 --- a/src/main/java/cokr/xit/foundation/component/ManagedComponent.java +++ /dev/null @@ -1,68 +0,0 @@ -package cokr.xit.foundation.component; - -import javax.annotation.Resource; - -import org.egovframe.rte.fdl.property.EgovPropertyService; -import org.springframework.context.MessageSource; - -import cokr.xit.foundation.AbstractComponent; -import cokr.xit.foundation.Access; -import cokr.xit.foundation.UserInfo; -import cokr.xit.foundation.util.DateFormats; - -/**spring framework가 관리하는 컴포넌트를 정의할 때 상속받는 클래스. - *

ManagedComponent를 상속받는 클래스는 - *

  • {@link #currentAccess() 현재 접속 정보}
  • - *
  • {@link #currentUser() 현재 접속한 사용자 정보}
  • - *
  • {@link #properties 프로퍼티 서비스}
  • - *
  • {@link #message(String, String...) 메시지 처리}
  • - *
- * 등의 기능을 사용할 수 있다. - *

ManagedComponent의 상속 클래스는 '업무 용어 또는 기능 이름' + 'Bean'과 같이 이름을 명시한다.
- * 그리고 정의한 클래스를 애플리케이션 컨텍스트에 등록하려면, @Component 어노테이션을 적용하고 카멜 표기법으로 이름을 지정한다.
- * 다음은 그 예이다. - *

 package cokr.xit.example.business.service.bean;
- * {@code @Component("businessBean")}
- * public class BusinessBean extends ManagedComponent {
- *     ...
- * }
- *

정의한 컴포넌트를 사용하려면 @Resource 어노테이션에 이름을 명시해 객체에 주입한다. - *

 @Resource(name = "businessBean")
- * BusinessBean businessBean;
- */ -public class ManagedComponent extends AbstractComponent { - /** 프로퍼티 서비스 */ - @Resource(name="propertyService") - protected EgovPropertyService properties; - /** 메시지 소스 */ - @Resource(name="messageSource") - protected MessageSource messages; - /** 날짜 포맷 모음 */ - protected DateFormats dateFormats = new DateFormats(); - - /**현재 접근한 사용자를 반환한다. - * @param 사용자 정보 유형 - * @return 현재 접근한 사용자 - */ - @Override - protected T currentUser() { - return UserInfo.current(); - } - - /**현재 사용자의 접근정보를 반환한다. - * @return 현재 사용자의 접근정보 - */ - protected static Access currentAccess() { - return Access.current(); - } - - /**메시지 리소스 파일에서 key로 정의된 문자열과 args로 메시지를 만들어 반환한다. - * @param key 메시지 리소스 파일의 문자열 key - * @param args 해당 문자열에 전달할 인자 - * @return 메시지 - */ - @Override - protected String message(String key, String... args) { - return messages.getMessage(key, ifEmpty(args, () -> null), "", currentAccess().getLocale()); - } -} \ No newline at end of file diff --git a/src/main/java/cokr/xit/foundation/data/paging/MybatisPlugin.java b/src/main/java/cokr/xit/foundation/data/paging/MybatisPlugin.java index 010744f..30f45fc 100644 --- a/src/main/java/cokr/xit/foundation/data/paging/MybatisPlugin.java +++ b/src/main/java/cokr/xit/foundation/data/paging/MybatisPlugin.java @@ -21,7 +21,7 @@ import org.apache.ibatis.plugin.Signature; import org.apache.ibatis.session.ResultHandler; import org.apache.ibatis.session.RowBounds; -import cokr.xit.foundation.AbstractComponent; +import cokr.xit.foundation.component.AbstractBean; /**조회 결과의 페이징 처리를 지원하는 MyBatis Interceptor * @author mjkhan @@ -40,7 +40,7 @@ import cokr.xit.foundation.AbstractComponent; @Signature(type = ResultSetHandler.class, method = "handleResultSets", args = {Statement.class}) }) -public class MybatisPlugin extends AbstractComponent implements Interceptor { +public class MybatisPlugin extends AbstractBean implements Interceptor { protected Properties properties; @Override diff --git a/src/main/java/cokr/xit/foundation/web/AbstractController.java b/src/main/java/cokr/xit/foundation/web/AbstractController.java index ec025d1..731e265 100644 --- a/src/main/java/cokr/xit/foundation/web/AbstractController.java +++ b/src/main/java/cokr/xit/foundation/web/AbstractController.java @@ -13,10 +13,10 @@ import org.springframework.web.servlet.ModelAndView; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import cokr.xit.foundation.AbstractComponent; import cokr.xit.foundation.Access; import cokr.xit.foundation.Assert; import cokr.xit.foundation.Downloadable; +import cokr.xit.foundation.component.AbstractBean; import cokr.xit.foundation.component.QueryRequest; import cokr.xit.foundation.data.paging.BoundedList; @@ -42,7 +42,7 @@ import cokr.xit.foundation.data.paging.BoundedList; * 을 명시한다. * @author mjkhan */ -public abstract class AbstractController extends AbstractComponent { +public abstract class AbstractController extends AbstractBean { @Resource(name="objectMapper") private ObjectMapper objectMapper;