공부 흔적남기기

Spring 익명 객체 함수에 @Transactional을 사용하면 어떻게 될까? 본문

web study/Spring

Spring 익명 객체 함수에 @Transactional을 사용하면 어떻게 될까?

65살까지 코딩 2024. 10. 28. 22:30
728x90
반응형

다음과 같이 구성되어있다고 가정하자

익명객체를 만들고 익명객체의 함수에는 @Transactional이 붙어있으며 해당 함수는 Transcation이 필요한 함수를 호출한다.

@FunctionalInterface
interface TempHandleInterface {

    fun handle(something: String): String
}

 

import jakarta.annotation.PostConstruct
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
import java.util.UUID

@Service
class TempClass(
    private val tempService: TempService,
) {

    private val tempHandlers: MutableMap<String, TempHandleInterface> = mutableMapOf();

    @PostConstruct
    fun init(){
        tempHandlers["secretHandler"] = object : TempHandleInterface{
            @Transactional
            override fun handle(something: String): String {
                return tempService.saveNeedToTransaction(UUID.randomUUID().toString() + something + "secret")
            }
        }
    }
}

 

 

import org.springframework.stereotype.Service

@Service
class TempService {

    fun saveNeedToTransaction(something : String): String {
        //need to save something on transcation
        return "Success"
    }
}

 

과연 saveNeedToTransaction는 Transaction이 적용될까??? 

적용되지 않는다 Spring AOP는 주로 어노테이션기반으로 작동하는데 이때 Spring AOP가 프록시를 만들어주는 대상은 Spring Bean에서 관리되는 되어야한다, 하지만 익명객체는 Spring Bean으로 등록되어 있지 않기 떄문에 @Transcational을 포함한 Spring Aop 기반 어노테이션이 동작하지 않는다.
따라서 호출되는 saveNeedToTransaction에 @Transactional을 붙여서 사용해야한다

 

728x90
반응형