spring-AOP 및 AOP 가 request 의 각종 매개 변 수 를 가 져 옵 니 다.
6719 단어 spring-AOPAOPrequest매개 변수
AOP 는 절단면 프로 그래 밍 이 라 고 하 는데 프로그램 개발 에서 로그,사무,권한 대기 등 시스템 차원 의 문 제 를 해결 하 는 데 주로 사용 된다.
AOP 의 기본 개념
Aspect
(절단면):보통 하나의 유형 으로 그 안에 착안점 과 알림 을 정의 할 수 있 습 니 다JointPoint
(연결 점):프로그램 실행 과정 에서 명확 한 점,일반적으로 방법의 호출Advice
(알림):AOP 가 특정한 접점 에서 실행 하 는 증강 처리,before,after,after Returning,after Throwing,aroundPointcut
(착안점):알림 이 있 는 연결 점 입 니 다.프로그램 에서 주로 쓰기 착안점 표현 식AOP
대리:AOP 프레임 워 크 가 만 든 대상 이 고 대 리 는 목표 대상 의 강화 이다.Spring 의 AOP 대 리 는 JDK 동적 대 리 를 할 수 있 고 CGLIB 대리 일 수도 있 습 니 다.전 자 는 인 터 페 이 스 를 바탕 으로 하고 후 자 는 하위 클래스2.Spring AOP
Spring 의 AOP 프 록 시 는 Spring 의 IOC 용기 와 떨 어 질 수 없습니다.프 록 시 생 성,관리 및 의존 관 계 는 모두 IOC 용기 가 책임 집 니 다.Spring 은 기본적으로 JDK 동적 프 록 시 를 사용 합 니 다.프 록 시 인터페이스 가 아 닌 프 록 시 클래스 가 필요 할 때 Spring 은 자동 으로 CGLIB 프 록 시 로 전환 합 니 다.그러나 현재 프로젝트 는 모두 인터페이스 프로 그래 밍 입 니 다.그 러 니까 JDK 동적 에이 전 트 는 상대 적 으로 많이 쓰 는 거 야.
3.주석 기반 AOP 설정 방식
1.@AsjectJ 지원 사용 하기
spring 설정 에서 다음 문장 을 설정 합 니 다:
<aop:aspectj-autoproxy />
또는 주석 사용:
@EnableAspectJAutoProxy
2.알림 유형 소개(1)
Before
:대상 방법 이 호출 되 기 전에 강화 처 리 를 합 니 다.@Before 는 삽입점 표현 식 만 지정 하면 됩 니 다.(2)
AfterReturning
:목표 방법 이 정상적으로 완 성 된 후에 강화 합 니 다.@AfterReturning 은 접점 표현 식 을 지정 한 것 외 에 반환 값 형 참 명 returning 을 지정 하여 목표 방법 을 나타 내 는 반환 값 을 지정 할 수 있 습 니 다.(3)
AfterThrowing
:프로그램 에서 처리 되 지 않 은 이상 을 처리 하 는 데 사 용 됩 니 다.@AfterThrowing 은 절 입 점 표현 식 을 지정 한 후 throwing 의 반환 값 인삼 이름 을 지정 할 수 있 습 니 다.이 인삼 이름 을 통 해대상 방법 에서 던 진 이상 대상 에 접근 합 니 다.
(4)
After
:목표 방법 이 완 성 된 후에 강화 하고 목표 방법 에 관 계 없 이 성공 적 으로 완성 합 니 다.@After 는 절 입 점 표현 식 을 지정 할 수 있 습 니 다.(5)
Around
:서 라운드 알림 은 목표 방법 이 완 료 된 후에 강화 처 리 를 합 니 다.서 라운드 알림 은 가장 중요 한 알림 유형 입 니 다.예 를 들 어 사무,로그 등 은 모두 서 라운드 알림 입 니 다.프로 그래 밍 의 핵심 은 Proceeding JoinPoint 입 니 다.3.실행 우선 순위 알림
목표 방법 에 들 어 갈 때 Around 를 짜 고 Before 를 짜 고 목표 방법 에서 물 러 날 때 Around 를 짜 고 After Returning 을 짜 서 나중에 After 를 짜 냅 니 다.
메모:Spring AOP 의 서 라운드 알림 은 AfterThrowing 알림 의 실행 에 영향 을 줄 수 있 습 니 다.동시에 사용 하지 마 십시오!동시에 사용 해도 의미 가 없다.
4.절 입 점 의 정의 와 표현 식
접점 식 의 정 의 는 전체 AOP 의 핵심 이 고 자신의 규범 이 있 습 니 다.
Spring AOP 가 지원 하 는 접점 인디케이터:
execution
:실행 방법 과 일치 하 는 연결 점
A:@Pointcut(“execution(* com.aijava.springcode.service….(…))”)
첫 번 째 는 임 의 방법 에 맞 게 값 을 되 돌려 주 는 것 을 나타 낸다.방법의 임 의 매개 변수 개수
B:@Pointcut(“within(com.aijava.springcode.service.*)”)
within 일치 하 는 방법의 연결 점 을 제한 합 니 다.위 에 있 는 것 은 service 패키지 의 임 의 연결 점 과 일치 합 니 다.
C:@Pointcut(“this(com.aijava.springcode.service.UserService)”)
this 는 AOP 프 록 시 를 지정 한 형식의 인 스 턴 스 로 한정 합 니 다.예 를 들 어 특정한 인 스 턴 스 를 지정 한 것 이 바로 UserService 입 니 다.
D:@Pointcut(“bean(userService)”)
bean 도 매우 자주 사용 합 니 다.bean 은 IOC 용기 의 bean 이름 을 지정 할 수 있 습 니 다.다음은 AOP 를 사용 하여 통계 계산 방법의 실행 시간 과 request 요청 파라미터 등 정 보 를 얻 는 log 방법 입 니 다.
/**
* description:
*
*
* @author wkGui
*/
@Component
@Aspect
public class ResExeTimeCounter {
private static Logger logger = LoggerFactory.getLogger(ResExeTimeCounter.class);
@Pointcut("execution(* com.wk.controller..*.*(..))")
public void pointCut() {
}
@Around("pointCut()")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
RequestAttributes ra = RequestContextHolder.getRequestAttributes();
ServletRequestAttributes sra = (ServletRequestAttributes) ra;
assert sra != null;
HttpServletRequest request = sra.getRequest();
String url = request.getRequestURL().toString();
String method = request.getMethod();
String queryString = request.getQueryString();
long startTime = System.currentTimeMillis();
logger.info("{url:{}, method:{}, queryString:{}}", url, method, queryString);
Object rs;
boolean successAble = false;
JsonObject paramsJson = new JsonObject();
try {
Object[] params = pjp.getArgs();
for (int i = 0; i < params.length; i++) {
if (params[i] instanceof BindingResult
|| params[i] instanceof HttpRequest
|| params[i] instanceof HttpResponse){
continue;
}
paramsJson.addProperty("param-" + i, JsonUtil.toJsonWtihNullField(params[i]));
}
rs = pjp.proceed();
successAble = true;
} finally {
logger.info("{url:{}, method:{}, success-able:{}, exe-time:{}, params:{}}", url, method, successAble, System.currentTimeMillis() - startTime, paramsJson);
}
return rs;
}
}
SpringAOP 는 request 의 모든 인 자 를 가 져 와 사용자 작업 로 그 를 기록 합 니 다.오늘 AOP 관리 일 지 를 만 들 었 는데 알 이 너무 아파 서...
낡은 규칙 에 코드 를 붙 여 라.
우선 op 가방 외 에 이 세 개의 가방 이 필요 합 니 다.
스스로 어머니 를 섬기다.
controllers 에 들 어 가 려 면 이 코드 를 뮤 직 비디오 설정 에 기록 하 십시오.오전 내 내 자 르 지 못 하 는 것 이 바로 이 때 문 입 니 다.
method 클래스 에 들 어 가 는 방법 이름
이것 을 본 떠 서 나 올 수 있 습 니 다.PS:주석 을 무시 하 세 요.강박 증 을 죽 일 수 있 습 니 다.
제 제어 클래스 에는 두 개의 인자 request 와 response 만 있 기 때문에 제 가 있 는 request 는 아래 표 시 된 0 과 같 습 니 다.
하부의
Enumeration parameter = request.getParameterNames();
while(parameter.hasMoreElements()) {
String a=(String) parameter.nextElement();
System.out.println(request.getParameter(a));
}
페이지 에서 올 라 온 모든 매개 변수 와 매개 변수 이름,매개 변수:request.getParameter(a),매개 변수 이름:a 를 가 져 올 수 있 습 니 다.위의 코드 는 op 에서 실측 할 수 있 지만 차단기 에 넣 으 면 실측 은 날짜 로 돌아 갑 니 다.무슨 귀신 인지 모 르 겠 습 니 다.get 요청 은 가끔 정상 입 니 다.post 정상 이 아 닙 니 다.op 에 문제 가 없습니다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Firebase의 새로운 SDK를 사용하고 싶다면 Cocoapods 1.0.0 이상을 사용하십시오.요 전날 공개된 Firebase의 새로운 SDK를 사용하고 싶은 경우는, Cocoapods의 1.0.0 이상을 이용해 SDK의 도입을 실시한다. 로깅시의 AOP 라이브러리에서 Aspects를 이용하고 있는 경우에, ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.