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