Spring/DI & AOP 16

학습 // Spring // DI // Test

업데이트 :: 2018.08.22 스프링 테스트DI 컨테이너와 빈의 테스트빈의 단위 테스트의존컴포넌트의 모의화DI 컨테이너에서의 빈의 통합테스트스프링 TestContext 프레임워크DI 컨테이너 설정DI 컨테이너의 라이프사이클 제어프로파일 지정테스트용 프로퍼티 값 지정스프링 테스트기능Junit, TestNG 라는 테스팅 프레임워크 사용해서 스프링의 DI 컨테이너 동작트랜젹션을 테스트 상황에 맞게 제어애플리케이션 서버를 사용치 않고 스프링 MVC 동작을 재현테스트 데이터를 적재하기 위해 SQL을 실행RestTemplate을 이용해서 HTTP 요청에 대한 임의의 응답을 보내는 기능DI 컨테이너와 빈의 테스트다음과 같은 애너테이션을 테스트 하는 모듈@Controller@Service@Repository@Com..

Spring/DI & AOP 2018.08.22

학습 // Spring // AOP // 표현식(SpEL)

업데이트 :: 2018.08.08 표현언어표현언어 설정API 개요빈정의시 SpEL 활용표현식 유형표현언어스프링 프레임워크가 제공하는 표현언어어디에쓰나 ? 왜쓰나 ?모든 제품에 걸쳐서 사용할 수 있는 하나의 표현언어를 스프링 커뮤니티에 제공하기 위해서 만들어짐표현언어 설정spring-expression 의존성모듈 추가pom.xml org.springframework spring-expression API 개요ExpressionParser문자열 형태인 표현식을 분석Expression 객체를 생성하기 위한 메서드 제공Expression분석된 표현식의 내용을 실행하기 위한 메서드 제공SpEL이용 간단 수식풀기ExpressionParser parser = new SpelExpressionParser(); // S..

Spring/DI & AOP 2018.08.14

학습 // Spring // AOP // Message

