我正在尝试使用 Spring boot JDBC 创建一个项目。 我已经用属性定义了所有必需的类。 但是当我运行该应用程序时,我收到 NullPointerException。 下面是代码:
Bean配置:
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSourceV2() {
return DataSourceBuilder.create()
.url("url")
.username("username")
.password("password")
.driverClassName("oracle.jdbc.OracleDriver")
.build();
}
@Bean("namedParameterJdbcTemplateV2")
public NamedParameterJdbcTemplate namedParameterJdbcTemplateV2() {
return new NamedParameterJdbcTemplate(dataSourceV2());
}
}
抽象DAO类
public abstract class AbstractDAO {
private NamedParameterJdbcTemplate namedParameterJdbcTemplateV2;
public NamedParameterJdbcTemplate getNamedParameterJdbcTemplateV2() {
return this.namedParameterJdbcTemplateV2;
}
@Autowired
@Qualifier("namedParameterJdbcTemplateV2")
public void setNamedParameterJdbcTemplateV2(NamedParameterJdbcTemplate namedParameterJdbcTemplateV2) {
this.namedParameterJdbcTemplateV2 = namedParameterJdbcTemplateV2;
}
}
DAO实现类
@Component
@PropertySource("classpath:MultiSourceSQL.properties")
public class GuestInfoDAOV2Impl extends AbstractDAO implements GuestInfoDAOV2 {
@Value("${guestInfoSQLV2}")
private String guestInfoSQLV2;
@Qualifier("guestInfoResultSetExtractorV2")
@Autowired
private ResultSetExtractor<GuestInfoV2DTO> guestInfoResultSetExtractorV2;
@Override
public GuestInfoV2DTO getGuestInfo(int beginIndex, int endIndex) throws DataAccessException {
Map<String, Object> params = new HashMap<>();
params.put(BEGININDEX, beginIndex);
params.put(ENDINDEX, endIndex);
NamedParameterJdbcTemplate namedParameterJdbcTemplateV2 = getNamedParameterJdbcTemplateV2();
return namedParameterJdbcTemplateV2.query(guestInfoSQLV2, params, guestInfoResultSetExtractorV2);
}
}
当我调试 GuestInfoDAOV2Impl 类时,所有 3 个属性(guestInfoSQLV2、guestInfoResultSetExtractorV2、namedParameterJdbcTemplateV2)都为 null。
附加信息:
创建了另一个配置类来注入bean
@Bean public GuestInfoDAOV2 getGuestInfoDAOV2() {
return new GuestInfoDAOV2Impl(); }
此外,我还创建了一个带有 run 方法的 TestClass:
@Autowired
@Qualifier("getGuestInfoDAOV2")
GuestInfoDAOV2Impl guestInfoDAOV2;
public void run() {
GuestInfoListV2DTO list = guestInfoDAOV2.getGuestInfo(100000000, 100010508);
list.getGuestInfoDTOList().get(0);
}
从main方法调用上面的类
public static void main(String[] args) {
SpringApplication.run(NghpContentIndexingApplication.class, args);
TestClass testClass = new TestClass();
testClass.run();
}
有人可以帮忙解释为什么 bean 没有被注入到代码中吗? 如果需要更多信息,请告诉我。
SpringBoot版本3.3.0
通过添加
applicationContext.getBean()
方法解决了问题:
@SpringBootApplication
public class TestApplication{
public static void main(String[] args) {
ApplicationContext applicationContext = SpringApplication.run(TestApplication.class, args);
TestClass testClass = applicationContext.getBean(TestClass.class);
testClass.run();
}
}