财产';数据源';在Java的Spring中是必需的
我刚开始学习Spring,现在我尝试编写基于Spring JDBC的DAO应用程序。 我用这种方式创建了config类财产';数据源';在Java的Spring中是必需的,java,spring,jdbc,dependency-injection,inversion-of-control,Java,Spring,Jdbc,Dependency Injection,Inversion Of Control,我刚开始学习Spring,现在我尝试编写基于Spring JDBC的DAO应用程序。 我用这种方式创建了config类 @Configuration @ComponentScan("com.foxminded.university") public class SpringJdbcConfig { @Bean public DataSource dataSource() { DriverManagerDataSource dataSource
@Configuration
@ComponentScan("com.foxminded.university")
public class SpringJdbcConfig {
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.postgresql.Driver");
dataSource.setUrl("jdbc:postgresql://127.0.0.1:5432/university");
dataSource.setUsername("maintainer");
dataSource.setPassword("12345678");
return dataSource;
}
}
public class Main {
public static void main(String[] args) {
Building building = new SpringJdbcConfig().building();
building.setName("hghgf");
building.setFloors(2);
BuildingDao buildingDao = new SpringJdbcConfig().buildingDao();
buildingDao.save(building);
}
}
dao类使用这个bean
@Component
public class BuildingDao implements Dao<Building> {
@Autowired
private DataSource dataSource;
private final JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
private static final String SAVE_BUILDING = "Insert into buildings (name, floors) values (?,?)";
@Override
public void save(Building building) {
jdbcTemplate.update(SAVE_BUILDING, building.getName(), building.getFloors());
}
}
我怎么能修好它?正如我所看到的,我使用@Autowired的方式不正确,因为当我使用它时,一切都正常
private DataSource dataSource = new SpringJdbcConfig().dataSource();
但就国际奥委会而言,这是额外的联系和错误
顺便说一句,我也必须这样使用它
@Configuration
@ComponentScan("com.foxminded.university")
public class SpringJdbcConfig {
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.postgresql.Driver");
dataSource.setUrl("jdbc:postgresql://127.0.0.1:5432/university");
dataSource.setUsername("maintainer");
dataSource.setPassword("12345678");
return dataSource;
}
}
public class Main {
public static void main(String[] args) {
Building building = new SpringJdbcConfig().building();
building.setName("hghgf");
building.setFloors(2);
BuildingDao buildingDao = new SpringJdbcConfig().buildingDao();
buildingDao.save(building);
}
}
如果您能解释如何正确使用@autowired并将bean注入主类,我将不胜感激。我建议您使用spring boot来配置应用程序,如下所示。这将初始化并自动配置您的大部分需求
@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan("com.foxminded.university")
public class SpringBootWebApp {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(SpringBootWebApp.class, args);
context.registerShutdownHook();
}
}
在此之后,您可以将@Autowire用于您配置的所有spring托管bean。按如下方式编写ComponentScan属性,并确保SpringJdbcConfig类位于com.foxmind.university包下*
@ComponentScan(basePackages = "com.foxminded.university")
是的,但一开始我想了解在没有Spring引导的情况下如何使用它,然后我建议您阅读这里的Spring文档。如果可能的话,从spring的基础知识开始,比如IoC、依赖注入。这将有助于理解自动布线。