前言:
今天姐妹们对“java中静态方法可以用对象调用吗”可能比较关心,小伙伴们都想要分析一些“java中静态方法可以用对象调用吗”的相关内容。那么小编同时在网摘上收集了一些对于“java中静态方法可以用对象调用吗””的相关资讯,希望各位老铁们能喜欢,各位老铁们一起来了解一下吧!我们经常需要在一些工具类的静态方法中使用spring创建加载的对象。比如静态工具类方法依赖的数据信息来源自数据库,而从数据库中获取数据的对象是Spring自动创建和加载的。
实现方式一
1、在该工具类Partner 中注入Spring 管理的PartnerService对象service。
2、使用@PostConstruct 注解方式创建。
3、类Partner上加入@Component类似注解
具体示例代码如下:
@Componentpublic class Partner { private static Map partners = new HashMap(); private static Partner instance; @Autowired private PartnerService service; @PostConstruct public void init() { instance = this; instance.service = this.service; //从数据库中获取数据 List partnerEnties = instance.service.getAllPartners(); for (P p : partnerEnties) { partners.put(p.getAppKey(), p); } } public static Partner getInstanceFromDb(){ return instance; }}实现方式二
构造函数方式注入依赖的Spring管理对象proxyConfig,并利用其数据来创建该类的静态属性RequestConfig对象config。这样在该类的其他方法中就能正常使用config对象了。
其中proxyConfig对象为自己定义pojo对象。
@Componentpublic class HttpUtil { private static RequestConfig config; public HttpUtil(ProxyConfig proxyConfig) { initRequestConfig(proxyConfig); } private static void initRequestConfig(ProxyConfig proxyConfig) { RequestConfig.Builder builder = RequestConfig.custom(); if (proxyConfig != null ) { HttpHost proxy = new HttpHost(proxyConfig.getHost(), proxyConfig.getPort()); builder.setProxy(proxy); } HttpUtil.config = builder.setConnectTimeout(5000) .setSocketTimeout(5000) .build(); } /** * post 请求 */ public static Map<String, Object> post(Request request, String url) throws Exception { SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory( SSLContexts.custom().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build(), NoopHostnameVerifier.INSTANCE ); // 可以使用config类 CloseableHttpClient httpClient = HttpClientBuilder.create() .setSSLSocketFactory(csf) .setDefaultRequestConfig(config).build(); HttpPost httpPost = new HttpPost(url); //do sth. }}实现方式三
利用ApplicationContextAware来实现
/** * spring获取工具类 * @since 1.0 */@Componentpublic class ApplicationBean implements ApplicationContextAware { private static ApplicationContext context; /** * 当继承了ApplicationContextAware类之后,那么程序在调用 * getBean(String)的时候会自动调用该方法,不用自己操作 */ @Override public void setApplicationContext(ApplicationContext appContext) throws BeansException { ApplicationBean.context= appContext; } public static Object getBean(String beanName){ return ApplicationBean.context.getBean(beanName); } public static <T> T getBean(Class<T> calzz) { return ApplicationBean.context.getBean(calzz); }}
ApplicationBean类就能利用getBean()静态方法类获取Spring管理的对象。
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #java中静态方法可以用对象调用吗