跳至主要内容

AOP(Aspect Oriented Programming)

AOP(Cross-Cutting)

핵심적인 기능에서 부가적인 기능을 분리한다. 분리한 부가기능을 Aspect라는 모듈 형태로 만들어서 설계하고 개발하는 방법


Aspect 구성

Aspect: 부가기능을 담고 있는 객체

Advise: 실질적인 부가기능을 담은 구현체, Aspect는 '무엇'을 '언제' 할지를 정의

  • @Around, @Before, @After, @AfterReturning, @AfterThrowing

PointCut: 부가 기능이 적용되어야 할 대상(메소드)을 선정하는 방법

  • execution(), @annotion, 등등
  • execution(리턴 타입  타겟이 되는 메소드  argument-매개변수)
    • ex) execution(* com.dashboard.service.DashboardService(..))

JointPoint: Advise가 적용될 위치, controller에서 정의된 method들의 args(매개변수)를 담고 있는 객체


import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;


@Aspect
public class UserAuthAspect {
    private static final Logger logger = LoggerFactory.getLogger(AccountAuthAspect.class);

    @Autowired
    private UserAuthService userAuthService;


    @Pointcut("execution(* com.demo.dashboard.service.DashboardService.getBoard(..))")
    public void dashBoardAccountAuth() {}

    @Pointcut("execution(* com.demo.billing.service.BillingService.*(..))")
    public void billingAccountAuth() {}

    @Before("dashBoardAccountAuth() || billingAccountAuth()")
    public void before(JoinPoint joinPoint) {
        Object[] obj = joinPoint.getArgs();
        CommonReqModel model  = (CommonReqModel) obj[0];
        boolean hasDefaultAuth = userAuthService.getAuthInfo(model);
        model.setHasDefaultAuth(hasDefaultAuth);
} }

评论

此博客中的热门博文

Pandas Plot

pandas.DataFrame.plot.bar import matplotlib.pyplot as plt import pandas as pd import numpy as np df = pd.DataFrame(np.random.rand(5, 4).round(1),                   index=['snail', 'pig', 'elephant','rabbit', 'giraffe'],                   columns=pd.Index(['speed', 'lifespan', 'active', 'cuite'],                   name='Genus')) ax = df.plot(kind='bar',figsize=(10,4), rot = 0) plt.show() ==> output in Pycharm

TensorFlow

Anaconda를 이용하여 Tensorflow 설치 Conda환경을 생성 #conda create -n 가상환경 이름 conda create -n tf python=3.6 anaconda 설치된 가상환경 실행 activate tf tf 가상환경에서 tensorflow 설치 pip install tensorflow      TensorFlow 개요 TensorFlow는 dataflow graph로 수학 계산과 데이터의 흐름을 나타낸다. TensorFlow는 dataflow graph를 구성 한 후 session을 생성하여 graph의 일부를 실행한다 Computation Graph TensorFlow 프로그램은 구성 단계 와 실행 단계 로 구성 구성(construction) 단계: 그래프를 조립 실행(execution) 단계: Session을 통해 그래프 연산을 실행 TensorFlow 기본적인 사용법 Argmax 설정한 axis에 따른 가장 큰 값을 가지는 요소의 index를 반환 axis = 0일때 x[0]와 x[1]의 각 요소들을 비교하여 큰 수의 index를 반환하고, axis = 1일때 x[0][]의 요소들 내 큰 수의 index와 x[1][]의 요소들 내 가장 큰 수의 index를 반환 Reshape tf.reshape(tensor, shape, name = None) tensor의 구조를 원하는 shape으로 변환 shape의 한 원소가 -1이라면, 전체 크기가 일정하게 유지되도록 해당 차원의 길이가 자동으로 계산된다. squeeze 차원 중 크기가 1인 차원을 스칼라값으로 바꿔 해당 차원을 제거한다. TensorBoard TensorBard는 TensorFlow에 기록된 로그를 그래프로 시각화시켜 보여주는 도구이다. TensorBoard 실행 tf.summary.FileWriter('log_dir', graph ...