Spring中,给静态变量初始化的问题
来源:互联网 发布:图片软件排行 编辑:程序博客网 时间:2024/06/06 20:28
方案一:使用@PostConstruct注解首先,声明一个静态变量staticTarget,静态变量staticTarget的类型要和非静态变量target的类型一致。然后,在带有@PostConstruct注解的方法中,将target的值赋给staticTarget。最后,在静态方法中通过调用静态变量staticTarget来实现对非静态变量target的调用。说明:1)在指定方法上加上@PostConstruct 注解来指定该方法是在bean初始化之后调用2)在指定方法上加上@PreDestroy 注解来指定该方法是在bean销毁之前调用方案二:使用@PostConstruct注解首先,声明一个静态变量factory,这个静态变量factory的类型为该类自身。然后,在带有@PostConstruct注解的方法中,将this赋给这个静态变量factory,此时,factory指向了一个该类的实例(在容器启动的时候创建),故factory可以访问到该实例中的字段。最后,在静态方法中,通过调用静态变量factory来访问该类中的非静态变量。例子:@Componentpublic class FailureTool {/*// 方案一:@Autowiredprivate MailUtil target1;@Autowiredprivate ThreadPoolTaskExecutor target2;private static MailUtil staticTarget1;private static ThreadPoolTaskExecutor staticTarget2;@PostConstruct public void init(){staticTarget1 = target1;staticTarget2 = target2;}*/// 方案二:@Autowiredprivate MailUtil mailUtil;@Autowiredprivate ThreadPoolTaskExecutor taskExecutor;private static FailureTool factory; @PostConstruct public void init(){factory = this;}public static void sendMail(AccountQuotaMonitor accountQuotaMonitor) {/*// 方案一SendMailTask sendMailTask = new SendMailTask(staticTarget1, accountQuotaMonitor);FutureTask<Integer> futureTask = new FutureTask<Integer>(sendMailTask);staticTarget2.submit(futureTask);*/// 方案二SendMailTask sendMailTask = new SendMailTask(factory.mailUtil, accountQuotaMonitor);FutureTask<Integer> futureTask = new FutureTask<Integer>(sendMailTask);factory.taskExecutor.submit(futureTask);}方案三:通过实现ApplicationContextAware接口来获取到spring的ApplicationContext,进而可以获取到容器中的任何对象。说明:1)实现了ApplicationContextAware接口的类,在实例化时会自动调用setApplicationContext方法,2)在setApplicationContext方法中,将类型为ApplicationContext的入参的值赋值给该类的一个静态变量,3)然后就可以通过调用静态的getApplicationContext方法来获取到该类的静态变量,也即获取到了ApplicationContext。例子:@Componentpublic class ApplicationContextUtil implements ApplicationContextAware {private static ApplicationContext context;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {// TODO Auto-generated method stubApplicationContextUtil.context = applicationContext;}public static ApplicationContext getApplicationContext() {return context;}}
0 0
- Spring中,给静态变量初始化的问题
- 静态库中全局(静态)变量的初始化问题
- Spring MVC中静态变量注解初始化
- C++中一般变量、引用变量、常量、 静态变量、静态常量的初始化问题
- 类中静态变量的初始化及使用问题
- Spring给类中静态变量赋值
- Lib库内的静态变量初始化问题
- 类的静态变量初始化问题
- 全局变量和静态变量的初始化问题
- 谈谈全局变量、静态变量的初始化问题
- C#中静态变量的初始化
- C#中静态变量的初始化
- C#中静态变量的初始化
- C/C++中全局变量,静态局部变量,局部变量的初始化问题
- 静态变量的初始化
- 静态变量的初始化
- 静态变量的初始化
- 静态变量的初始化
- AM335x启动流程(BootRom->MLO->Uboot)
- Mac 下实现rsync功能
- 是时候严肃对待利用未定义行为这件事了
- 基于Socket简单实现分离式控制三维场景
- 3.剑指offer-合并两个有序的链表
- Spring中,给静态变量初始化的问题
- 光学知识点
- Android 利用Gradle实现差异化构建
- Android Volley的简单使用
- apk发布渠道
- Some search result of float to int conversion
- SurfaceView基础
- React Native listview(学习) 和 Item 布局适配
- Play Store无法正常连接解决