Spring的纯注解配置

一、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};
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值