2016-04-06 9 views
0

RESTコントローラでテスト用のSpring MVCアプリケーションを作成しました。私はいくつかのメソッドのための側面を適用したいが、このメソッドが何も起こらないと呼ばれるとき、私は理由を見つけることができません。 それは私のコンフィグレーションとアプリケーションのクラスです:スプリングブート@Aspect Jロギング

@SpringBootApplication(scanBasePackages = "org.test") 
@EnableAspectJAutoProxy 
public class TestaopApplication { 

public static void main(String[] args) { 
    SpringApplication.run(TestaopApplication.class, args); 
} 
} 

それは私のアスペクトクラスです:

@Aspect 
@Component 
public class Logging { 

private static final Logger logger = LoggerFactory.getLogger(GreetingController.class); 
@Pointcut("execution(* org.test.restspring.model.Greeting.getCreatedDate(..))") 
private void getDate(){} 

@Before("getDate()") 
public void beforeGettingDate(){ 
    logger.info("Date is asked"); 
} 

@After("getDate()") 
public void afterGettingDate(){ 
    logger.info("Date is received"); 
} 

}

それは私の単純なBeanです:それは私です

@Component 
public class Greeting { 

private long id; 
private String content; 
private Date created; 

public Greeting() { } 
public Greeting(long id, String content) { 
    this.id = id; 
    this.content = content; 
    this.created = Calendar.getInstance().getTime(); 
} 

public long getId() { 
    return id; 
} 

public String getContent() { 
    return content; 
} 

public String getCreatedDate(){ 
    return created.toString(); 
} 
} 

コントローラ:

@RestController 
public class GreetingController { 

private static final String template = "Hello, %s!"; 
private static final Logger logger = LoggerFactory.getLogger(GreetingController.class); 
private final AtomicLong counter = new AtomicLong(); 

@RequestMapping("/greeting") 
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { 
    Greeting response = new Greeting(counter.incrementAndGet(), 
      String.format(template, name)); 
    logger.info(response.getCreatedDate()); 
    return response; 
} 


} 

この問題を手伝ってください。

答えて

0

明示的なコンストラクタ呼び出し(new Greeting(...))で作成されたBeanは、Springによって管理されません。それがあなたの側面が適用されない理由です。

プロトタイプスコープを使用できます。このようにして、Springはすべてのリクエストに対して挨拶のBeanの新しいインスタンスを作成します。

@Component 
@Scope("prototype") 
public class Greeting { 

とあなたのコントローラ:Beanの

@RestController 
public class GreetingController { 

private static final String template = "Hello, %s!"; 
private static final Logger logger = LoggerFactory.getLogger(GreetingController.class); 
private final AtomicLong counter = new AtomicLong(); 

@Autowired 
private Greeting greeting; 

@RequestMapping("/greeting") 
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { 
    greeting.setId(counter.incrementAndGet()); 
    greeting.setContent(String.format(template, name)) 
    logger.info(response.getCreatedDate()); 
    return response; 
} 



} 
+0

私はエラーをGORが、私は@Pointcutに存在しないとメソッドを交換するとき(その態様は方法には適用されません) 、私はエラーがありません。エラー:: HTTPメッセージの書き込みに失敗しました:org.springframework.http.converter.HttpMessageNotWritableException:コンテンツを書き込めませんでした:org.springframework.aop.TrueClassFilterクラスでシリアライザが見つかりませんでした。BeanSerializerを作成するためのプロパティが見つかりませんでした。無効化SerializationFeature.FAIL_ON_EMPTY_BEANS)) – Yuriy

+0

そして、私はゲッターとセッターを私の中に挨拶するクラスがあります。 – Yuriy