zoukankan      html  css  js  c++  java
  • 同一个类中调用Java注解方法生效

    方法一:添加一个新的类,使用类之间调用,此时注解生效。

    方法二:从ApplicationContext中获取该类的bean,然后调用带注解的方法。

    @Component
    public class SpringBootBeanUtil implements ApplicationContextAware {
        private static ApplicationContext applicationContext;
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            if (SpringBootBeanUtil.applicationContext == null) {
                SpringBootBeanUtil.applicationContext = applicationContext;
            }
        }
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
        
        public static Object getBean(String name) {
            return getApplicationContext().getBean(name);
        }
        
        public static <T> T getBean(Class<T> clazz) {
            return getApplicationContext().getBean(clazz);
        }
    }
    
    @Service
    public class ExperimentLoader {
    
        @PostConstruct
        public void init() {
            SpringBootBeanUtil.getBean(ExperimentLoader.class).loadExperiments();
        }
    
        @Scheduled(cron = "0 0/30 * * * *")
        public void scheduledLoad() {
           SpringBootBeanUtil.getBean(ExperimentLoader.class).loadExperiments();
        }
    
        @Transactional
        public void loadExperiments() {
    		//this is the method that need annotation
        }
    }
    
    

    方法三:引入本类的一个实例,调用时,使用实例调用。

    @Service
    public class ExperimentLoader {
    
        @Autowired
        private ExperimentLoader loader;
    
        @PostConstruct
        public void init() {
            loader.loadExperiments();
        }
    
        @Scheduled(cron = "0 0/30 * * * *")
        public void scheduledLoad() {
            loader.loadExperiments();
        }
    
        @Transactional
        public void loadExperiments() {
    		//this is the method that need annotation
        }
    
    }
    

    方法四:强制使用代理。这个方法在网上很常见,但我本地测试失败。此处也记一下:
    启动类中添加 @EnableAspectJAutoProxy(exposeProxy = true)
    调用:

     @PostConstruct
     public void init() {
         ((ExperimentLoader) AopContext.currentProxy()).loadExperiments();
     }
    

    报错:

    Caused by: java.lang.IllegalStateException: Cannot find current proxy: Set 'exposeProxy' property on Advised to 'true' to make it available.
    	at org.springframework.aop.framework.AopContext.currentProxy(AopContext.java:69)
    
  • 相关阅读:
    pytest文档29-allure-pytest(最新最全,保证能搞成功!)
    使用 JMeter 进行压力测试
    web自动化针对PO模式进行二次封装之basepage
    关于面试总结-http协议相关面试题 -----转载
    移动APP测试基础分享
    基于python+requests+unittest框架接口自动化测试设计开发
    jmeter断言接口响应字段大小
    csv文件转换为xlsx文件
    钉钉机器人发群消息笔记
    docker学习笔记
  • 原文地址:https://www.cnblogs.com/shoren/p/14630456.html
Copyright © 2011-2022 走看看