Spring 프레임 워 크 는 AOP 를 기반 으로 간단 한 로그 관리 절차 분석 을 실현 합 니 다.

SPringaOP 의 사용
기술 개술,이 기술 을 묘사 하 는 것 은 무엇 입 니까?이 기술 을 배 우 는 이 유 는 기술 의 난점 이 어디 에 있 습 니까?
프로젝트 관리자 측의 데이터베이스 로 그 를 조작 하 는 것 이 편리 하기 때문에 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 메커니즘 을 이용 하면 확실히 코드 의 양 을 크게 줄 일 수 있어 로그 관 리 를 쉽게 실현 할 수 있다
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기