項目目錄結構java
從Spring3.0,@Configuration用於定義配置類,可替換xml配置文件,被註解的類內部包含有一個或多個被@Bean註解的方法,git
這些方法將會被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext類進行掃描,github
並用於構建bean定義,初始化Spring容器 web
WebApplicationInitializer.javaspring
package javaConfiguration; import javaConfiguration.RootConfig; import javaConfiguration.WebConfig; import org.springframework.web.filter.CharacterEncodingFilter; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; import javax.servlet.Filter; import java.util.logging.Logger; /* * Spring Mvc的配置 *createDate: 2018年12月21日 * author: dz * */ public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { private final static Logger LOG = Logger.getLogger(String.valueOf(WebAppInitializer.class)); @Override protected Class<?>[] getRootConfigClasses() { LOG.info("root配置類初始化"); return new Class<?>[]{RootConfig.class}; } @Override protected Class<?>[] getServletConfigClasses() { LOG.info("------web配置類初始化------"); return new Class<?>[]{WebConfig.class}; } @Override protected String[] getServletMappings() { LOG.info("------映射根路徑初始化------"); return new String[]{"/"};//請求路徑映射,根路徑 } @Override protected Filter[] getServletFilters() { LOG.info("-----編碼過濾配置-------"); CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter("UTF-8"); return new Filter[]{encodingFilter}; } }
WebConfig.javasql
package javaConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.validation.Validator; import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ViewResolverRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** *<p>Title: WebConfig.java</p> *<p>Description: 配置類,用於定義DispatcherServlet上下文的bean</p> *<p>CreateDate: 2018年12月20日</p> *@author dz */ @Configuration @EnableWebMvc @EnableAspectJAutoProxy @ComponentScan(basePackages = "com.dznfit.controller") public class WebConfig implements WebMvcConfigurer{ @Override public void configureViewResolvers(ViewResolverRegistry registry) { registry.jsp("/WEB-INF/view/",".jsp"); } }
這是對應spring-mvc.xml的部分
@Configuration及其下的@bean(好比註冊了JSP的視圖解析器的bean等springmvc常配置的bean) spring-mvc
Configuration註解就是告訴Spring這個是一個配置文件類,這裏配置的Bean要交給Spring去管理
@ComponentScan("com.dznfit.controller") //至關於<context:component-scan base-package="com.dznfit.controller" mybatis
配合@Controller註冊Controller的bean
@EnableWebMvc //至關於 <mvc:annotation-driven/> 啓用Spring MVC支持
至此spring-mvc.xml徹底被代替。mvc
RootConfig.javaapp
package javaConfiguration; import javaConfiguration.root.MybatisConfig; import javaConfiguration.root.ShiroConfig; import org.springframework.context.annotation.*; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; /** *<p>Title: RootConfig.java</p> *<p>Description: 配置類,用於管理ContextLoadListener建立的上下文的bean</p> *<p>CreateDate: 2018年12月20日</p> *@author dz */ @Configuration @ComponentScan(basePackages = {"com.dznfit.service"}) @PropertySource("classpath:jdbc.properties") @Import({MybatisConfig.class, ShiroConfig.class}) public class RootConfig { @Bean public static PropertySourcesPlaceholderConfigurer sourcesPlaceholderConfigurer() { return new PropertySourcesPlaceholderConfigurer(); } }
MybatisConfig.java
package javaConfiguration.root; import com.mchange.v2.c3p0.ComboPooledDataSource; import com.mchange.v2.c3p0.DataSources; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.sql.DataSource; import java.beans.PropertyVetoException; import java.io.IOException; /** *<p>Title: DruidDataSourceConfig.java</p> *<p>Description: 數據源屬性配置</p> *<p>CreateDate: 2018年12月20日</p> *@author dz */ @Configuration @MapperScan(basePackages = "com.dznfit.dao") @EnableTransactionManagement public class MybatisConfig { @Value("${driver}") private String driver; @Value("${url}") private String url; @Value("${name}") private String user; @Value("${password}") private String password; @Autowired private Environment environment; @Bean("dataSource") public DataSource dataSourceConfig() throws PropertyVetoException { // 使用c3p0 ComboPooledDataSource source = new ComboPooledDataSource(); source.setDriverClass(driver); source.setJdbcUrl(url); source.setUser(user); source.setPassword(password); return source; } @Bean("sqlSessionFactoryBean") public SqlSessionFactoryBean sqlSessionFactoryBeanConfig() throws PropertyVetoException, IOException { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(this.dataSourceConfig()); factoryBean.setTypeAliasesPackage("com.dznfit.entity"); factoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml")); PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); factoryBean.setMapperLocations(resolver.getResources("Mapper/*.xml")); return factoryBean; } @Bean("transactionManager") public DataSourceTransactionManager dataSourceTransactionManagerConfig() throws PropertyVetoException { DataSourceTransactionManager manager = new DataSourceTransactionManager(); manager.setDataSource(this.dataSourceConfig()); return manager; } }
ShiroConfig.java
package javaConfiguration.root; import org.springframework.context.annotation.Configuration; @Configuration public class ShiroConfig { }
這部分至關於spring-*.xml中管理的經常使用dao(mapper)、Service
@Configuration標記這是一個配置類
@ComponentScan配合@Repository、 @Service註冊dao和Service的bean
@MapperScan("com.dznfit.service")
@MapperScan("com.dznfit.dao")
//Mybatis mapper.class的位置至關MapperScannerConfigurer 的bean
若是用的是mybatis的話,用@MapperScan註冊mapper的bean
爲了方便管理增長靈活性把它們分開不一樣的類來註冊,使用@Import引入
@Import({MybatisConfig.class, ShiroConfig.class})
@Configuration及其下的@bean(好比註冊了DataSource和sqlSessionFactory等的bean)
Configuration註解就是告訴Spring這個是一個配置文件類,這裏配置的Bean要交給Spring去管理
@EnableTransactionManagement 至關於<tx:annotation-driven />
此文章參考:javaConfiguration
源碼下載:dznf147
告辭...