首页 新闻 会员 周边

工具类jar包里的bean,被依赖后无法自动注入

0
悬赏园豆:5 [待解决问题]

环境:
Spring Boot 2.6.11

项目1:
工具类项目 com.knowledge:core-1.0.0

里面有redis配置
RedisConfig.java

@Configuration
public class RedisConfig {

    /**
     * 用户信息缓存
     */
    @ConditionalOnMissingBean
    @Bean(name = "userRedisTemplate")
    public RedisTemplate<String, UserInfoDTO> redisTemplateUser(RedisConnectionFactory redisConnectionFactory){
        RedisTemplate<String, UserInfoDTO> template = new RedisTemplate<>();
       //省略
        return template;
    }


    /**
     * 一般缓存
     */
    @ConditionalOnMissingBean
    @Bean(name = "redisTemplate")
    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory factory){

        RedisTemplate<String, Object> template = new RedisTemplate<>();
        //省略
        return template;
    }

}

redisUtils.java

@Slf4j
@Component
public class RedisUtil {

    private final RedisTemplate<String, UserInfoDTO> userRedisTemplate;

    private final RedisTemplate<String, Object> redisTemplate;

    public RedisUtil(@Qualifier("userRedisTemplate") RedisTemplate<String, UserInfoDTO> userRedisTemplate,
                     @Qualifier("redisTemplate") RedisTemplate<String, Object> redisTemplate) {
        this.userRedisTemplate = userRedisTemplate;
        this.redisTemplate = redisTemplate;
    }

    /**
     * redis中存放的token的key的形式为: "sso:token:ss23r7s8s6ssdf2ssssss"  PREFIX + uuid
     */
    private static final String PREFIX = "sso:token:";

    /**
     * 添加token到缓存
     * @param token     token
     * @param user   用户信息
     * @param timeout   token过期时间
     */
    public boolean addUserToken(String token, UserInfoDTO user, Integer timeout){
        token = PREFIX + token;
        try {
            userRedisTemplate.opsForValue().set(token, user, timeout, TimeUnit.SECONDS);
        } catch (Exception e) {
            log.error("redis添加登录用户信息失败! userInfo: {} e: {}" , user, e);
            throw new BusinessException("redis添加登录用户信息失败! userInfo: " + JSON.toJSONString(user));
        }
        return true;
    }

    /**
     * 根据token获取用户
     * @param token token
     * @return      当前用户
     */
    public UserInfoDTO getUserByToken(String token) {
        token = PREFIX + token;
        UserInfoDTO user = null;
        try {
            user = userRedisTemplate.opsForValue().get(token);
        } catch (Exception e) {
            log.error("redis添加获取用户信息失败! token:{}, e:{}" , token, e);
        }
        return user;
    }
}

项目2
com.knowledge:home-1.0.0
通过maven依赖项目1

    <dependencies>
        <dependency>
            <groupId>com.knowledge</groupId>
            <artifactId>core</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>

在项目2中注入项目1中的bean

想请问为什么无法注入bean,以及工具类的jar包中如何写才能被注入?

问题补充:

项目1打包方式

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
代码羡的主页 代码羡 | 初学一级 | 园豆:69
提问于:2022-10-12 09:25
< >
分享
所有回答(1)
0

@SpringBootApplication(scanBasePackages = "com.knowledge")
试试这个是互相,,包扫描路径问题

快乐的凡人721 | 园豆:3918 (老鸟四级) | 2022-10-12 09:37

但是像我在项目2中直接注入RedisTemplate<String,String> redistemplate 的时候是可以注入成功的,但是注入我再项目1封装后的RedisUtil就失败了,看了一圈源码也没看明白人家是怎么写的。

万一以后别的项目再引用这个包,前缀不相同了,比如项目2改成了com.blog.bowen呢,总在启动类上加扫描包也不是办法,想做一个直接依赖就能注入的。

支持(0) 反对(0) 代码羡 | 园豆:69 (初学一级) | 2022-10-12 09:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册