빅 데이터 WEB 단계 Spring 프레임 워 크 AOP 절단면 프로 그래 밍 (2)

8073 단어
Spring AOP 절단면 프로 그래 밍 (2)
1. 접점 의 execution 표현 식
  • execution 의 표현 형식: execution (수정자? 반환 값 유형 이 있 는 패키지 클래스? 방법 명 (매개 변수 목록) 이상?)
  • ?있 으 나 마 나 를 나타 낸다.
     execution (* com. xyz. service.. (..) com. xyz. service 는 모든 종류의 모든 방법 을 책임 집 니 다.com. xyz 로 시작 하 는 모든 하위 패 키 지 를 service 아래 의 모든 종류의 모든 방법 으로 신청 합 니 다. 예 를 들 어 com. xyz. a. b. service com. xyz. a. service com. xyz. a. b. c. service 는 위의 조건 을 만족 시 킬 것 입 니 다
  • .
    2. 5 대 통지 의 구체 적 인 실현
  • 서 라운드 알림 around
  • 5 개 중 가장 강력 한 알림, 알림 에서 목표 방법의 실행 여 부 를 제어 할 수 있 는 유일한 알림
  • 사전 알림

  • 프로필 설정
  • 후 설치 알림

  • 프로필 설정
  • 이상 알림
  • 이상 알림 은 이상 이 발생 한 후 트 랜 잭 션 스크롤 백 과 기록 로그
  • 를 제어 할 수 있 습 니 다.

  • 프로필 설정
  • 주의: JoinPoint 인 자 는 반드시 첫 번 째
  • 에 놓 아야 합 니 다.
  • 최종 통지
  • 어떤 경우 에 도 집행



  • 3. AOP 주해
  • 설정 파일 에서 op 주해 스위치 열기
  • 주 해 를 통 해 절단면 류 설정
  • 주석 설정 알림 방법
  • 사전 알림
  • 후 알림
  • 서 라운드 알림
  • 이상 알림
  • 최종 통지

  • 4. 주 해 를 통 해 절 입 점 표현 식 의 인용 생 성
  • 빈 방법 만 들 기
  • @ Pointcut 주 해 를 사용 하여 삽입점 의 인용 을 생 성 합 니 다
  • 사용

  • 질문
    6. 사용자 정의 주석
  • 주석 하 나 를 성명 합 니 다
  • 사용
  • 주해 여 부 를 판단 한다
  • 7. 각종 예시
  • 이상
            
            PersonServlet
                PersonService
                    PersonDao
           servlet           :
                        cn.tedu.big1601.servlet.PersonServlet
                        save()
                         XxxException
                            message
    
      :
                    。
                    ,       ,    。
    
    @Component
    @Aspect
    public class ExceptionAspect {
        @AfterThrowing(value = "execution(* com.tj..*(..))" ,throwing = "throwable" )
        public void after(JoinPoint  jp , Throwable throwable){
            System.out.println("     :"+jp.getTarget().getClass());
            System.out.println(jp.getSignature().getName()+"()     !");
            System.out.println("      :"+throwable.getClass());
            System.out.println("    :"+throwable.getMessage());
        }
    }
    
  • 통계 방법 집행 시간
      servlet              
    1.    
    2.                
    3.     
         
    
      :                 
    
    @Component
    @Aspect
    public class RuntimeAspect {
    
        @Around("execution(* com.tj..*(..))")
        public Object around(ProceedingJoinPoint pjp) throws Throwable{
            Long begin = System.currentTimeMillis();
            Object result = pjp.proceed();
            Long end = System.currentTimeMillis();
            System.out.println(pjp.getTarget().getClass()+" "+pjp.getSignature().getName()+"     "+ (end - begin)+"  !");
            return result;
        }
    }
    
  • 사무 통제
              ,       。
                            
    
                
    public class TxManage {
        /**
         *     
         * */
        public static void stattx(){
            System.out.println("     ");
        }
        /**
         *     
         * */
        public  static void commitTx(){
            System.out.println("    ");
        }
        /**
         *     
         * */
        public static void rollback(){
            System.out.println("    ");
        }
    }
    
           
    @Target(value = { ElementType.METHOD })
    @Retention(value = RetentionPolicy.RUNTIME)
    public @interface TxAnnotation {
        String value() default "";
    
    }
    
                  
    @Component
    public class PersonServiceImpl implements PersonService{
        @Autowired
        private PersonDao dao;
    
        @TxAnnotation
        @Cacheable("add")
        @Override
        public void savePerson(Person person) {
            dao.savePerson(person);
        }
    
        @TxAnnotation
        @Cacheable("get")
        @Override
        public Person getPerson(int id) {
            Person person = dao.getPerson(id);
            return person;
        }
    
        @TxAnnotation
        @Cacheable("del")
        @Override
        public void delPerson(int id) {
            dao.delPerson(id);
        }
    
    }
    
          
    @Component
    @Aspect
    public class TxAspect {
    
        @Around(value = "execution(* com.tj..*(..)) && @annotation(ann)")
        public Object around(ProceedingJoinPoint pjp ,TxAnnotation ann  ) throws Throwable{
            Object result = null;
            try{
                TxManage.stattx();
                result = pjp.proceed();
                TxManage.commitTx();
            }catch(Exception e){
                TxManage.rollback();
            }
            return result; 
        }
    }
    
  • 권한 제어
      :                 @PrivilegeInfo       
    PrivilegeInfo(name=”add”)                 add     
    
             
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface PrivilegeInfo {
        String value() ;
    }
    
                      
    @Component
    public class PersonServlet {
        @Autowired
        private PersonService ps;
    
        /**
         *       
         * */
        @PrivilegeInfo("add")
        public void  savePerson(Person person){
    //      int  i  = 1/0;
            ps.savePerson(person);
        }
        /**
         *       
         * */
        @PrivilegeInfo("get")
        public Person getPerson(int id){
            Person person = ps.getPerson(id);
            return person ; 
        }
        /**
         *       
         * */
        @PrivilegeInfo("del")
        public void delPerson(int id  ){
            ps.delPerson(id);
        }
    }
    
           
    
    @Component
    @Aspect
    public class PrivilegInfoAspect {
        //       
        List list =Arrays.asList("add" , "get");
        @Around("execution(* com.tj..*(..)) && @annotation(ann)")
        public Object around(ProceedingJoinPoint pjp , PrivilegeInfo ann) throws Throwable{
    
            String value = ann.value();
            Object result = null;
            if(list.contains(value)){
                System.out.println("         !");
                result = pjp.proceed();
            }else{
                System.out.println("        , ");
            }
            return result;
        }
    
    }
    
  • 데이터 캐 시
        :1.savePerson                    (Map)      
    2.getPerson     Map                   ,                   
    3.       getPerson                               Person        ,              
    
              
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Cacheable {
        String value();
    }
    
                
    @Component
    public class PersonServiceImpl implements PersonService{
        @Autowired
        private PersonDao dao;
    
        @TxAnnotation
        @Cacheable("add")
        @Override
        public void savePerson(Person person) {
            dao.savePerson(person);
        }
    
        @TxAnnotation
        @Cacheable("get")
        @Override
        public Person getPerson(int id) {
            Person person = dao.getPerson(id);
            return person;
        }
    
        @TxAnnotation
        @Cacheable("del")
        @Override
        public void delPerson(int id) {
            dao.delPerson(id);
        }
    
    }
    
           
    @Component
    @Aspect
    public class CacheableAspect {
        //  
        Map map =  new HashMap();
    
        @Around("execution(* com.tj..*(..))&& @annotation(ann)")
        public Object befer(ProceedingJoinPoint jp  , Cacheable ann) throws Throwable{
            Object result = null;
            String v = ann.value();
            if(v.equals("add")){
                Person  person = (Person) jp.getArgs()[0];
                int id = person.getId();
                if(map.containsKey(id)){
                    System.out.println("      ");
                }else{
                    System.out.println("     ");
                    map.put(id, person);
                    result = jp.proceed();
                }
            }else if(v.equals("get")){
                int id = (Integer) jp.getArgs()[0];
                if(map.containsKey(id)){
                    System.out.println("      ");
                    result  = map.get(id);
                }else{
                    result = jp.proceed();
                    Person person =  (Person) result;
                    map.put(person.getId(), person);
                }
            }
            return result;
        } 
    }
    
  • 좋은 웹페이지 즐겨찾기