我正在尝试将我的Spring Bean与我的Rest应用程序链接但不能做同样的事情。 我有一个简单的用户Pojo,ID,名称和职业 我的UserDao是
public static List<User> getAllUsers(){
List<User> userList = null;
userList = new ArrayList<User>();
ApplicationContext context= new ClassPathXmlApplicationContext("Beans.xml");
User user=(User)context.getBean("hbean");
userList.add(user);
return userList;
}
我的服务电话如下:
UserDao userDao = new UserDao();
@GET
@Path("users")
@Produces(MediaType.APPLICATION_XML)
public List<User> getUsers(){
return userDao.getAllUsers();
}
这个方法不起作用,我试过没有Spring(只是在UserDao初始化构造函数然后程序工作正常)
即使我测试了相同的,并在控制台上打印,它工作正常
public static void main(String[] args) {
List<User> userList = null;
userList = new ArrayList<User>();
ApplicationContext context=new ClassPathXmlApplicationContext("Beans.xml");
User user=(User)context.getBean("hbean");
userList.add(user);
userList.forEach(System.out::println);
}
如果上面的代码工作正常,那么部署后我的服务调用可能会出现问题。
答案 0 :(得分:0)
使用Spring时,您最有可能使用DI框架。在您的服务中,您有以下定义:
UserDao userDao = new UserDao();
由于这会导致Spring无法直接向该对象注入值和其他依赖项 - 这可能会导致错误。将这种变化改为:
可能是一个好主意 @Resource
UserDao userDao;
这可以解决您的问题。如果没有 - 请查看UserDao
的定义。是否使用例如@Service
,@Component
或任何其他弹簧描述性注释进行注释?如果是这样 - 检查您的beans.xml实际上是否包含隐含在已定义UserDao
的包位置中定义的类的配置。
答案 1 :(得分:0)
您的代码存在许多问题。没有特别的顺序:
User user=(User)context.getBean("hbean");
你没有在你提供的代码中的任何地方定义一个名为“hbean”的bean,而且User不应该是bean。
public static List<User> getAllUsers()
为什么这个方法是静态的?在大多数用例中,你的DAO也将是Spring注入的bean。
ApplicationContext context=new ClassPathXmlApplicationContext("Beans.xml");
假设您已经将DAO转换为bean,则不需要再生成另一个ApplicationContext,这通常由Spring Boot或servlet容器调用的侦听器完成。
UserDao userDao = new UserDao();
没有意义,因为你需要的方法是静态的,除非你已经做了我上面建议的修改,在这种情况下你可能会做类似的事情:
@Autowired
private UserDao userDao;
所以我建议你先开始阅读一些(较旧的)Spring教程,或者只是抛弃你写的所有内容并转到Spring Boot。
以下教程可能会有所帮助: