当前位置: 首页 > news >正文

wordpress占用多少内存网站建设优化推广排名

wordpress占用多少内存,网站建设优化推广排名,建筑设计咨询公司要不要资质,亚马逊被曝将裁员1万人一、背景 在我们日常项目中,常常会将用户的认证信息存入缓存中,方便我们在程序执行中,进行获取用户信息。本篇文章主要是介绍使用自定义注解和AOP切面技术进行实现,这也也是非常容易使用的。 二、代码详解 2.1 自定义注解 定义…

一、背景

在我们日常项目中,常常会将用户的认证信息存入缓存中,方便我们在程序执行中,进行获取用户信息。本篇文章主要是介绍使用自定义注解和AOP切面技术进行实现,这也也是非常容易使用的。

二、代码详解

2.1 自定义注解

定义一个注解,用于标记需要自动注入当前用户信息的方法。

import java.lang.annotation.ElementType;  
import java.lang.annotation.Retention;  
import java.lang.annotation.RetentionPolicy;  
import java.lang.annotation.Target;  @Target(ElementType.METHOD)  
@Retention(RetentionPolicy.RUNTIME)  
public @interface InjectCurrentUser {  
}
2.2 创建切面

创建一个切面来拦截所有标记了@InjectCurrentUser注解的方法,并在调用它们之前获取当前用户信息,然后作为参数传递给这些方法(注意:Java的方法签名在编译时是固定的,不能直接向现有方法添加参数。因此,这里假设我们修改方法签名以接受用户信息作为参数,或者使用其他方式如ThreadLocal)。

@Aspect  
@Component  
public class UserAspect {  @Before("@annotation(InjectCurrentUser)")  public void beforeMethod(JoinPoint joinPoint) {  Authentication authentication = SecurityContextHolder.getContext().getAuthentication();  if (authentication != null && authentication.getPrincipal() instanceof UserDetails) {  UserDetails userDetails = (UserDetails) authentication.getPrincipal();  UserContextHolder.setCurrentUser(userDetails);  // 如果需要,可以在这里添加日志或其他逻辑  System.out.println("Setting current user: " + userDetails.getUsername());  }  }  // 可以添加一个@After或@AfterReturning切面来清除ThreadLocal中的用户信息  // 这样做是为了避免内存泄漏,尤其是在长时间运行的线程或线程池中  @After("@annotation(InjectCurrentUser)")  public void afterMethod(JoinPoint joinPoint) {  UserContextHolder.clearCurrentUser();  }  
}
2.3 创建ThreadLocal存储用户信息

定义一个ThreadLocal来存储当前用户的信息(比如UserDetails

public class UserContextHolder {  private static final ThreadLocal<UserDetails> currentUser = new ThreadLocal<>();  public static void setCurrentUser(UserDetails userDetails) {  currentUser.set(userDetails);  }  public static UserDetails getCurrentUser() {  return currentUser.get();  }  // 清除ThreadLocal中的用户信息,避免内存泄漏  public static void clearCurrentUser() {  currentUser.remove();  }  
}
2.4 业务逻辑中获取用户信息

业务逻辑中,通过UserContextHolder.getCurrentUser()来获取当前用户的信息

public class SomeService {  public void someBusinessMethod() {  UserDetails user = UserContextHolder.getCurrentUser();  if (user != null) {  // 使用用户信息进行业务逻辑处理  System.out.println("Doing something with user: " + user.getUsername());  }  }  
}

三、总结

内存泄漏ThreadLocal可能会导致内存泄漏,特别是当使用线程池时,因为线程可能会被重用,而ThreadLocal中的值可能不会被自动清除。因此,在不再需要时显式清除ThreadLocal中的值是一个好习惯。
依赖注入:尽管在这个例子中我们使用了AOP来设置ThreadLocal,但在某些情况下,你可能还想通过依赖注入来传递用户信息,特别是当你需要在多个组件或服务之间共享用户信息时。然而,对于跨线程或跨方法调用的情况,ThreadLocal通常是一个更好的选择。

http://www.yayakq.cn/news/219047/

相关文章:

  • 深圳网站制作与建设公司东莞做微网站
  • 如何做网站客户端培训机构网页设计模板
  • 前端招聘网站平面设计软件免费
  • 自己做的网站怎么加搜索功能磁力链网站怎么做的
  • 如何创办自己的网站企业查询系统官网天眼查
  • 如何修改公司网站盐城大丰建设局网站
  • 传媒公司营销网站湖北省城乡建设厅网站首页
  • 企业网站建设 百度文库特效素材网站
  • 重庆手机网站推广注册360建筑网公司
  • 如果提高网站网站建设所需费用
  • 网站建设的描述大连网站设计九必选仟亿科技
  • 化妆品设计网站建设局属于哪个部门管
  • 网站建设实训报告心得做阿里巴巴网站需要多少钱
  • 百度做网站哪里可以学昆明seo推广公司
  • 中山企业网站建设定制农业网站怎么做
  • 重庆建设施工安全管理网站wordpress如何添加友链
  • 在免费空间上传网站为什么访问不了做互助盘网站找哪家好
  • 广州增城区门户网站旅行社网站模版
  • 网站开发绩效指标聚名网app
  • 建设网站的公司兴田德润可以吗为什么wordpress样式无效
  • 镇江网站搜索优化北京天津网站建设
  • 网站建设 排行龙泉建设工程有限公司网站
  • 山西移动网站设计做社交网站的预算
  • 怎么建设网站临汾WordPress换主题图片不适应
  • wordpress 过滤图片唐山做网站优化
  • 自己做一个网站湖南移动网站建
  • 河池市都安县建设局网站济南哪家网站技术比较高
  • 宁波慈溪网站建设域名是什么?
  • 云南省火电建设公司网站安徽网
  • 坪山附近公司做网站建设哪家技术好赣州优化公司