업데이트 :: 2018.08.09 메세지관리MessageSourceMessageSourceResolvableMessageSource 사용MessageSource APIMessageSourceResolvable 활용프로퍼티파일을 UTF-8로 인코딩다국어 지원메세지관리문자열형태의 메시지프로퍼티파일과 같은 곳에 따로 관리해서 소스코드에서 분리다국어 지원하는 국제화기능MessageSourceMessageSource는 메시지 정보의 출처를 추상화하기 위한 것어딘가에 있을 메시지 정보를 가져오기 위해 getMessage() 제공public interface MessageSource { String getMessage( String code, Object[] args, Locale locale) throws NoSu..

Spring/DI & AOP 2018.08.14

학습 // Spring // AOP // Resource

업데이트 :: 2018.08.08 Resource 인터페이스 & 구현클래스ResourceLoaderResource 접근XML에서 리소스 지정Resource 인터페이스 & 구현클래스구체적인 위치정보를 직접다루지 않아도 리소스에 접근할 수 있음Resource 인터페이스WritableResource 인터페이스InputStreamSourcepublic interface InputStreamSource { InputStream getInputStream() throws IOException; } Resource extends InputStreamSourcepublic interface Resource extends InputStreamSource { boolean exists(); boolean isReadabl..

Spring/DI & AOP 2018.08.14

학습 // Spring // AOP // 프로퍼티(Property)

업데이트 :: 2018.08.08 프로퍼티빈정의시 프로퍼티빈구현시 프로퍼티프로퍼티각종 설정값이 소스코드 안에 기재된 예제@Bean(destroyMethod="close") DataSource dataSource() { BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName("org.postgresql.Driver"); dataSource.setUrl("jdbc:postgresql://localhost:5432/demo"); dataSource.setUsername("demo"); dataSource.setPassword("pass"); dataSource.setDefaultAutoCommit(false); retu..

Spring/DI & AOP 2018.08.08

학습 // Spring // AOP // 데이터바인딩(DataBinding) & 형변환(Casting)

업데이트 :: 2018.08.08 데이터바인딩과 형변환String 데이터바인딩스프링의 형변환빈을 조작하거나 래핑형변환필드값의 표현형식 포매팅ConversionService포매팅용 애너테이션커스터마이징형변환방식필드포매팅방식데이터바인딩과 형변환데이터바인딩 (DataBinding)자바 객체의 프로퍼티에서 외부에서 입력된 값을 설정하는 과정자바빈즈 (JavaBeans)데이터바인딩이나 프로퍼티관점에서 다뤄지는 객체요청 파라미터 값을 담기 위한 자바빈즈public class EmployeeForm { private String name; private Integer joinedYear; // skip } 설정자 메서드(setter)를 통한 프로퍼티 설정EmployeeForm form = new EmployeeFor..

Spring/DI & AOP 2018.08.08

학습 // Spring // AOP // Advice

업데이트 :: 2018.08.07 Advice 정의 (자바기반)BeforeAfter ReturningAfter ThrowingAfterAroundAdvice 정의 (Xml기반)포인트컷 표현식메서드명으로 조인포인트 선택타입으로 조인포인트 선택그외 방법네임드 포인트컷 활용Advice 대상객체와 인수정보 가져오기Advice 정의 (자바기반)Before@Aspect @Component public class MethodStartLoggingAspect { @Before("execution(* *..*ServiceImpl.*(..))") public void startLog(JoinPoint jp) { System.out.println("메서드시작 : " + jp.getSignature()); } } 메소드 시작..

Spring/DI & AOP 2018.08.08

학습 // Spring // AOP (Aspect Oriented Programming)

업데이트 :: 2018.08.07 AOP 개념황단관심사개념종류AOP 용어Advice 유형Weaving 방식Spring AOP 개념스프링 AOP 기능트랜잭션관리인가캐싱비동기처리재처리AOP 개념AOP (Aspect Oriented Programming ) 이란 여러 클래스에 흩어져 있는황단관심사를 중심으로 설계와 구현을 하는 프로그래밍 기법즉, 비즈니스 로직을 제외한 다른 부분은 공통적으로 관리해주기 때문에개발자는 비즈니스 로직에 집중할 수 있게됩니다.황단관심사개념황단관심사크로스커팅 관심사(cross-cutting concerns)비즈니스 로직과는 다소 거리가 있으나 여러 모듈에 걸쳐 공통적 반복적으로 필요로 하는 것횡단 관심사의 분리프로그램안에 횡단 관심사에 해당부분을 분리해서 한 곳으로 모으는 것종류보안..

Spring/DI & AOP 2018.08.07

학습 // Spring // DI // 프로파일(Profile)

업데이트 :: 2018.08.07 프로파일 (profile)클래스레벨메서드레벨프로파일 선택프로파일 (profile)설정 파일을 특정 환경이나 목적에 맞게 선택적으로 사용할 수 있도록 그룹화클래스레벨자바기반 (@Profile 사용)@Configuration @Profile("dev") public class DevConfig { } @Configuration @Profile("test") public class TestConfig { } @Configuration @Profile("prod") public class ProductionConfig { } XML 기반 (profile="") 애너테이션 기반@Component @Profile("dev") public class DummyUserRepositor..

Spring/DI & AOP 2018.08.07

학습 // Spring // DI // Bean 설정분할 (import)

업데이트 :: 2018.08.07 빈 설정분할자바기반 설정분할Xml기반 설정분할빈 설정분할DI 컨테이너에서 관리하는 빈이 많아질수록 관리가 어려움빈 설정범위를 명확히 하고 가독성을 높이기 위해 목적에 맞게 분할하는 것이 좋음자바기반 설정분할@Import를 사용해서 분할된 설정을 병합@Configuration @Import({DomainConfig.class, InfrastructureConfig.class}) public class AppConfig { // DomainConfig.class와 InfrastructureConfig.class에 정의한 빈을 주입할 수 있음 } 분할된 클래스 (1)@Configuration public class DomainConfig { @Bean UserService u..

Spring/DI & AOP 2018.08.07