Я хочу написать сокращение для создания экземпляров классов в различных пакетах, таких как классы внутри подпакетов внутри com.kepler.xenon (например, com.kepler.xenon.modules.ticklers.pojo.Tickler, com.kepler.xenon.modules.product.pojo.Product и т. д.).
//This is my advice
@Aspect
@Component
public class OxAspect {
@After("execution(* com.oxane.xenon..*new(..)) && @within(java.lang.Deprecated)")
public void myAdvice(final JoinPoint jp){
System.out.println(jp.getSignature().getName()+""+jp.getTarget().getClass());
}
}
//This is my class
package com.kepler.xenon.modules.ticklers.pojo;
@Deprecated
public Class Ticklers{
@Id
@TableGenerator(name = "TICKLERS_ID", table = "ID_GENERATOR", pkColumnName = "GEN_KEY", valueColumnName = "GEN_VALUE", pkColumnValue = "TICKLERS_ID", allocationSize = 1, initialValue = 1)
@GeneratedValue(strategy = GenerationType.TABLE, generator = "TICKLERS_ID")
@Column(name = "TICKLERS_ID", unique = true, nullable = false)
private int ticklersId;
@Column(name = "TASK", nullable = false, length = 256)
private String taskName;
public int getTicklersId() {
return ticklersId;
}
public void setTicklersId(int ticklersId) {
this.ticklersId = ticklersId;
}
public String getTaskName() {
return taskName;
}
public void setTaskName(String taskName) {
this.taskName = taskName;
}
}
Что я хочу, так это то, что если кто-то пытается получить доступ к классу, который устарел, тогда pointcut фильтрует этот вызов и вызывает совет.Я сделал это для методов, но я не смог сделать это для классов.
Я добавляю аспект, который работает для методов, контроллера и Дао
@Aspect
@Component
public class OxAspect {
private final OxAspectService oxAspectService;
public OxAspect(OxAspectService oxAspectService) {
this.oxAspectService=oxAspectService;
}
@Pointcut("execution(@java.lang.Deprecated * com.oxane.xenon..*(..))"
+ " || execution(* com.oxane.xenon..*.*(..)) && @within(java.lang.Deprecated)")
public void deprecated() {
}
@Before("deprecated()")
public void log(final JoinPoint jp) {
oxAspectService.logDeprecatedMethod(jp);
}
}
Редактировать: я провел некоторые исследованияна весну и обнаружил, что это не может быть сделано с помощью Spring AOP.Мне нужно использовать время загрузки или время компиляции, чтобы достичь того, чего я хочу.Для этого я должен использовать чистую реализацию аспекта j.Поправь меня, если я ошибаюсь.