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();
} } @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();
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() > ) {
dataSource.setInitialSize(properties.getInitialSize());
}
if (properties.getMinIdle() > ) {
dataSource.setMinIdle(properties.getMinIdle());
}
if (properties.getMaxActive() > ) {
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;
}
}