Как использовать аннотацию @Autowired в обычном классе(т.е в классе без аннотации @Controller или @Service)

У меня есть класс MyUserPrincipal, с помощью которого у меня осуществляется авторизация. Этот класс не помечен аннотацией @Controller или @Service. код класса MyUserPrincipal:

package com.greatproject.dishonline.service;

import com.greatproject.dishonline.entity.Role;

import com.greatproject.dishonline.entity.User;

import java.util.*;
import java.util.stream.Collectors;

import com.greatproject.dishonline.repository.RolesRepository;
import com.greatproject.dishonline.repository.UsersRepository;
import org.jvnet.hk2.annotations.Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;

public class MyUserPrincipal  implements UserDetails {

    @Autowired
    RolesRepository rolesRepository;

    private User user;

   // private List<RoleAuth> roles;
    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public MyUserPrincipal(User user) {
        this.user = user;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
       Collection<GrantedAuthority> authorities = new ArrayList<>();

      for (String roleName:rolesRepository.findRolesNames()
             ) {

            SimpleGrantedAuthority authority = new SimpleGrantedAuthority(roleName);
            authorities.add(authority);


        }


        return authorities;


    }

    @Override
    public String getPassword() {
        return user.getPassword();
    }

    @Override
    public String getUsername() {
        return user.getLogin();
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return user.isActive();
    }
    //...
}

Проблема в том, что объект rolesRepository не заполняется аннотацией @Autowired, т.к класс MyUserPrincipal не помечен аннотацией @Controller или @Service. И в результате olesRepository.findRolesNames() возвращает null. Код репозитория RolesRepository:

package com.greatproject.dishonline.repository;

import com.greatproject.dishonline.entity.RestTable;
import com.greatproject.dishonline.entity.Role;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.List;

public interface RolesRepository extends JpaRepository<Role, Long> {

    @Query("SELECT r FROM Role r  WHERE r.name='ROLE_USER'")
    Role findUserRole();

    @Query("SELECT r.name FROM Role r")
    List<String> findRolesNames();
}

Помогите, пожалуйста, разобраться как сделать чтобы аннотация заработала в классе MyUserPrincipal.


Ответы (0 шт):