PostSharp 및 Spring.NET에 대한 나의 이해는 당신이 정의하는 것이 당신의 측면, 포인트 컷, 또는 유사한 무언가로 컴파일 된
logger.Debug(m => m("... costly string formatting "));
구문에 의해 처리 될 수 있습니다 디자인 타임에 수업에 무엇이든 할 수 있습니다. 애스펙트를 켜거나 끄거나 포인트 컷 (pointcut)을 변경하는 것과 관련하여 클래스의 객체를 사용할 때 할 수있는 일은 많지 않습니다.
클래스 디자인 타임에 정의한 것을 얻을 수 있습니다. 아무리 당신이 하나의 물체를 사용하거나 그 물체를 백만개의 물체로 사용하십시오. 당신은 그들을 사용하기 위해 매우 조심해야합니다. 그렇지 않으면, 발에 발을 쏠 수 있습니다.
정말 원하는 것은 클래스 수준이 아닌 객체 수준의 측면을 다루는 AOP 도구입니다. 기사는 Add Aspects to Object Using Dynamic Decorator입니다.
나를 위해, 측면은 시스템 요구 사항입니다. 시스템 요구 사항은 운영 요구 사항이며 런타임에 개체가 사용될 때 개체 수준에서 가장 잘 처리됩니다.
솔직히 말하면, 대부분의 AOP 도구가 시스템 요구 사항을 수업 시간에 해결하려고하는 이유를 모르겠습니다. 왜 그렇게 오래 동안 입양이 제한적 이었는지 설명 할 수 있습니다.
안녕하세요 A. 저는 스프링을 약간 쪼개어보고, 여전히 내 문제를 해결하는 방법을 알아낼 수 없습니다. 시스템의 모든 사용자에 대한 보고서를 만들 때 모든 userId를 기록하지 않으려합니다. 그/그녀가 제한된 조치, 예를 들어 CreditCardNumber를 수행하는 경우 userId를 기록하려고합니다. 그리고 내가 아직 알지 못하는 기록 또는 남기고 싶은 다른 장소가있을 수 있습니다. 포인트 컷을 사용하여 이러한 시나리오를 해결하려면 어떻게해야합니까? – Gary
포인트 컷을 사용하면 애스펙트가 실행될 방법을 선택할 수 있습니다. 애스펙트 내부에서 'if'기반 로직을 수행 할 수도 있습니다. 애스펙트 실행을 구성하는 방법은 여러 가지가 있습니다. 메서드 기반보다는 모든 호출에 대한 로깅을 설정하는 것이 더 어려울 것입니다. – NOtherDev