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;
    }
}
posted on 2017-11-26 17:52  啊哈咧  阅读(380)  评论(0编辑  收藏  举报