I started to dive into Spring Boot and decided to write an educational project called "Library" with technologies such as Spring Boot, Spring Jdbc and Spring Shell. When the application starts, the following error occurs:
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2019-03-10 22:04:49.770 ERROR 5049 --- [ main] osboot.SpringApplication : Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'libraryCommandLine' defined in file [/Users/mac/Developer/otus_spring/otus_spring4/target/classes/ru/evgeny/otus_spring4/servise/LibraryCommandLine.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shellLibraryService' defined in file [/Users/mac/Developer/otus_spring/otus_spring4/target/classes/ru/evgeny/otus_spring4/servise/impl/ShellLibraryService.class]: Instantiation of bean failed; nested exception is java.lang.ExceptionInInitializerError at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:769) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:218) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1325) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1171) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:849) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE] at ru.evgeny.otus_spring4.Application.main(Application.java:31) [classes/:na] Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shellLibraryService' defined in file [/Users/mac/Developer/otus_spring/otus_spring4/target/classes/ru/evgeny/otus_spring4/servise/impl/ShellLibraryService.class]: Instantiation of bean failed; nested exception is java.lang.ExceptionInInitializerError at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1287) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1181) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1247) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1167) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:857) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:760) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] ... 18 common frames omitted Caused by: java.lang.ExceptionInInitializerError: null at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_161] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_161] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_161] at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_161] at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:172) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1279) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] ... 30 common frames omitted Caused by: java.lang.NullPointerException: null at ru.evgeny.otus_spring4.servise.impl.ShellLibraryService$1.<init>(ShellLibraryService.java:123) ~[classes/:na] at ru.evgeny.otus_spring4.servise.impl.ShellLibraryService.<clinit>(ShellLibraryService.java:122) ~[classes/:na] ... 37 common frames omitted Process finished with exit code 1
I can not understand why Spring can not create ShellLibraryService ??? Here is the code for the main classes, and the whole application is at https://github.com/evgenyrybishew/otus-spring/tree/master/otus_spring4
Application:
@SpringBootApplication @EnableConfigurationProperties(ApplicationConfiguration.class) public class Application { @Bean @Autowired public JdbcOperations jdbcOperations(LoadDbSettings settings) { DriverManagerDataSource ds = new DriverManagerDataSource(); ds.setUrl(settings.getDbUrl()); ds.setDriverClassName(settings.getDbDriver()); ds.setUsername(settings.getDbUser()); return new JdbcTemplate(ds); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
ShellLibraryService:
@Service public class ShellLibraryService implements IShellDataBaseServise { private AuthorDao authorDao; private BookDao bookDao; private GenreDao genreDao; private PublisherDao publisherDao; @Autowired public ShellLibraryService(AuthorDao authorDao, BookDao bookDao, GenreDao genreDao, PublisherDao publisherDao) { this.authorDao = authorDao; this.bookDao = bookDao; this.genreDao = genreDao; this.publisherDao = publisherDao; } @Override public void initTables() { initAllTables(); fillGenreTable(); fillAuthorTable(); fillPublisherTable(); fillBookTable(); } //continue -> https://github.com/evgenyrybishew/otus-spring/tree/master/otus_spring4
LibraryCommandLine:
@ShellComponent public class LibraryCommandLine { private IShellDataBaseServise cli; @Autowired public LibraryCommandLine(IShellDataBaseServise cli) { this.cli = cli; } @ShellMethod("Start") public void start() { cli.initTables(); } @ShellMethod("Search book by autor's name") public void searchn(@ShellOption String name) { cli.searchBookByAuthorName(name); } @ShellMethod("Search book by autor's lastname") public void searchl(@ShellOption String name) { cli.searchBookByAuthorLastName(name); } @ShellMethod("Search book by name") public void searchb(@ShellOption String name) { cli.searchBookByName(name); } @ShellMethod("Search book by publisher's name") public void searchp(@ShellOption String name) { cli.searchBookByPublisher(name); } }