日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

丢掉xml使用JavaConfig配置Spring

發(fā)布時(shí)間:2024/1/17 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 丢掉xml使用JavaConfig配置Spring 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Spring JavaConfig

最近擼了一遍Spring action 4,發(fā)現(xiàn)里面講的都不再使用xml文件來(lái)配置spring,全都采用Java代碼來(lái)配置.

用Java代碼配置的話(huà),感覺(jué)要比xml更便于維護(hù),而且用代碼肯定比xml更爽嘛

下面來(lái)一步步用JavaConfig搭一個(gè)Spring工程

那在用xml配置的時(shí)候,項(xiàng)目都是從加載web.xml文件再掃描到各種spring-*.xml文件

那不用xml文件,項(xiàng)目從哪里啟動(dòng)呢?

那就要靠這個(gè)類(lèi)了,AbstractAnnotationConfigDispatcherServletInitializer,這個(gè)就相當(dāng)于web.xml啦,在這里面可以配置上下文,DispatcherServlet,過(guò)濾器等等bean;

首先咱先創(chuàng)建一個(gè)類(lèi)SpittrWebAppInitialzer

package com.fireyao;import org.springframework.web.filter.CharacterEncodingFilter; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;import javax.servlet.Filter;public class SpittrWebAppInitialzer extends AbstractAnnotationConfigDispatcherServletInitializer {/*** 配置root上下文,如Jpa數(shù)據(jù)源等等的配置* @return*/@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[]{RootConfig.class};}/*** 配置dispatcher servlet* @return*/@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[]{WebConfig.class};}/*** 將DispatcherServlet映射到 "/"* 指定開(kāi)始被servlet處理的url,配置從/開(kāi)始 * @return*/@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}/*** 這里注冊(cè)的所有過(guò)濾器,都會(huì)映射到DispatcherServlet* 就是說(shuō)這里的過(guò)濾器過(guò)濾規(guī)則是 /** 所有的請(qǐng)求都會(huì)先到這里注冊(cè)的過(guò)濾器中** @return*/@Overrideprotected Filter[] getServletFilters() {return new Filter[]{new CharacterEncodingFilter("UTF-8", true)};} }復(fù)制代碼

在SpittrWebAppInitialzer類(lèi)里面加載了RootConfig和WebConfig兩個(gè)配置類(lèi),

再創(chuàng)建這兩個(gè)類(lèi)以及相關(guān)的配置(以下省略package和import)

RootConfig

/*** 相當(dāng)于applicationContext.xml*/ @Configuration @EnableTransactionManagement @EnableJpaRepositories(basePackages = {"com.fireyao.repository"},entityManagerFactoryRef = "entityManagerFactory",transactionManagerRef = "transactionManager") @PropertySource(value = {"classpath:db.properties", "classpath:hibernate.properties", "classpath:app.properties"}) @ComponentScan(basePackages = "com.fireyao",excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class)}) @EnableAspectJAutoProxy(proxyTargetClass = true) /*** proxyTargetClass = true ==> 使用cglib代理* proxyTargetClass = false(默認(rèn)) ==> 使用JDK代理*/ public class RootConfig {@Value(value = "${db.driver:org.postgresql.Driver}")private String DRIVERCLASSNAME;@Value("${db.username}")private String USERNAME;@Value("${db.password}")private String PASSWORD;@Value("${db.jdbcURL}")private String URL;@Value("${hibernate.hbm2dll.create_namespaces}")private String CREATE_NAMESPACES;@Value("${hibernate.hbm2ddl.auto}")private String HBM2DDL_AUTO;@Value("${hibernate.show_sql}")private String SHOW_SQL;@Value("${hibernate.format_sql}")private String FORMAT_SQL;@Value("${hibernate.generate_statistics}")private String GENERATE_STATISTICS;/*** 配置數(shù)據(jù)源*/@Bean(name = "dataSource")public DruidDataSource dataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(DRIVERCLASSNAME);dataSource.setUrl(URL);dataSource.setUsername(USERNAME);dataSource.setPassword(PASSWORD);/* 配置初始化大小、最小、最大*/dataSource.setInitialSize(5);dataSource.setMinIdle(5);dataSource.setMaxActive(20);/* 配置獲取連接等待超時(shí)的時(shí)間*/dataSource.setMaxWait(30000);/*配置間隔多久才進(jìn)行一次檢測(cè),檢測(cè)需要關(guān)閉的空閑連接,單位是毫秒*/dataSource.setTimeBetweenEvictionRunsMillis(60000);/*配置一個(gè)連接在池中最小生存的時(shí)間,單位是毫秒*/dataSource.setMinEvictableIdleTimeMillis(300000);/*申請(qǐng)連接的時(shí)候檢測(cè),如果空閑時(shí)間大于timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測(cè)連接是否有效*/dataSource.setTestWhileIdle(true);dataSource.setValidationQuery("select 1");return dataSource;}@Beanpublic HibernateJpaVendorAdapter hibernateJpaVendorAdapter() {return new HibernateJpaVendorAdapter();}@Bean(name = "entityManagerFactory")public LocalContainerEntityManagerFactoryBean entityManagerFactory(DruidDataSource dataSource,HibernateJpaVendorAdapter hibernateJpaVendorAdapter) {LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();entityManagerFactory.setDataSource(dataSource);entityManagerFactory.setJpaVendorAdapter(hibernateJpaVendorAdapter);entityManagerFactory.setPackagesToScan("com.fireyao.domain");/*指定JPA屬性;如Hibernate中指定是否顯示SQL的是否顯示、方言等*/Map<String, Object> jpaProp = new HashMap();jpaProp.put("hibernate.dialect", new PostgisDialect());jpaProp.put("hibernate.hbm2ddl.auto", HBM2DDL_AUTO);jpaProp.put("hibernate.show_sql", SHOW_SQL);jpaProp.put("hibernate.generate_statistics", GENERATE_STATISTICS);jpaProp.put("hibernate.format_sql", FORMAT_SQL);jpaProp.put("hibernate.hbm2dll.create_namespaces", CREATE_NAMESPACES);entityManagerFactory.setJpaPropertyMap(jpaProp);return entityManagerFactory;}/*** 事務(wù)管理器** @param entityManagerFactory* @return*/@Bean(name = "transactionManager")public JpaTransactionManager transactionManager(LocalContainerEntityManagerFactoryBean entityManagerFactory) {return new JpaTransactionManager(entityManagerFactory.getObject());} }復(fù)制代碼

