Spring 프레임 워 크 는 AOP 를 기반 으로 간단 한 로그 관리 절차 분석 을 실현 합 니 다.
기술 개술,이 기술 을 묘사 하 는 것 은 무엇 입 니까?이 기술 을 배 우 는 이 유 는 기술 의 난점 이 어디 에 있 습 니까?
프로젝트 관리자 측의 데이터베이스 로 그 를 조작 하 는 것 이 편리 하기 때문에 Spring 프레임 워 크 의 AOP 메커니즘 을 이용 하여 실현 한다.프로젝트 의 난점 은 삽입점 을 설정 하면 파 라미 터 를 어떻게 얻 느 냐 에 있다.
기술 은 당신 이 이 기술 을 어떻게 실현 하고 사용 하 는 지 설명 하고 코드 와 절차 도 에 대한 상세 한 설명 을 요구 합 니 다.여러 점 을 더 세분 화하 여 각 부분 을 나 누 어 묘사 할 수 있다.
applicationContext.xml 에서 AOP 프 록 시 열기
<aop:aspectj-autoproxy />
사용자 정의 주석
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogAnno {
String operatorType();
}
절단면 클래스 만 들 기
@Component
@Aspect
public class LogAopAspect {
@Autowired
LogtableService logtableService;//Logtable ,
@Around("@annotation(qj.admin.aspect.LogAnno)")//
public Object around(ProceedingJoinPoint pjp) throws Throwable
{
MethodSignature methodSignature =(MethodSignature)pjp.getSignature();
Method method = methodSignature.getMethod();
String targetName = pjp.getTarget().getClass().getName();
System.out.println(" :"+targetName);
System.out.println(" :"+method.getName());
Method realMethod = pjp.getTarget().getClass().getDeclaredMethod(methodSignature.getName(), method.getParameterTypes());
LogAnno logAnno = realMethod.getAnnotation(LogAnno.class);//
String operatortype = logAnno.operatorType();// “ ”
//String operatortype = " ";
AdminLog adminLog = new AdminLog();
adminLog.setOperatortype(operatortype);
adminLog.setOperator("123");
Object resultObject = null;
Object [] parameter = pjp.getArgs();//
try {
resultObject = pjp.proceed();
adminLog.setOperatorresult(" "+Arrays.toString(parameter));
} catch (Exception e) {
// TODO: handle exception
adminLog.setOperatorresult(" ");
}
finally {
adminLog.setOperatordate(new Date());
logtableService.addLog(adminLog);
}
return resultObject;
}
사용자 정의 주석 으로 설명 하 는 방법
@LogAnno(operatorType = " ")
public void handleUser(int IDNumber, int type) {
User user = userDAO.get(IDNumber);
userDAO.update(user, type);
}
프로젝트 디 렉 터 리 구조기술 사용 중 발생 하 는 문제 와 해결 과정.문제 의 묘사 와 해결 을 요구 하 는 데 일정한 내용 이 있 으 므 로 대충 요약 해 서 는 안 된다.관련 문제 에 부 딪 힌 사람 이 당신 의 블 로 그 를 보고 이 문 제 를 해결 할 수 있 도록 해 야 합 니 다.
처음 시작 할 때 Method method=methodSignature.getMethod()만 사용 합 니 다.현재 강 화 된 방법 을 가 져 옵 니 다.하지만 다음 LogAnno logAnno=method.getAnnotation(LogAnno.class)에서;에서 get 에 도착 한 logAnno 클래스 는 비어 있 으 며,위 에 System.out.println 을 인쇄 합 니 다.("강화 하 는 방법 은:"+method.getName()입 니 다.추가 하 는 방법 을 보 여 주 는 것 이 잘못 되 지 않 아서 제 지식의 맹점 에 빠 졌 습 니 다.자 료 를 찾 아 보 니 대부분의 튜 토리 얼 은 사용자 정의 주석 류 에@Retention(Retention Policy.RUNTIME)을 추가 하면 문 제 를 해결 할 수 있다 고 말 했 습 니 다.그러나 제 가 추가 한 후에 도 똑 같은 문 제 를 해결 할 수 있 습 니 다.마지막 으로 이 방법 으로 얻 은 함수 가 두 개의 서로 다른 함수 라 는 것 을 깨 달 았 습 니 다.마지막 으로 찾 아 보 니 이 op 이 차단 한 것 이 ServiceImpl 의 한 방법 이 었 다.그리고 이 ServiceImpl 은 사무 관 리 를 시 작 했 고 사무 관 리 는 AOP 를 바탕 으로 했다.
즉,이 권한 의@Around 절단면 은 대리 대상 을 차단 하 는 방법 이 고 대리 대상 의 방법 은 원래 부모 클래스 의 방법 에 대한 주 해 를 추가 하지 않 기 때문에 이 주해 의 대상 은 null 입 니 다.
마지막 으로 Method realMethod=pjp.getTarget().getClass().getDeclaredMethod(methodSignature.getName(),method.getParameterTypes()를 사용 합 니 다.진정 으로 필요 한 증강 함 수 를 가 져 왔 습 니 다.
총결산
Spring 의 AOP 메커니즘 을 이용 하면 확실히 코드 의 양 을 크게 줄 일 수 있어 로그 관 리 를 쉽게 실현 할 수 있다
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.