当前位置: 首页 > 知识库问答 >
问题:

Spring Boot,不创建beans@controller,@service

陈宏胜
2023-03-14

这是我的项目目录结构。

所有controller和其他类以及bean目录都在“WebPortalApplication”类下,正如Spring Boot doc所述,我们没有明确指定要扫描bean的包,只要这些包位于“main”类目录下,对吗?因此,当我运行“WebPortalApplication”文件时,它会生成,但有这样的例外。

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userRestController': Unsatisfied dependency expressed through field 'userService'; 

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userService': Unsatisfied dependency expressed through field 'roleRepository'; 

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'roleRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException:

Caused by: java.lang.IllegalArgumentException: Not a managed type: class com.epam.webPortal.model.Role

@RestController公共类

@Autowired
UserService userService;
private static final Logger LOGGER = LoggerFactory.getLogger(UserRestController.class);

//-------------------Retrieve All Users--------------------------------------------------------
@RequestMapping(value = "/user/", method = RequestMethod.GET)
public String listAllUsers() {
    String userAsJson = "";
    List<User> users = userService.findAllUsers();
    try {
        userAsJson = JsonConvertor.toJson(users);
    } catch (Exception ex) {
        LOGGER.error("Something went wrong during converting json format");
    }
    LOGGER.info("displaying all users in json format");
    return userAsJson;

}

 package com.epam.webPortal.service.user;

import com.epam.webPortal.model.User;
import com.epam.webPortal.repository.role.RoleRepository;
import com.epam.webPortal.repository.user.UserRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional

import java.util.Date;
import java.util.HashSet;
import java.util.List;

@Service("userService")
@Transactional
public class UserServiceImpl implements UserService {

    private static final Logger LOGGER = LoggerFactory.getLogger(UserServiceImpl.class);

    @Autowired
    private UserRepository userRepository;
    @Autowired
    private RoleRepository roleRepository;
    @Autowired
    private BCryptPasswordEncoder bCryptPasswordEncoder;

    @Override
    public void saveUser(User user) {
        user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
        user.setRoles(new HashSet<>(roleRepository.findAll()));
        user.setDateRegistered(new Date());
        userRepository.save(user);
        LOGGER.info("user with username {} successfully saved", user.getUsername());
    }

    @Override
    public User findByUsername(String username) {
        return userRepository.findByUsername(username);
    }

    @Override
    public List<User> findAllUsers() {
        return userRepository.findAllUsers();
    }

    @Override
    public User findById(Long Id) {
        return userRepository.findById(Id);
    }

    @Override
    public void updateUser(User user) {
        final User entity = userRepository.findById(user.getId());
        if (entity != null) {
            entity.setFirstName(user.getFirstName());
            entity.setLastName(user.getLastName());
            entity.setEmail(user.getEmail());
            entity.setSkypeID(user.getSkypeID());
            entity.setDateRegistered(new Date());
            entity.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
            userRepository.save(entity);
            LOGGER.info("user with id {} successfully updated", user.getId());
        }
    }

    @Override
    public void deleteUserById(Long id) {
        userRepository.deleteById(id);
        LOGGER.info("user with id {} successfully deleted", id);
    }
}

package com.epam.webPortal.model;

import javax.persistence.*;
import java.util.Set;

@Entity
@Table(name = "role")
public class Role {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    @ManyToMany(mappedBy = "roles", fetch = FetchType.EAGER)
    private Set<User> users;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<User> getUsers() {
        return users;
    }

    public void setUsers(Set<User> users) {
        this.users = users;
    }
}

共有1个答案

易京
2023-03-14

看起来您使用的是JPA。所有JPA实体都必须用@Entity注释。

Caused by: java.lang.IllegalArgumentException: Not a managed type: class com.epam.webPortal.model.Role

意味着,Role类缺少@Entity注释。

 类似资料:
  • 现在,我们已经有了游戏中的所有图像和类,接下来的工作是构建游戏引擎。Canvas Hero游戏使用标准的MVC架构进行构建,MVC架构使数据、表示和控制分离。本节,我们将创建Controller类,它负责实例化模型和视图,初始化游戏,控制游戏状态,并管理键盘事件。 操作步骤 按照以下步骤,创建Canvas Hero游戏的控制器: 1.   定义Controller类的构造函数: /* 游戏控制器

  • 相关的: null 通过spring配置来配置bean的数量; 通过获取此配置; 从自动配置模块根据所述配置创建并注入@beans; 能够在应用程序中创建bean。 示例:使通过spring配置声明基于咖啡因的的数量成为可能。以下是基于类似问题的公认答案的实现: 首先,引导自动配置模块:

  • 我创建了一个具有REST Web服务和jpa依赖关系的Spring Boot应用程序。应用程序作为独立应用程序自行运行。我试图添加UI层使用vaadin作为一个单独的项目,使用sring引导项目的服务。有没有一种简单的方法可以使Spring Boot应用程序成为一个可以包含在其他项目中的库jar。 我搜索了论坛,发现一些建议不要使用Spring Boot,而是使用spring框架来创建库的线程。只

  • 我有一个单例春豆,可以创建原型豆;这些是从字段中检索的: 现在我想为单例创建一个JUnit-Test: 但是可以理解的是,这并没有正确设置单例的< code>Provider。 有什么办法吗?我希望避免创建创建原型实例的Singleton Factory bean。 或者,对单例使用一个< code>@Lookup-factory方法是否很有可能?我还没有研究过这个。

  • 所以,我有一个类似这样的问题:2020-01-30 22:54:20.059错误8040--[main]O.S.Boot.SpringApplication:应用程序运行失败 UnsatisfiedDependencyException:创建名为“Dieta Controller”的bean时出错:通过字段“Dieta Repository”表示的不满足依赖项;嵌套异常为org.springfra