Spring在⾮controller获取HttpServletRequest对象、获取注解。
。。
@Service
@AllArgsConstructor
public class TestServiceImpl implements TestService {
private final ApplicationContext applicationContext;
@Override
public String test(String str) {
ServletRequestAttributes attributes = (RequestAttributes();
HttpServletRequest httpServletRequest = Request();
String requestURI = RequestURI();
Map<RequestMappingInfo, HandlerMethod> handlerMethodMap = Bean(RequestMappingHandlerMapping.class).getHandlerMethods();
Set<String> anonymousUrls = new HashSet<>();
for (Map.Entry<RequestMappingInfo, HandlerMethod> infoEntry : Set()) {
HandlerMethod handlerMethod = Value();
AnonymousAccess anonymousAccess = MethodAnnotation(AnonymousAccess.class); //注解类
if (null != anonymousAccess) {
anonymousUrls.Key().getPatternsCondition().getPatterns());
}
}
return "成功====》"+str+"<>"+requestURI;
}
}
获取spring上下⽂
;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.fig.BeanFactoryPostProcessor;
import org.springframework.fig.ConfigurableListableBeanFactory;
import org.springframework.stereotype.Component;
@SuppressWarnings("unchecked")
@Component
public class SpringUtils implements BeanFactoryPostProcessor {
private static ConfigurableListableBeanFactory beanFactory; // Spring应⽤上下⽂环境
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
SpringUtils.beanFactory = beanFactory;
}
/**
* 获取对象
*
* @param name
* @return Object ⼀个以所给名字注册的bean的实例
* @throws BeansException
*
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) throws BeansException {
//⾸字母默认⼩写
name=lowerCaseInit(name);
if (containsBean(name)) {
return (T) Bean(name);
}else{
return null;
}
}
/**
* 获取类型为requiredType的对象
*
* @param clz
* @return
* @throws BeansException
*
*/
public static <T> T getBean(Class<T> clz) throws BeansException {
@SuppressWarnings("unchecked")
T result = (T) Bean(clz);
return result;
}
/**
* 如果BeanFactory包含⼀个与所给名称匹配的bean定义,则返回true
*
* @param name
* @return boolean
*/
public static boolean containsBean(String name) {
ainsBean(name);
}
/**
* 判断以给定名字注册的bean定义是⼀个singleton还是⼀个prototype。
* 如果与给定名字相应的bean定义没有被到,将会抛出⼀个异常(NoSuchBeanDefinitionException) *
* @param name
* @return boolean
* @throws NoSuchBeanDefinitionException
*
*/
public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
return beanFactory.isSingleton(name);
}
/**
* @param name
* @return Class 注册对象的类型
* @throws NoSuchBeanDefinitionException
*
*/
public static Class<?> getType(String name) throws NoSuchBeanDefinitionException {
Type(name);
}
/**
* 如果给定的bean名字在bean定义中有别名,则返回这些别名
*
* @param name
* @return
* @throws NoSuchBeanDefinitionException
*
*/
public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
Aliases(name);
}
/**
*⾸字母⼩写
* @return: ⼩写的⾸字母
*/
private static String lowerCaseInit(String str) {
if (str.length()>0) {
char c = str.charAt(0);
if (c >= 65 && c <= 90) {
int i = c + 32;
return ((char)i)+str.substring(1);
}else{
return str;
}
}else{
return null;
}
}
}
package xxx.utils;
slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.DisposableBean;
import t.ApplicationContext;
import t.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class SpringContextHolder implements ApplicationContextAware, DisposableBean {
private static ApplicationContext applicationContext = null;
/**
* 从静态变量applicationContext中取得Bean, ⾃动转型为所赋值对象的类型.
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) {
spring frameworkassertContextInjected();
return (T) Bean(name);
}
/**
* 从静态变量applicationContext中取得Bean, ⾃动转型为所赋值对象的类型.
*/
public static <T> T getBean(Class<T> requiredType) {
assertContextInjected();
Bean(requiredType);
}
/**
* 检查ApplicationContext不为空.
*/
private static void assertContextInjected() {
if (applicationContext == null) {
throw new IllegalStateException("applicaitonContext属性未注⼊, 请在applicationContext" +
".xml中定义SpringContextHolder或在SpringBoot启动类中注册SpringContextHolder.");
}
}
/**
* 清除SpringContextHolder中的ApplicationContext为Null.
*/
private static void clearHolder() {
log.debug("清除SpringContextHolder中的ApplicationContext:"
+ applicationContext);
applicationContext = null;
}
@Override
public void destroy(){
SpringContextHolder.clearHolder();
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (SpringContextHolder.applicationContext != null) {
log.warn("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:" + SpringContextHolder.applicationContext); }
SpringContextHolder.applicationContext = applicationContext;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论