Spring -- 杂记

文件下载:

一、Bean 的初始化过程前后执行的方法:<两种实现方式>

public class MyBeanInit01 {

    public MyBeanInit01() {
        System.out.println("MyBeanInit01 -- 构造方法执行...");
    }
    
    public void init() {
        System.out.println("MyBeanInit01 -- init方法执行...");
    }
    
    public void distory() {
        System.out.println("MyBeanInit01 -- distory方法执行...");
    }
}

public class MyBeanInit2 {

    public MyBeanInit2() {
        System.out.println("MyBeanInit2 -- 构造方法执行...");
    }
    
    @PostConstruct //构造函数执行完之后执行
    public void init() {
        System.out.println("MyBeanInit2 -- init方法执行...");
    }
    
    @PreDestroy  //Bean销毁之后执行
    public void distory() {
        System.out.println("MyBeanInit2 -- distory方法执行...");
    }
}

//测试

@Configuration
public class BeanConfig {
    
    // init -- 构造函数执行之后执行
    @Bean(initMethod="init",destroyMethod="distory")
    public MyBeanInit01 myBeanInit01() {
        return new MyBeanInit01();
    }
    
    @Bean
    public MyBeanInit2 myBeanInit2() {
        return new MyBeanInit2();
    }
}

二、Spring Aware

1、BeanNameAware : 获得容器中Bean的名称;

2、ResourceLoaderAware :获得资源加载器,可以获得外部资源文件。

示例:必须重载两个set方法。

@Service
public class UserService implements BeanNameAware,ResourceLoaderAware{

    private String beanName;
    
    private ResourceLoader loader;
    
    @Override
    public void setResourceLoader(ResourceLoader resourceLoader) {
        this.loader = resourceLoader;
    }

    @Override
    public void setBeanName(String name) {
        this.beanName = name;
    }
    
    public String myAware() throws IOException {
        System.out.println("当前 Bean的name为:=="+beanName);
        Resource resource = loader.getResource("classpath:myProperties.properties");
        InputStream is = resource.getInputStream();
        String result = IOUtils.toString(is);
        return result;
    }

}

三、Spring 单元测试

@Configuration
public class TestConfig{
    
    @Bean
    @Profile("dev")
    public TestBean devTestBean(){
        return new TestBean("from development profile");
    }

    @Bean
    @Profile("prod")
    public TestBean prodTestBean(){
        return new TestBean("from production profile");
    }
}


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestConfig.class})
@ActiveProfiles("prod")
public class DemoBeanIntegrationTests{
    @Autowired
    private TestBean testBean

    @Test
    public void prodBeanShouldInject(){
        String expected = "from production profile";
        String actual = testBean.getContent();
        Assert.assertEquals(expected,actual);
    }
}

四、计划任务

1、配置类上 加 @EnableScheduling -- 开启任务支持;

2、执行计划任务的方法上加 @Scheduled(包括:cron、fixDelay、fixRate等)。 

五、添加拦截器:

1、普通的 Bean 实现 HanlderInterceptor 接口或者继承 HandlerInterceptorAdapter 类来自定义拦截器。

@Component
public class InterceptorService extends HandlerInterceptorAdapter{

    @Override //在请求发生前执行
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        Long startTime = System.currentTimeMillis();
        request.setAttribute("startTime", startTime);
        return true;
    }

    @Override //在请求完成后执行
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        Long startTime = (Long) request.getAttribute("startTime");
        request.removeAttribute("startTime");
        Long endTime = System.currentTimeMillis();
        request.setAttribute("handlingTime", endTime - startTime);
        System.out.println("本次请求耗时为: "+(endTime - startTime)+" 毫秒。");
    }
}

2、MVC的配置类中 重写 addInterceptors 方法

/**
 * @EnableWebMvc -- 启用SpringMVC的组件
 * 相当于 xml配置文件的  <mvc:annotation-driven>
 * 1、启用组件扫描
 * @author fmr
 */
@Configuration
@ComponentScan("com")
@EnableWebMvc
public class DispatcherConfig extends WebMvcConfigurerAdapter {

    /**
     * 2、配置视图解析器
     * @return
     */
    @Bean
    public InternalResourceViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
        internalResourceViewResolver.setViewClass(JstlView.class);
        internalResourceViewResolver.setPrefix("/WEB-INF/jsp/");
        internalResourceViewResolver.setSuffix(".jsp");
        return internalResourceViewResolver;
    }

    /**
     * 设置统一错误处理要跳转的视图
     * @return
     */
    @Bean
    public SimpleMappingExceptionResolver simpleMappingExceptionResolver() {
        SimpleMappingExceptionResolver simpleMappingExceptionResolver = new SimpleMappingExceptionResolver();
        Properties properties = new Properties();
        properties.getProperty("java.lang.Exception", "error");
        simpleMappingExceptionResolver.setExceptionMappings(properties);
        return simpleMappingExceptionResolver;
    }

    /**
     * 3、添加静态资源
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/view/**")
                .addResourceLocations("/view/", "classpath:/view/")
                .setCachePeriod(360000);
    }

    4、自定义拦截器

   @Override
       public void addInterceptors(InterceptorRegistry registry) {
           registry.addInterceptor(new InterceptorService());
      }
    
}

六、文件上传的配置类

@Bean
    public MultipartResolver multipartResolver() {
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
        multipartResolver.setMaxUploadSize(1000000);
        return multipartResolver;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值