在SpringBoot中自动装配bean时发出

问题描述 投票:0回答:1

我正在尝试使用 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

java spring spring-boot jdbc spring-data-jpa
1个回答
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();

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.