KOTRA 강의를 기반으로 작성된 문서입니다.
value.properties
db.driverClass=org.mariadb.jdbc.Driver
db.url=jdbc:mariadb://127.0.0.1:3306/spring_db?useUnicode=true&charaterEncoding=utf-8&useSSL=false&serverTimezone=UTC
db.username=(아이디)
db.password=(비밀번호)
spring_beans.xml
<!-- values.properties \uD30C\uC77C \uC704\uCE58 \uC124\uC815 -->
<context:property-placeholder location="classpath:values.properties"/>
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"
p:driverClassName="${db.driverClass}"
p:jdbcUrl="${db.url}"
p:username="${db.username}"
p:password="${db.password}"
/>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.3</version>
</dependency>
UserMapper.xml
<select id="selectUserById" parameterType="string" resultType="User">
select * from users where userid=#{value}
</select>
UserMapper.java
public interface UserMapper {
UserVO selectUserById(String id);
}
cf) 포인트컷: 어드바이스를 적용할 타겟의 메서드를 선별하는 정규표현식이다.
<!-- AOP 설정 시작 -->
<aop:config>
<aop:aspect id="traceAspect" ref="performanceTraceAdvice">
<aop:around pointcut="execution(public * myspring.user..*(..))"
method="trace" />
</aop:aspect>
</aop:config>
<!-- Advice 클래스를 Bean으로 등록 -->
<bean id="performanceTraceAdvice" class="myspring.aop.xml.PerformanceTraceAdvice" />
<!-- AOP 설정 끝-->
public class PerformanceTraceAdvice {
public Object trace(ProceedingJoinPoint joinPoint) throws Throwable {
String targetName = joinPoint.getTarget().getClass().getName();
System.out.println(targetName + "객체 시작");
//타겟 메서드의 signature 정보
String signatureString = joinPoint.getSignature().toShortString();
System.out.println(signatureString + " 시작");
//타겟 메서드의 아규먼트 정보
for(Object arg: joinPoint.getArgs()) {
System.out.println(signatureString + " 메서드의 아규먼트 값 " + arg);
}
//타겟의 메서드가 호출되기 전의 시간
long start = System.currentTimeMillis();
try {
//new Object[] {new String("dooly")}
//타겟의 메서드 호출
Object result = joinPoint.proceed();
return result;
} finally {
//타겟의 메서드가 호출된 후의 시간
long finish = System.currentTimeMillis();
System.out.println(signatureString + " 메서드 종료");
System.out.println(signatureString + " 메서드의 실행 시간 : " +
(finish - start) + " ms");
}
}
}
참고자료
1) 람다식 공부 소스링크
2) 스프링 in action 공식 문서
2-1) 스프링 in action 소스링크