인프런 커뮤니티 질문&답변

SeongBaek CHO님의 프로필 이미지

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

AOP 적용

AOP SpringConfig @Bean으로 등록시 에러

작성

·

767

0

밑의 질문에 참고했는데 저는 다른 에러가 떠서 질문에 남깁니다.

전 import hello.hellospring.aop.TimeTraceAop 까지는 잘되어 있는데

빌드 시에는 package hello.hellospring.aop does not exist로 에러가 떠서 구글에 찾으려해도 어떻게 접근을 해야할지 몰라 곤란하네요 ㅠㅠ

package hello.hellospring;

import hello.hellospring.aop.TimeTraceAop;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import javax.persistence.EntityManager;
import javax.sql.DataSource;

@Configuration
public class SpringConfig {

    DataSource dataSource;
    private EntityManager em;
    private final MemberRepository memberRepository;

    @Autowired
    public SpringConfig(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

    //    @Autowired
//    public SpringConfig(EntityManager em) {
//        this.em = em;
//    }

    //    @Autowired
//    public SpringConfig(DataSource dataSource) {
//        this.dataSource = dataSource;
//    }

    @Bean
    public MemberService memberService() {
        // return new MemberService(memberRepository());
        return new MemberService(memberRepository);
    }

//    @Bean
//    public MemberRepository memberRepository() {
//        // return new MemoryMemberRepository();
//        // return new JdbcMemberRepository(dataSource);
//        // return new JdbcTemplateMemberRepository(dataSource);
//        // return new JpaMemberRepository(em);
//    }

    @Bean
    public TimeTraceAop timeTraceAop() {
        return new TimeTraceAop();
    }
}

package hello.hellospring.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Component;

@Aspect
public class TimeTraceAop {

    @Around("execution(* hello.hellospring..*(..)) && !target(hello.hellospring.SpringConfig)")
    public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        System.out.println("Start : " + joinPoint.toString());
        try {
            return joinPoint.proceed();
        } finally {
            long finish = System.currentTimeMillis();
            long timeMs = finish - start;
            System.out.println("End : " + joinPoint.toString() + " " + timeMs + "ms");
        }
    }
}

답변 7

2

김영한님의 프로필 이미지
김영한
지식공유자

SeongBaek CHO님 폴더에 들어가서 확인해보니 파일 이름이 

TimeTraceAop.aj로 되어 있었습니다. TimeTraceAop.java로 변경하시면 될꺼에요^^

아마 IntelliJ에서 생성할 때 apetcj로 생성하신듯요.

변경하고 실행하니 잘 동작합니다^^

즐거운 주말 되세요

1

SeongBaek CHO님의 프로필 이미지
SeongBaek CHO
질문자

하... 결과를 알고나니 이렇게 허무할 수가... 너무 감사합니다!

0

김영한님의 프로필 이미지
김영한
지식공유자

우선 intellij에서 프로젝트를 새로 import해보시고 만약에 그래도 안되면 

전체 프로젝트를 압축해서 올려주세요.

0

SeongBaek CHO님의 프로필 이미지
SeongBaek CHO
질문자

와... 감동입니다 ㅠㅠ

0

SeongBaek CHO님의 프로필 이미지
SeongBaek CHO
질문자

plugins {
	id 'org.springframework.boot' version '2.3.3.RELEASE'
	id 'io.spring.dependency-management' version '1.0.10.RELEASE'
	id 'java'
}

group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.springframework.boot:spring-boot-starter-jdbc'
	implementation 'org.springframework.boot:spring-boot-starter-aop'
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	runtimeOnly 'com.h2database:h2'
	compileOnly("org.springframework.boot:spring-boot-devtools")
	testImplementation('org.springframework.boot:spring-boot-starter-test') {
		exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
	}
}

test {
	useJUnitPlatform()
}

0

김영한님의 프로필 이미지
김영한
지식공유자

bulid.gradle 전체를 보여주시겠어요?

0

SeongBaek CHO님의 프로필 이미지
SeongBaek CHO
질문자

참고 스샷입니다.