@Autowired
Movie movieDao;
单靠它是行不通的,因为我认为会调用new
方法,所以DAO不是由Spring管理的。下面的方法确实起作用,但是如果我必须将上下文配置复制并粘贴到每个方法中,那么看起来会很混乱
@Autowired
MovieDao movieDao;
@Override
public List<Movie> findAll() {
GenericXmlApplicationContext context = new GenericXmlApplicationContext();
context.load("classpath:app-context.xml");
context.refresh();
MovieDao movieDao = (MovieDao) context.getBean("movieDao", MovieDao.class);
return movieDao.findAll();
}
这段代码在我的服务类中。有没有更优雅的方法来确保我的DAO被正确初始化,而不是复制和粘贴那个方法的前4行到每个服务方法中?
我认为主要问题是您希望直接(使用new
)实例化您的服务,而不是使用Spring:
MovieService movieService = new MovieServiceImpl();
当您执行此操作时,您的MovieServiceImpl
实例将被构造,但未初始化(字段@Autowired MovieDao
为Null
)。
如果您想用字段注入正确地实例化您的对象,您需要使用Spring。正如文档中或本例中所解释的,您可以自动检测所有带注释的bean,并通过组件扫描在上下文中初始化它们。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Use component scanning to auto-discover your beans (by annotation) and initialize them -->
<context:component-scan base-package="com.se325.a01" />
<!-- No need to declare manually your beans, because beans are auto-discovered thanks to <context:component-scan/> -->
</beans>
package com.se325.a01;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.se325.a01.model.Movie;
import com.se325.a01.service.MovieService;
public class App {
public static void main(String[] args) {
// Let's create the Spring context based on your app-context.xml
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"app-context.xml"});
// Now your context is ready. All beans are initialised.
// You can retrieve and use your MovieService
MovieService movieService = context.getBean("movieService");
Movie matrixMovie = new Movie("Matrix");
movieService.create(matrixMovie);
}
}
我正在使用C#开发简单的minecraft启动器。我想自动连接用户到我们的服务器使用IP地址和端口时,用户开始我的世界。
我正试图通过AnyLogic 7.3.6连接到本地SQL数据库。我安装了SQL Server 2016 Developer,数据库采用混合身份验证(Windows) 网络错误IOException:连接被拒绝:连接 拒绝连接:连接 我的主机名为。我曾尝试将登录名和密码留空,希望Windows身份验证,并尝试将SQL用户(Test,Test)添加到服务器,两者的结果相同。我正在使用JDBC驱动程序,
我已经在Ubuntu14.04上安装并启动了nginx服务器。我的目标是使用HLS(http live streaming)流媒体视频(live)。我遵循了本教程https://www.vultr.com/docs/setup-nginx-on-ubuntu-to-stream-live-hls-video,它推荐使用OBS-Studio。然而,我不知道如何从OBS-STUDIO流到Nginx,然
我使用Sabre DAV在PHP中实现了一个webdav目录,用于我的网站(Application Server Webinterface)。 对于这个网站,我现在使用C#编写了一个TCP套接字,它运行在另一个服务器上(实际上它在同一个数据中心,但从理论上讲,它在另一个半球上)。 我想连接我的网络Dav到我的套接字的FTP服务器,这意味着文件监听,下载,上传。用户只能连接到一个服务。想象一下,我的
我正在尝试为我的dao类自带一个sessionfactory,但它不起作用 这也是我的服务班 请在这方面提供一点帮助。我已经浪费了一整天的时间来寻找解决办法。提前致谢
我正在尝试使用自定义身份验证提供程序配置Spring Security性。但是,我想在服务中自动装配以处理实际的数据库身份验证。我已经验证它在没有这个自动装配bean的情况下工作(只是在提供程序中硬编码)。我也在使用SpringMVC与hibernate结合使用。我目前正在使用根配置(hibernate等)和webMVC使用java注释和Spring使用xml进行混合方法。我知道这是不赞成的,但我