ConcurrentHashMap使用@Resource
时间: 2023-10-31 22:57:09 浏览: 115
ConcurrentHashMap是Java中的一个线程安全的哈希表实现,它是通过分段锁(Segment)来实现并发访问的。@Resource是Java EE中的一个注解,用于标记被注入的资源。在使用@Resource注解时,需要注意以下几点:
1. ConcurrentHashMap不是一个资源(Resource),而是一个数据结构,所以不适合通过@Resource进行注入。
2. @Resource注解通常用于注入Java EE中的各种资源,比如数据源(DataSource)、会话(Session)、上下文(Context)等。
3. 如果你想在Java EE环境中使用ConcurrentHashMap,可以直接实例化它,然后将其作为一个普通的对象使用,而不需要使用@Resource进行注入。
所以,对于ConcurrentHashMap的使用,一般不需要使用@Resource注解。如果你有其他关于ConcurrentHashMap或@Resource的问题,请继续提问。
相关问题
@Configuration public class SystemSecurityConfig { @Resource private SysMenuDao sysMenuDao; @Bean public UserDetailsService userDetailsService() { // 获取登录用户信息 return new SystemUserDetailsServiceImpl(); } @Bean public DynamicSecurityService dynamicSecurityService() { return () -> { Map<String, ConfigAttribute> map = new ConcurrentHashMap<>(); List<SysMenuEntity> selectMenuList = sysMenuDao.listSysMenu(null); for (SysMenuEntity sysMenuEntity : selectMenuList) { if (StringUtils.isNotEmpty(sysMenuEntity.getPerms()) && StringUtils.isNotEmpty(sysMenuEntity.getUrl()) && !"#".equals(sysMenuEntity.getPerms())) { map.put(sysMenuEntity.getUrl(), new SecurityConfig(sysMenuEntity.getPerms())); } } return map; }; } }
这段代码是关于系统安全配置的Java类,使用了Spring框架的@Configuration和@Bean注解。其中,@Resource注解用于注入SysMenuDao对象,@Bean注解用于声明两个Bean对象:userDetailsService和dynamicSecurityService。
userDetailsService方法返回一个实现了UserDetailsService接口的对象,用于获取登录用户信息。dynamicSecurityService方法返回一个实现了DynamicSecurityService接口的对象,用于动态获取系统中的权限配置信息,这里使用了ConcurrentHashMap来存储权限配置信息。同时,该类引入了SystemUserDetailsServiceImpl类,但是该类的实现细节不在这段代码中展示。
分析以下代码/** * 系统管理模块相关配置 * * @author yaoxin */ @Configuration public class SystemSecurityConfig { @Resource private SysMenuDao sysMenuDao; @Bean public UserDetailsService userDetailsService() { // 获取登录用户信息 return new SystemUserDetailsServiceImpl(); } @Bean public DynamicSecurityService dynamicSecurityService() { return () -> { Map<String, ConfigAttribute> map = new ConcurrentHashMap<>(); List<SysMenuEntity> selectMenuList = sysMenuDao.listSysMenu(null); for (SysMenuEntity sysMenuEntity : selectMenuList) { if (StringUtils.isNotEmpty(sysMenuEntity.getPerms()) && StringUtils.isNotEmpty(sysMenuEntity.getUrl()) && !"#".equals(sysMenuEntity.getPerms())) { map.put(sysMenuEntity.getUrl(), new SecurityConfig(sysMenuEntity.getPerms())); } } return map; }; } }
这是一个 Java 配置类,命名为 SystemSecurityConfig,使用了 Spring Framework 的 @Configuration 注解,表示这是一个配置类。
在该配置类中,定义了两个 Bean:
1. userDetailsService() 方法返回一个 UserDetailsService Bean,该 Bean 的实现类为 SystemUserDetailsServiceImpl。UserDetailsService 是 Spring Security 框架中的一个接口,用于获取用户的信息,如用户名、密码、角色等。
2. dynamicSecurityService() 方法返回一个 DynamicSecurityService Bean,该 Bean 的实现类是一个匿名内部类,实现了 DynamicSecurityService 接口。DynamicSecurityService 是自定义的一个接口,用于动态地获取 URL 对应的访问权限信息,主要用于实现基于 RBAC 模型的权限控制。
在 dynamicSecurityService() 方法中,通过注入 SysMenuDao,从数据库中获取系统中所有的菜单,遍历菜单列表,将每个菜单对应的 URL 和权限信息存储在一个 ConcurrentHashMap 中,并返回该 Map 对象。
这个配置类主要是为了配置 Spring Security 的权限控制相关的信息。
阅读全文
相关推荐
















