spring 容器工具类

1. 静态工具类方式(不推荐,sonar qube扫描有漏洞)

package com.yusys.init;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;/*** 获取spring的容器,applicationContext    * 需要在 applicationContext.xml中注册这个bean,因为是静态方法,一旦注册,类可以直接获取ApplicationContext* * JournalLogService journalService = (JournalLogService) SpringContextContainer.getBean("journalLogService");* @author bestm**/
@Component
public class SpringContextContainer implements ApplicationContextAware {private static ApplicationContext applicationContext; // Spring应用上下文环境public static ApplicationContext getApplicationContext() {return applicationContext;}/*** 实现ApplicationContextAware接口的回调方法,设置上下文环境*/@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {SpringContextContainer.applicationContext = applicationContext;}@SuppressWarnings("unchecked")public static <T> T getBean(String beanName) {return (T) applicationContext.getBean(beanName);}public static <T> T getBean(Class<T> clazz) {return applicationContext.getBean(clazz);}//如果BeanFactory包含一个与所给名称匹配的bean定义,则返回truepublic static boolean containsBean(String name) {return applicationContext.containsBean(name);}//判断以给定名字注册的bean定义是一个singleton还是一个prototypepublic static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {return applicationContext.isSingleton(name);}public static Class<?> getType(String name) throws NoSuchBeanDefinitionException {return applicationContext.getType(name);}//如果给定的bean名字在bean定义中有别名,则返回这些别名public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {return applicationContext.getAliases(name);}}

2. 注入方式

package com.yl.util;import javax.servlet.http.HttpServletRequest;import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.context.support.WebApplicationContextUtils;/** * spring容器工具类,这种方式优于继承ApplicationContextAware,注入spring,再提供静态方法(不安全)
* @author liuxb 
* @version 1.0  
* @date 2021年10月8日 下午2:43:53 
*/
public class ApplicationUtil {/*** 获取spring容器* @return*/public static WebApplicationContext getApplication() {ServletRequestAttributes requestAttribute = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = requestAttribute.getRequest(); // 首先通过解耦合的方式获取到request// 获得IOC容器WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext());return applicationContext;}/*** 获取spring容器内注册的bean* @param * @param beanName* @param clazz* @return*/public static <T> T getBean(String beanName, Class<T> clazz) {return (T) getApplication().getBean(beanName, clazz);}/*** 获取spring容器内注册的bean* @param * @param clazz* @return*/public static <T> T getBean(Class<T> clazz) {return (T) getApplication().getBean(clazz);}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部