一、Spring注解
我们发现,之所以我们现在离不开xml配置文件,是因为我们有一处很关键的配置,如果他要也能用注解配置,那么我们就可以脱离xml文件了:
1.1、@PropertySource(" ")
作用:
加载*properties,等价于<context:property-placeholder location=" ">
属性:
value:指定*.properties文件的位置
1.2、@Bean
作用:
创建对象并交给Spring的ioc容器里,等价于<bean />
属性:
value:指定IOC容器的key,等价于<bean id=" "/>
1.3、@ComponentScan
作用:
指定spring要扫描的包,等价于<context:component-scan/>
属性:
value:指定扫描的包
1.4、@Configuration
作用:
标识当前类是一个配置类,配置类等价于applicationContext.xml
1.5、@Import
作用:
导入配置类,等价于<import resource=""/>
属性:
value:配置类的字节码
二、Spring纯注解配置
2.1、JdbcConfig
package com.by.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;
import javax.sql.DataSource;
//用于加载*.properties文件中的配置。作用和在spring的xml配置文件中的:`<context:property-placeholder location="">`是一样的。
@PropertySource("classpath:db.properties")
public class JdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean("datasource")
// <!--配置数据源-->
public DataSource getDatasource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
2.2、MyBatisConfig
package com.by.config;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
public class MyBatisConfig {
@Bean//Value不赋值 使用方法名作为IOC容器的key
public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean;
}
//<!--配置MyBatis下扫描的包-->
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(){
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setBasePackage("com.by.mapper");
mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactoryBean");
return mapperScannerConfigurer;
}
}
2.3、ServiceConfig
package com.by.config;
import org.springframework.context.annotation.ComponentScan;
//<!--扫描service下的类 使其注入spring IOC容器中-->
@ComponentScan("com.by.service")
public class ServiceConfig {
}
2.4、TxConfig
事务配置类
package com.by.config;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
@EnableTransactionManagement
public class TxConfig {
@Bean
public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource){ //<!--配置事务管理器-->
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
dataSourceTransactionManager.setDataSource(dataSource);
return dataSourceTransactionManager;
}
}
2.5、SpringConfig
package com.by.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration//相当于applicationContext.xml
//@Import注解是用来导入配置类或者一些需要前置加载的类。作用和在spring的xml配置文件中的:`<import resource=""></import>`是一样.
@Import({JdbcConfig.class, MyBatisConfig.class, ServiceConfig.class, TxConfig.class})//相当于<import resource="">
public class SpringConfig {
}
2.6、SpringMVCConfig
package com.by.config;
import com.by.converter.DateConverter;
import com.by.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@ComponentScan("com.by.controller")
@EnableWebMvc// 等同<mvc:annotation-driven></mvc:annotation-driven>
public class SpringMVCConfig implements WebMvcConfigurer {
// <!--配置视图解析器-->
@Bean
public InternalResourceViewResolver internalResourceViewResolver(){
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/pages/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
//<!--配置上传解析器-->
@Bean
public CommonsMultipartResolver commonsMultipartResolver(){
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
//配置最大byte
multipartResolver.setMaxUploadSize(5242880);
//编码格式
multipartResolver.setDefaultEncoding("UTF-8");
return multipartResolver;
}
//配置转换器
@Override
public void addFormatters(FormatterRegistry registry) {
//要添加的日期转换器
registry.addConverter(new DateConverter());
}
//配置拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
//addPathPatterns要拦截的路径 excludePathPatterns允许的路径
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/user/**");
}
//<!--配置静态资源访问路径和位置-->
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/head/**").addResourceLocations("/head/");
}
}
2.7、WebConfig
package com.by.config;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import javax.servlet.Filter;
public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
//加载applicationContext.xml
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
//加载springmvc.xml
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMVCConfig.class};
}
//加载dispatchServlet匹配的url
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
//过滤器设置编码格式
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
return new Filter[]{filter};
}
}