Spring基础
Spring的发展
xml配置 注解配置 Java配置
Spring模块:核心容器 AOP 消息 web 数据访问集成
常用的:@Component @Service @Repository @Controller @Configuration @Bean
AOP
相关注解
@EnableAspectJAutoProxy @Aspect @PoinCut @After @Before @BeforeThrowing @AtferThrowing @Around
切入点定义
execution(* com..*.* (...))
within(com.text.*)包下任意类
this(com.test.lntf)实现Intf接口的所有类或单个类
@within/target(com.xxx.Transactional)带有Transactional标注的所有类
@annotion(com.xxx.Transactional)带有Transactional标注的所有类的任意方法
@args(com.xxx.Transactional)参数是带有Transactional标注的所有类
args(String)参数类型
SCOPE
@Scope("prototype")或singleton Request Session
@Value(EL)
注入普通字符
操作系统属性
表达式结果
其他Bean属性
文件内容(Resource)
网址内容(Resource)
属性文件,注入配置文件需要使用@PropertySource指定文件地址
在使用@Value注入要配置PropertySourcesPlaceholderConfigurer的Bean
@Bean初始化和销毁
@Bean(initMethod="init", destroyMethod="destroy")
@Profile
指定profile
1、设定Environment的ActiveProfies
2、jvm的spring.profiles.active
3、servlet的context parameter
事件
1、自定义事件,继承ApplicationEvent
2、定义事件监听器,实现ApplicationListener
3、使用容器发布事件
Spring Aware
BeanNameAware
BeanFactoryAware AppiicationContextAware
MessageSourceAware
ApplicationEventPublisherAware
ResourceLoaderAware
继承上述接口,使用容器提供的功能
此外,可以直接以@Autowired方法向Bean注入
计划任务
1、配置类使用@EnablbeScheduling
2、方法上使用@Scheduled(fixedRate/fixedDelay/cron)
多线程
1、配置类使用@EnableAsync注解开启异步任务支持
2、配置类实现AsyncConfigurer接口并重写getAsyncExecutor方法,返回ThreadPoolTaskExecutor
3、方法上使用@Async,表明该方法是一个异步方法
测试
@RunWith
@ContextConfiguration
@ActiveProfiles
SPRINGMVC基础
搭建web项目
1、配置类使用@EnableWebMvc,可以继承WebMvcConfigureAdapter,重写其方法,完成SpringMVC的配置
2、实现WebApplicationInitializer接口,完成web配置
3、打包处理
public class WebInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext arg0) throws ServletException { AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); ctx.register(MyMvcConfig.class); ctx.setServletContext(arg0); Dynamic servlet = arg0.addServlet("dispatcher", new DispatcherServlet(ctx)); servlet.addMapping("/"); servlet.setLoadOnStartup(1); } } @Configuration @EnableWebMvc @ComponentScan public class MyMvcConfig extends WebMvcConfigurerAdapter { @Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/classes/views/"); viewResolver.setSuffix(".jsp"); viewResolver.setViewClass(JstlView.class); return viewResolver; } @Bean public DemoInterceptor demoInterceptor() { return new DemoInterceptor(); } @Bean public MultipartResolver multipartResolver() { CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(); multipartResolver.setMaxUploadSize(1000000); return multipartResolver; } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/assets/**").addResourceLocations("classpath:/assets/"); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(demoInterceptor()); } @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/index").setViewName("/index"); registry.addViewController("/toUpload").setViewName("/upload"); } }
资源放于src/main/resource下,打包后会置于WEB/INF/下
常用注解
@Controller @RequestMapping @ResponseBody @RequestBody @PathVariable @RestController
@ControllerAdvice组成
@ExceptionHandler @ModelAttribute @InitBinder
HttpMessageConverter用于处理request和response数据
测试
@RunWith
@ContextConfiguration(MVC配置类)
@WebAppconfiguration(资源文件位置)
SpringBoot基础
测试
@RunWith
@SpringApplicationConfiguration
@WebAppConfiguration
入口@SpringBootApplication实际上开启了
Configuration
EnableAutoConfiguration
ComponentScan
利用类型安全配置@ConfigurationProperties
@ConfigurationProperties(prefix = "druid") public class DruidProperties { private String url; ... } @Configuration @EnableConfigurationProperties(DruidProperties.class) @ConditionalOnClass(DruidDataSource.class) @ConditionalOnProperty(prefix = "druid", name = "url") @AutoConfigureBefore(DataSourceAutoConfiguration.class) public class JpaConfig { @Autowired private DruidProperties properties; @Bean public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(properties.getUrl()); dataSource.setUsername(properties.getUsername()); dataSource.setPassword(properties.getPassword()); if (properties.getInitialSize() > 0) { dataSource.setInitialSize(properties.getInitialSize()); } if (properties.getMinIdle() > 0) { dataSource.setMinIdle(properties.getMinIdle()); } if (properties.getMaxActive() > 0) { dataSource.setMaxActive(properties.getMaxActive()); } dataSource.setTestOnBorrow(properties.isTestOnBorrow()); try { dataSource.init(); } catch (SQLException e) { throw new RuntimeException(e); } return dataSource; } @Bean PlatformTransactionManager transactionManager() { JpaTransactionManager transactionManager = new JpaTransactionManager(); transactionManager.setDataSource(dataSource()); return transactionManager; } }