我正在使用Spring AOP实现自定义注释处理。我有下面的代码。
public class CacheDemo {
private static ApplicationContext applicationContext;
public static void main(String args[])
{
applicationContext =
new AnnotationConfigApplicationContext(ApplicationConfiguration.class);
}
}
//应用程序配置
@Configuration
@ComponentScan("Demo")
@Component
public class ApplicationConfiguration implements ApplicationContextAware {
@Autowired
TestCacheDemo testCacheDemo;
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext ctx) throws BeansException {
applicationContext = ctx;
}
@Bean
public void testCacheDemoIntialize()
{
testCacheDemo.setApplicationContext(applicationContext);
testCacheDemo.test();
}
}
@Aspect
@Component
public class CustomAnnotationAspect {
@Autowired
private AbstractCacheService cacheService;
@Around("@annotation(Demo.CustomCacheable)")
public Object customCacheable(ProceedingJoinPoint joinPoint) throws Throwable { // This method is not called at all
joinPoint.proceed();
// Some other code to follow
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CustomCacheable {
}
@Component
public class CacheProvider
{
@Autowired
AbstractCacheService abstractCacheService;
CacheManager<String,String> cacheManager;
@PostConstruct
void init()
{
cacheManager = CreateCache.create(s -> {return s.toUpperCase();});
abstractCacheService.setCacheManager(cacheManager);
}
@CustomCacheable
String getCacheValue(String s)
{
String str=s.toUpperCase();
return str;
}
}
出于测试目的,我创建了下面的bean
@Component
public class TestCacheDemo extends TimerTask
{
private ApplicationContext applicationContext;
private Timer timer;
@Autowired
CacheProvider cacheProvider;
void test()
{
System.out.println("Called test");
for (String beanName : applicationContext.getBeanDefinitionNames()) {
System.out.println(beanName);
}
//CacheProvider cacheProvider = applicationContext.getBean(CacheProvider.class);
//cacheProvider.getCacheValue("Hello");
timer = new Timer();
timer.schedule(this,1000,3000);
}
void setApplicationContext(ApplicationContext ctx)
{
applicationContext=ctx;
}
@Override
public void run() {
cacheProvider.getCacheValue("Hi");
}
}
无论何时启动应用程序,它都将调用TestCacheDemo类的test方法,并将定时器设置为在3秒后触发,这样我就可以从timer任务的run方法内部调用带注释的方法getCacheValue。但是当调用带注释的方法时,不会调用注释处理器。因此,我无法进行注释处理。请让我知道问题出在哪里?
要在spring boot中使用AspectJ,必须启用它。您应该向应用程序主类(CacheDemo)或应用程序配置类添加以下注释。
@EnableAspectJAutoProxy
在使用Spring/Java和面向方面编程编写代码时,我面临着一个问题。在服务类中,我有使用@retryable的重试方法和使用@recovery的恢复方法。 这两个方法中的每一个都附加到方面。TestProcessService中的可重试方法“TriggerJob”附加到TestAspect类中的这些方法--BeforeTestTriggerJobsAdvision、AfterTestTrigg
问题内容: 我正在尝试打印“你好,AOP!” 当Guice / AOP联盟拦截标有特定(自定义)注释的方法时,将显示一条消息。我按照官方的文档(可以找到一个PDF 这里 - 。AOP方法拦截的东西在第11页 ),它不能去工作,只编译。 首先,我的注释: 然后,我的实现: 接下来,我的方法拦截器: 最后,尝试利用所有这些AOP内容的驱动程序: 当我运行这个小小的测试驱动程序时,我得到的唯一控制台输出
问题内容: 对于Swift3 / iOS10,请参见以下链接: ios10,Swift3和Firebase推送通知(FCM) 我正在尝试使用Firebase进行通知,并且完全按照文档中的说明进行了集成。但是我不明白为什么它不起作用。在构建项目时,我看到以下行: 这是我的AppDelegate: 问题答案: 1.在 didFinishLaunchingWithOptions 方法中设置Notific
在这个问题中,我遇到了与Struts 2相反的问题:仅从defaultStack截取器中排除验证方法 上面的问题涉及到所有的方法都被排除在外,我的问题是没有任何方法被排除在外! 我正在尝试让authenticationInterceptor忽略LoginAction的showLogin方法: 但是,每次我转发到loginInitial时,拦截器都会抓取它,即使我的showLogin方法被排除在外。
我正在处理react native Expo的推送通知。我刚刚开始,无法获得世博推送通知令牌。我添加了以下代码: 并收到错误“[未处理的承诺拒绝:错误:Expo push notification service仅支持Expo项目。请确保您已登录到正在加载项目的计算机上的Expo developer帐户。]”。 我正在Expo应用程序中运行该项目,我已经在Expo上创建了一个帐户,但仍然没有得到令