{"id":18691,"date":"2013-11-05T22:00:45","date_gmt":"2013-11-05T20:00:45","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/?p=18691"},"modified":"2013-11-05T08:44:49","modified_gmt":"2013-11-05T06:44:49","slug":"spring-make-your-java-based-configuration-more-elegant","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2013\/11\/spring-make-your-java-based-configuration-more-elegant.html","title":{"rendered":"Spring: Make your java-based configuration more elegant"},"content":{"rendered":"<p>Hi everyone, I haven\u2019t written new articles a long period of time. A lot of materials were accumulated which need to be posted in my blog in nearest future. But now I want to talk about Spring MVC application configurations. If to be more precisely, I want to talk about java based Spring configurations.<\/p>\n<p>Despite that Spring java based configuration was introduced in 3.0 version, many developers still use XML-based approach. Personally I use annotation based configurations, because they are more convenient in management, in development and in maintenance. If you have read my blog before you could noticed that in all code examples I used exactly java based configurations.<\/p>\n<p>Not so long time ago I have made a code review of one my project. I noticed that something is wrong with a structure of the configurations. Two aspects were bad as for me:<\/p>\n<ul>\n<li>All beans were configured in a single class<\/li>\n<li>Initialization on web app context was too complex<\/li>\n<\/ul>\n<p>You can witness these two drawbacks in all my examples of Spring MVC applications. For example you can open one of my last tutorials about <a title=\"Spring MVC: REST application with CNVR vol. 1\" href=\"http:\/\/fruzenshtein.com\/spring-mvc-rest-cnvr-1\/\">Spring REST services with CNVR<\/a>. Take a look there on two classes: <em>WebAppConfig<\/em> and <em>Initializer<\/em>.<\/p>\n<h2>WebAppConfig<\/h2>\n<p>The first one represents the first point in this article. Definitely I need to do something to split beans configuration logically. To resolve this issue I decided to make two steps:<\/p>\n<ol>\n<li>Move DB configurations in a separate class\n<pre class=\"brush:java; wrap-lines:false;\">@Configuration\r\n@EnableTransactionManagement\r\n@EnableJpaRepositories(\"com.mobapp.repository\")\r\npublic class DataBaseConfig {\r\n\r\n    private static final String PROPERTY_NAME_DATABASE_DRIVER = \"db.driver\";\r\n    private static final String PROPERTY_NAME_DATABASE_PASSWORD = \"db.password\";\r\n    private static final String PROPERTY_NAME_DATABASE_URL = \"db.url\";\r\n    private static final String PROPERTY_NAME_DATABASE_USERNAME = \"db.username\";\r\n\r\n    private static final String PROPERTY_NAME_HIBERNATE_DIALECT = \"hibernate.dialect\";\r\n    private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = \"hibernate.show_sql\";\r\n    private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = \"entitymanager.packages.to.scan\";\r\n\r\n        @Resource\r\n        private Environment env;\r\n\r\n        @Bean\r\n        public DataSource dataSource() {\r\n                DriverManagerDataSource dataSource = new DriverManagerDataSource();\r\n\r\n                dataSource.setDriverClassName(env.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));\r\n                dataSource.setUrl(env.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));\r\n                dataSource.setUsername(env.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));\r\n                dataSource.setPassword(env.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));\r\n\r\n                return dataSource;\r\n        }\r\n\r\n        @Bean\r\n        public LocalContainerEntityManagerFactoryBean entityManagerFactory() {\r\n                LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();\r\n                entityManagerFactoryBean.setDataSource(dataSource());\r\n                entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistence.class);\r\n                entityManagerFactoryBean.setPackagesToScan(env.getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN));\r\n\r\n                entityManagerFactoryBean.setJpaProperties(hibProperties());\r\n\r\n                return entityManagerFactoryBean;\r\n        }\r\n\r\n        private Properties hibProperties() {\r\n                Properties properties = new Properties();\r\n                properties.put(PROPERTY_NAME_HIBERNATE_DIALECT, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT));\r\n                properties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL));\r\n                return properties;        \r\n        }\r\n\r\n        @Bean\r\n        public JpaTransactionManager transactionManager() {\r\n                JpaTransactionManager transactionManager = new JpaTransactionManager();\r\n                transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());\r\n                return transactionManager;\r\n        }\r\n\r\n}<\/pre>\n<\/li>\n<li>Convert <em>WebAppConfig<\/em> class in a main configuration class and assign to it the rest of configuration (in current case it would be just <em>DataBaseConfig<\/em> class) classes via <a title=\"Spring @import annotation\" href=\"http:\/\/docs.spring.io\/spring\/docs\/3.2.x\/javadoc-api\/org\/springframework\/context\/annotation\/Import.html\" target=\"_blank\">@Import<\/a> annotation.\n<pre class=\"brush:java; wrap-lines:false;\">@Configuration\r\n@EnableWebMvc\r\n@Import({DataBaseConfig.class})\r\n@ComponentScan(\"com.mobapp\")\r\n@PropertySource(\"classpath:application.properties\")\r\npublic class WebAppConfig extends WebMvcConfigurerAdapter {\r\n\r\n        @Resource\r\n        private Environment env;\r\n\r\n        @Override\r\n        public void addResourceHandlers(ResourceHandlerRegistry registry) {\r\n                registry.addResourceHandler(\"\/resources\/**\").addResourceLocations(\"\/resources\/\");\r\n        }\r\n\r\n        @Override\r\n        public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {\r\n                configurer.favorPathExtension(true)\r\n                        .useJaf(false)\r\n                        .ignoreAcceptHeader(true)\r\n                        .mediaType(\"html\", MediaType.TEXT_HTML)\r\n                        .mediaType(\"json\", MediaType.APPLICATION_JSON)\r\n                        .defaultContentType(MediaType.TEXT_HTML);\r\n        }\r\n\r\n        @Bean\r\n        public ViewResolver contentNegotiatingViewResolver(\r\n                        ContentNegotiationManager manager) {\r\n\r\n                List&lt; ViewResolver &gt; resolvers = new ArrayList&lt; ViewResolver &gt;();\r\n\r\n                InternalResourceViewResolver r1 = new InternalResourceViewResolver();\r\n                r1.setPrefix(\"\/WEB-INF\/pages\/\");\r\n                r1.setSuffix(\".jsp\");\r\n                r1.setViewClass(JstlView.class);\r\n                resolvers.add(r1);\r\n\r\n                JsonViewResolver r2 = new JsonViewResolver();\r\n                resolvers.add(r2);\r\n\r\n                ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver();\r\n                resolver.setViewResolvers(resolvers);\r\n                resolver.setContentNegotiationManager(manager);\r\n         return resolver;\r\n\r\n        }\r\n\r\n        \/**\r\n        * View resolver for returning JSON in a view-based system. Always returns a\r\n        * {@link MappingJacksonJsonView}.\r\n        *\/\r\n        public class JsonViewResolver implements ViewResolver {\r\n                public View resolveViewName(String viewName, Locale locale)\r\n                                throws Exception {\r\n                                MappingJacksonJsonView view = new MappingJacksonJsonView();\r\n                                view.setPrettyPrint(true);\r\n                                return view;\r\n                }\r\n        }\r\n\r\n}<\/pre>\n<p>In this way you can separate single big configuration class in several smaller which will contain specific configs for them.<\/li>\n<\/ol>\n<h2>Initializer<\/h2>\n<p>Code of <em>Initializer<\/em> class is too verbose in the example which I mentioned above and provided the link to it. I registered there the web application root configurations, mapping and filter. How I can decrease a number of code lines? The answer I got looking on <a href=\"http:\/\/docs.spring.io\/spring\/docs\/3.2.0.BUILD-SNAPSHOT\/api\/org\/springframework\/web\/servlet\/support\/AbstractAnnotationConfigDispatcherServletInitializer.html\" target=\"_blank\">AbstractAnnotationConfigDispatcherServletInitializer<\/a> class. Look on the class and you will notice that it implements <em>WebApplicationInitializer<\/em> interface, which I have implmented in my previous version of the Initializer class. So here is a new version of the <em>Initializer<\/em>:<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<pre class=\"brush:java; wrap-lines:false;\">public class Initializer extends AbstractAnnotationConfigDispatcherServletInitializer {\r\n\r\n        @Override\r\n        protected Class&lt; ? &gt;[] getRootConfigClasses() {\r\n                return null;\r\n        }\r\n\r\n        @Override\r\n        protected Class&lt; ? &gt;[] getServletConfigClasses() {\r\n                return new Class&lt; ? &gt;[] { WebAppConfig.class };\r\n        }\r\n\r\n        @Override\r\n        protected String[] getServletMappings() {\r\n                return new String[] { \"\/\" };\r\n        }\r\n\r\n        @Override\r\n        protected Filter[] getServletFilters() {\r\n                return new Filter[] { new HiddenHttpMethodFilter() };\r\n        }\r\n\r\n}<\/pre>\n<p>Thank to these two steps I have made my configurations for Spring MVC application more elegant. Now you can do it too. Good luck<br \/>\n&nbsp;<\/p>\n<div style=\"border: 1px solid #D8D8D8; background: #FAFAFA; width: 100%; padding-left: 5px;\"><b><i>Reference: <\/i><\/b><a href=\"http:\/\/fruzenshtein.com\/spring-java-configurations\/\">Spring: Make your java-based configuration more elegant<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/jcg\">JCG partner<\/a> Alexey Zvolinskiy at the <a href=\"http:\/\/fruzenshtein.com\/\">Fruzenshtein&#8217;s notes<\/a> blog.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Hi everyone, I haven\u2019t written new articles a long period of time. A lot of materials were accumulated which need to be posted in my blog in nearest future. But now I want to talk about Spring MVC application configurations. If to be more precisely, I want to talk about java based Spring configurations. Despite &hellip;<\/p>\n","protected":false},"author":374,"featured_media":240,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[30],"class_list":["post-18691","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-spring"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Spring: Make your java-based configuration more elegant<\/title>\n<meta name=\"description\" content=\"Hi everyone, I haven\u2019t written new articles a long period of time. A lot of materials were accumulated which need to be posted in my blog in nearest\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2013\/11\/spring-make-your-java-based-configuration-more-elegant.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring: Make your java-based configuration more elegant\" \/>\n<meta property=\"og:description\" content=\"Hi everyone, I haven\u2019t written new articles a long period of time. A lot of materials were accumulated which need to be posted in my blog in nearest\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2013\/11\/spring-make-your-java-based-configuration-more-elegant.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2013-11-05T20:00:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Alexey Zvolinskiy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alexey Zvolinskiy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/spring-make-your-java-based-configuration-more-elegant.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/spring-make-your-java-based-configuration-more-elegant.html\"},\"author\":{\"name\":\"Alexey Zvolinskiy\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/ac87395bf8afb0ae3515feb6a0f36d02\"},\"headline\":\"Spring: Make your java-based configuration more elegant\",\"datePublished\":\"2013-11-05T20:00:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/spring-make-your-java-based-configuration-more-elegant.html\"},\"wordCount\":423,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/spring-make-your-java-based-configuration-more-elegant.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"keywords\":[\"Spring\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/spring-make-your-java-based-configuration-more-elegant.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/spring-make-your-java-based-configuration-more-elegant.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/spring-make-your-java-based-configuration-more-elegant.html\",\"name\":\"Spring: Make your java-based configuration more elegant\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/spring-make-your-java-based-configuration-more-elegant.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/spring-make-your-java-based-configuration-more-elegant.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"datePublished\":\"2013-11-05T20:00:45+00:00\",\"description\":\"Hi everyone, I haven\u2019t written new articles a long period of time. A lot of materials were accumulated which need to be posted in my blog in nearest\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/spring-make-your-java-based-configuration-more-elegant.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/spring-make-your-java-based-configuration-more-elegant.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/spring-make-your-java-based-configuration-more-elegant.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"width\":150,\"height\":150,\"caption\":\"spring-interview-questions-answers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/spring-make-your-java-based-configuration-more-elegant.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Spring: Make your java-based configuration more elegant\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/ac87395bf8afb0ae3515feb6a0f36d02\",\"name\":\"Alexey Zvolinskiy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/082c897ff3a223afa16dedb5c6638b8b7caef162b241379e9c755b70aed186f5?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/082c897ff3a223afa16dedb5c6638b8b7caef162b241379e9c755b70aed186f5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/082c897ff3a223afa16dedb5c6638b8b7caef162b241379e9c755b70aed186f5?s=96&d=mm&r=g\",\"caption\":\"Alexey Zvolinskiy\"},\"description\":\"Alexey is a test developer with solid experience in automation of web-applications using Java, TestNG and Selenium. He is so much into QA that even after work he provides training courses for junior QA engineers.\",\"sameAs\":[\"http:\\\/\\\/fruzenshtein.com\\\/\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/alexey-zvolinskiy\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spring: Make your java-based configuration more elegant","description":"Hi everyone, I haven\u2019t written new articles a long period of time. A lot of materials were accumulated which need to be posted in my blog in nearest","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2013\/11\/spring-make-your-java-based-configuration-more-elegant.html","og_locale":"en_US","og_type":"article","og_title":"Spring: Make your java-based configuration more elegant","og_description":"Hi everyone, I haven\u2019t written new articles a long period of time. A lot of materials were accumulated which need to be posted in my blog in nearest","og_url":"https:\/\/www.javacodegeeks.com\/2013\/11\/spring-make-your-java-based-configuration-more-elegant.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2013-11-05T20:00:45+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","type":"image\/jpeg"}],"author":"Alexey Zvolinskiy","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Alexey Zvolinskiy","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/spring-make-your-java-based-configuration-more-elegant.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/spring-make-your-java-based-configuration-more-elegant.html"},"author":{"name":"Alexey Zvolinskiy","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/ac87395bf8afb0ae3515feb6a0f36d02"},"headline":"Spring: Make your java-based configuration more elegant","datePublished":"2013-11-05T20:00:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/spring-make-your-java-based-configuration-more-elegant.html"},"wordCount":423,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/spring-make-your-java-based-configuration-more-elegant.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","keywords":["Spring"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2013\/11\/spring-make-your-java-based-configuration-more-elegant.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/spring-make-your-java-based-configuration-more-elegant.html","url":"https:\/\/www.javacodegeeks.com\/2013\/11\/spring-make-your-java-based-configuration-more-elegant.html","name":"Spring: Make your java-based configuration more elegant","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/spring-make-your-java-based-configuration-more-elegant.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/spring-make-your-java-based-configuration-more-elegant.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","datePublished":"2013-11-05T20:00:45+00:00","description":"Hi everyone, I haven\u2019t written new articles a long period of time. A lot of materials were accumulated which need to be posted in my blog in nearest","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/spring-make-your-java-based-configuration-more-elegant.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2013\/11\/spring-make-your-java-based-configuration-more-elegant.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/spring-make-your-java-based-configuration-more-elegant.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","width":150,"height":150,"caption":"spring-interview-questions-answers"},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/spring-make-your-java-based-configuration-more-elegant.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Spring: Make your java-based configuration more elegant"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/ac87395bf8afb0ae3515feb6a0f36d02","name":"Alexey Zvolinskiy","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/082c897ff3a223afa16dedb5c6638b8b7caef162b241379e9c755b70aed186f5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/082c897ff3a223afa16dedb5c6638b8b7caef162b241379e9c755b70aed186f5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/082c897ff3a223afa16dedb5c6638b8b7caef162b241379e9c755b70aed186f5?s=96&d=mm&r=g","caption":"Alexey Zvolinskiy"},"description":"Alexey is a test developer with solid experience in automation of web-applications using Java, TestNG and Selenium. He is so much into QA that even after work he provides training courses for junior QA engineers.","sameAs":["http:\/\/fruzenshtein.com\/"],"url":"https:\/\/www.javacodegeeks.com\/author\/alexey-zvolinskiy"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/18691","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/374"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=18691"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/18691\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/240"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=18691"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=18691"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=18691"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}