WebConfig

/*** 相當(dāng)于springmvc-servlet.xml*/ @Configuration @EnableWebMvc//啟用spring mvc @ComponentScan(basePackages = "com.fireyao.controller") //啟用組件掃描 public class WebConfig extends WebMvcConfigurerAdapter {@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();FastJsonConfig fastJsonConfig = new FastJsonConfig();fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);//處理中文亂碼問(wèn)題List<MediaType> fastMediaTypes = new ArrayList<>();fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);fastConverter.setSupportedMediaTypes(fastMediaTypes);fastConverter.setFastJsonConfig(fastJsonConfig);converters.add(fastConverter);}/*** Thymeleaf視圖解析器** @param springTemplateEngine* @return*/@Beanpublic ThymeleafViewResolver viewResolver(SpringTemplateEngine springTemplateEngine) {ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();viewResolver.setTemplateEngine(springTemplateEngine);viewResolver.setCharacterEncoding("utf-8");return viewResolver;}/*** 模版引擎** @param iTemplateResolver* @return*/@Beanpublic SpringTemplateEngine templateEngine(ITemplateResolver iTemplateResolver) {SpringTemplateEngine templateEngine = new SpringTemplateEngine();templateEngine.setTemplateResolver(iTemplateResolver);return templateEngine;}/*** Thymeleaf3.0之后* Thymeleaf模版解析器** @return*/@Beanpublic ITemplateResolver iTemplateResolver() {SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();templateResolver.setTemplateMode("HTML5");templateResolver.setPrefix("/WEB-INF/templates/");templateResolver.setSuffix(".html");templateResolver.setTemplateMode("HTML");templateResolver.setCharacterEncoding("utf-8");templateResolver.setCacheable(false);return templateResolver;}/*** Thymeleaf3.0之前* Thymeleaf模版解析器* @return*//* @Beanpublic TemplateResolver templateResolver() {TemplateResolver resolver = new ServletContextTemplateResolver();resolver.setPrefix("/WEB-INF/VIEWS/");resolver.setSuffix(".html");resolver.setTemplateMode("HTML5");resolver.setCacheable(false);return resolver;}*//*** 配置靜態(tài)資源的處理* 要求DispatcherServlet將對(duì)靜態(tài)資源的請(qǐng)求轉(zhuǎn)發(fā)到Servlet容器中默認(rèn)的Servlet上* 而不是使用DispatcherServlet本身來(lái)處理此類(lèi)請(qǐng)求。** @param configurer*/@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}/*** 配置視圖解析器* ==> JSP視圖** @return*//*@Beanpublic ViewResolver viewResolver() {InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".jsp");resolver.setExposeContextBeansAsAttributes(true);return resolver;}*/ }復(fù)制代碼

@Configuration 標(biāo)注為配置類(lèi)

@EnableTransactionManagement注解開(kāi)啟注解式事務(wù)的支持。

@EnableJpaRepositories注解開(kāi)啟對(duì)Spring Data JPA Repostory的支持

@PropertySource 掃面db.properties等配置文件,可以用@Value注解取到properties中的值

@ComponentScan 配置掃描類(lèi)包 相當(dāng)于<context:component-scan base-package="com.fireyao"/>

@EnableAspectJAutoProxy 表示開(kāi)啟AOP代理自動(dòng)配置

@EnableAspectJAutoProxy中proxyTargetClass屬性
? proxyTargetClass = true ==> 使用cglib代理
? proxyTargetClass = false(默認(rèn)) ==> 使用JDK代理

那spring最基本的JavaConfig就這樣了.

是不是看上去很舒服,果然還是要用Java代碼才爽.

原文鏈接:丟掉xml使用JavaConfig配置Spring | 火堯


作者:火堯
鏈接:https://juejin.im/post/59ddc6626fb9a0452404cd06
來(lái)源:掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

總結(jié)

以上是生活随笔為你收集整理的丢掉xml使用JavaConfig配置Spring的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。