java.lang.NullPointerException: нуль на AutoWiring bean в StandAlone App - PullRequest
0 голосов
/ 28 февраля 2019

При попытке использовать функцию @AutoWire с одним из приложений StandAlone, которые не могут этого сделать, вместо этого получается исключение нулевого указателя.Пожалуйста, выделите мои ошибки, если таковые имеются.Ваша помощь приветствуется.

Spring Ver 5.1.5.RELEASE, и мы не используем xml-файл конфигурации, чтобы сообщить Spring, что есть аннотированные классы, которые нужно изучить, вместо этого используя @ComponentScan или @EnableAutoConfiguration в верхней части AppConfig и повышая уровень контекста.из класса main () в качестве первой строки.Но Autowiring прекрасно работает с внутренними bean / java-классами jdk (Environment), но не с пользовательскими классами POJO.Если мы пытаемся пройти через метод getBean, он работает.Но я стараюсь избегать создания контекста везде и использовать getBean (). Пожалуйста, обратитесь ниже и помогите мне только с вашими ценными рекомендациями.

public class ContextMaster {
private static AnnotationConfigApplicationContext appContext;
public static AnnotationConfigApplicationContext getApplicationContext() {
if (appContext == null) {
appContext =  new AnnotationConfigApplicationContext(ContextConfig.class);
//appContext =  new AnnotationConfigApplicationContext("com.xx.xx.xxx","xx.xxx.xxxx.xxx.datamanager");          
logger.debug("Context Invoked !!");
}
return appContext;
}
}

@Configuration
@EnableAutoConfiguration
@PropertySource("classpath:db.properties")
@EnableTransactionManagement
@ComponentScans(value = {
        @ComponentScan(basePackages = "xxxxx.datamanager"),
        @ComponentScan(basePackages = "com.xx.xx.xxx"),
        @ComponentScan(basePackages = "com.xx.xx.xxx.utils")})

public class AppConfig {

    @Autowired
    private Environment env;

    @Bean
    public DataSource getDataSource() {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName(env.getProperty("db.driver"));
        dataSource.setUrl(env.getProperty("db.url"));
        return dataSource;
    }

    @Bean
    public LocalSessionFactoryBean getSessionFactory() {
        LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();
        //LocalSessionFactoryBean sessionFactoryBean = new AnnotationSessionFactoryBean();
        factoryBean.setDataSource(getDataSource());

        Properties props=new Properties();
        props.put("hibernate.show_sql", env.getProperty("hibernate.show_sql"));
        props.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
        props.put("hibernate.cache.region.factory_class", env.getProperty("hibernate.cache.region.factory_class"));


    factoryBean.setHibernateProperties(props);
    factoryBean.setAnnotatedClasses(xx.class, xxxx.class, xxxx.class, xxx.class);
    return factoryBean;


    }

    @Bean


    public HibernateTransactionManager getTransactionManager() {
            return transactionManager;


    }  
    }

// Here is NPE thrown when tried with auto-configured bean
    @Component
            public class Good extends Good11 {    
                @Autowired
                private RxxxDyyyyHelper rdh; 
                //RxxxDyyyyHelper rdh = 
    ContextHelper.getApplicationContext().getBean(RxxxDyyyyHelper .class);    
            rdh.setProperty(); // NPE here
            rdh.getProperty(); // NPE 

        }

// Here we're trying to initiate the LosUtils class
public class LosUtils {       
    public static void main(String args[]) throws Exception {
        AnnotationConfigApplicationContext applicationContext = `ContextHelper.getApplicationContext();`    
}

1 Ответ

0 голосов
/ 14 марта 2019

Похоже, вы не поместили здесь полный код, потому что ваш класс Good не будет компилироваться таким образом ..

...