在一个@Configuration注解的类里面,用@Bean去注解需要实例化的类,@Configuration和@Bean是spring 3.0之后开始支持的一组新注解,实现自动装配,从而可以支持完全无XML配置。如下形式:
1、下面是根据条件装配bean
2、如何自定义starter
3、如何自定义初始化
实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求。 有5种方式可以实现这个需求
为了解决这样的问题,Spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现。很简单,只需要一个类就可以,无需其他配置。 创建实现接口 CommandLineRunner 的类,根据控制台结果可判断,@Order 注解的执行优先级是按value值从小到大顺序
4、spring Aware
讲解:bean 和spring是无耦合的,但是如果想用到spring容器的功能资源,就要你的bean知道spring的存在,这就是spring aware
5、条件注解@Conditional
6、@Enable*注解工作原理
10、Spring MVC
@requestBody 用于方法参数中接受前端传递过来的json数据,不返回view
@responseBody 用于返回前端json数据
@requestParam HTTP请求的参数
@requestHeader 对于HTTP请求头的参数
@pathVariable 路径请求参数
@ModelAttribute 通常作用在control的某个方法上,此方法会首先被调用,并将方法的而结果作为model的属性,然后再调用对应的control处理方法,常用于baseAction类中接受httpserverrequest等
springMVC4中获取request和response对象有以下两种简单易用的方法:
1、在control层获取
1)通过方法参数直接在action类中获取
public String getReqAndRes(HttpServletRequest request, HttpServletResponse response){
/** 相关业务代码 此时可以直接使用request response对象 */
}
2)利用spring web提供的@ModelAttribute注解
2、通过spring提供的RequestContextHolder在非contrller层获取request和response对象
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
HttpServletResponse response = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getResponse();
下面所讲解的都是配置在MyMVCConfig
通过实现WebApplicationInitializer 等同于web.xml配置
基本配置
spring MVC的定制配置需要我们配置集成一个WebMvcConfigurerAdapter,并在此使用@EnableWebMvc注解,来开启对spring MVC配置支持
静态资源
重写addResourceHandlers方法实现
拦截器配置
类似servlet的Filter
可以让普通bean 实现HanlderIntercepetor接口或者继承HandlerInterceptorAdapter类来实现自定义拦截器
在boot中通过重写WebMvcConfigurerAdapter 的 addInterceptors方法来注册自定义拦截器
@ControllerAdvice
@ExceptionHandler定义全局处理 ,通过value属性可以设置拦截过滤条件
在开发中经常会遇到跳转页面的事情,我们还要单独写一个方法很麻烦,现在可以这样
路径参数配置
在spring mvc中路径参数如果带点“.” ,那点后面的值将被忽略。通过重写configurePathMatch(PathMatchConfigurer) 可不忽略 点后参数
文件上传
demo集合
1、@SpringBootApplication 和入口
这个标签是个组合注解,包含了@Configuration @EnableAutoConfiguration @ComponentScan三个标签
@EnableAutoConfiguration 让spring boot根据类路径中的jar包依赖为当前项目进行自动配置
在spring boot中我们可以使用
@Value("${book.author}")直接注入属性,但是还是感觉一个个注入麻烦啊,SO,我们可以直接映射一个类,用@ConfigurationProperties(prefix="author",locations={"classpath:author.properties"})通过prefix指定前缀,通过locations指定位置
2、spring boot 的web开发
需要定义模版信息的话,使用ViewResolver ,别忘了在config上加注解@EnableWebMvc
[java] view plain copy
- @Bean
- public InternalResourceViewResolver viewResolver() {
- InternalResourceViewResolver resolver = new InternalResourceViewResolver();
- resolver.setPrefix("WEB-INF/classes/views/");
- resolver.setSuffix(".jsp");
- resolver.setViewClass(JstlView.class);
- return resolver;
- }
静态资源默认放在src/main.resources/static 下面
3、静态首页的支持
4、接管spring boot 的web配置
如果boot 提供的配置不是我们需要的,可以通过配置类修改,
注解来实现自己完全控制
@Configuration
@ComponentScan("com.ecej.test.mvc")
@EnableWebMvc
如果我们想即用默认配置,又增加自定义配置,可以集成WebMvcConfigurerAdapter,无需使用@EnableWebMvc注解
5、注册servlet Filter Listener @servletComponentScan作用
在springbootApplication上注册@servletComponentScan注解后,@webLister注解自动注册,无需其他代码
或者可以注册ServletRegistrationBean FilterRegistrationBean ServletListenerRegistrationBean 的bean来实现
6、Tomcat配置
其实就是servlet容器配置,因为BOOT内置的是tomcat,所以也就叫tomcat配置了
配置都在org.springframework.boot.autoconfigure.web.ServerProperties 中(其实大部分都有这么个配置)
SO,我们只需要在application.properties中配置就好了(如果你想拥别的名字,只需要配置下就行咯,在上边有提到过)。通用的配置都以server作为前缀
例子:
配置容器
server.port=8080
server.session-timeout=2
配置tomcat
server.tomcat.uri-encoding=UTF-8
上边都是配置文件配置,如果想玩玩代码也是可以的,下面介绍代码配置
想配置servlet容器可以实现一个EmbeddedServletContainerCustomizer的接口(注意声明的类要为static)
想直接配置tomcat等则可以直接定义TomcatEmbeddedServletContainerFactory等
11、缓存支持
不同的缓存技术,需要不同的cacheManager
12、异步消息
spring 对JMS和AMQP的支持分别来自于spring-jms 和spring-rabbit
他们分布需要ConnectionFactory来实现连接消息代理,并分别提供了JmsTemplate、RabbitTemplate
spring为JMS 、AMQP提供了@JmsListener @RabbitListener 注解在方法上监听消息代理发布的消息。我们只需要分别通过@EnableJms @EnableRabbit开启支持