Java成神之路(二十八)SpingMVC,Spring Boot

SpringMVC

  1. MVC
    模型-视图-控制器分离。C主要用来同步M和V;所以本意:Model为数据库记录,持久化。View:为前端,Controller:处理输入输出。
  2. SpringMVC 与Struts2
    区别:
    拦截机制不同:struts2为类级别拦截,每次请求都会创建一个Action,和Spring整合时,通过Setter,Getter把request数据注入属性,一个Action对应一个request.response上下文,在接受参数时,允许使用共享的属性接受。有自己的拦截机制,配置文件多
    SpringMVC为方法级拦截,一个方法对应一个request上下文,方法独立,独享数据。参数传递传入方法,方法独有,处理结构通过MadeMap返回给框架,和Spring整合时,为单例模型,默认所有的请求只会创建一个控制器,线程安全。
    底层实现不同:struts2使用Filter实现,在容器启动时开始初始化,晚于Servlet,服务停止后销毁。SpringMVC使用Servlet,在调用时初始化。
  3. 拦截起与过滤器
    拦截器是基于java的反射机制的,而过滤器是基于函数回调。
    拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
    拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
    拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
    在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
    五:Spring Boot
  4. 起步依赖,自动配置
    起步依赖本质为一个Maven项目对象模型定义对其他库的传递依赖。
    自动配置:启动时,自动检测Classpath里的BeanL来进行配置。通过配置类里使用@EnableAutoConfiguration或者@SpringBootAoolication注解,开启自动扫描和配置
  5. Spring boot的starter机制
    引入依赖,自动引入开发相关包,配置数据源。通过注解自动创建所有的bean
    @ConditionalOnBean,仅在当前上下文中存在某个bean时,才会实例化这个Bean。
    @ConditionalOnClass,某个class位于类路径上,才会实例化这个Bean。
    @ConditionalOnExpression,当表达式为true的时候,才会实例化这个Bean。
    @ConditionalOnMissingBean,仅在当前上下文中不存在某个bean时,才会实例化这个Bean。
    @ConditionalOnMissingClass,某个class在类路径上不存在的时候,才会实例化这个Bean。
    @ConditionalOnNotWebApplication,不是web应用时才会实例化这个Bean。
    @AutoConfigureAfter,在某个bean完成自动配置后实例化这个bean。
    @AutoConfigureBefore,在某个bean完成自动配置前实例化这个bean。
  6. 编写自己的strater
    第一步,SpringBoot 在启动时会去依赖的starter包中寻找 resources/META-INF/spring.factories 文件,然后根据文件中配置的Jar包去扫描项目所依赖的Jar包,这类似于 Java 的 SPI 机制。
    第二步,根据 spring.factories配置加载AutoConfigure类。
    最后,根据 @Conditional注解的条件,进行自动配置并将Bean注入Spring Context 上下文当中。
    我们也可以使用@ImportAutoConfiguration({MyServiceAutoConfiguration.class}) 指定自动配置哪些类。
    步骤:
    编写Servies类
    编写配置类,使用@ConfigurationProperties注解,扫描Servies类包。进行bean配置。
    编写自动配置类AutoConfigure,使用@configuration,@conditionOnCalss()(当Classpath下发现该类自动配置)@EnableConfigurationProperties()(类似上面那个)。
    在Spring factoriesw文件中注册,并发布。
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.autocinfigure.StarterAutoConfigure
    代码如下:
    Servies类:
public class StarterService {
    private String config;

    public StarterService(String config) {
        this.config = config;
    }
    
    public String[] split(String separatorChar) {
        return StringUtils.split(this.config, separatorChar);
    }
    
}

配置文件读取类

@ConfigurationProperties("example.service")
public class StarterServiceProperties {
    private String config;
    
    public void setConfig(String config) {
        this.config = config;
    }
    
    public String getConfig() {
        return config;
    }
 }

AytoConfigure:自动配置类:

@Configuration
@ConditionalOnClass(StarterService.class)
@EnableConfigurationProperties(StarterServiceProperties.class)
public class StarterAutoConfigure {

    @Autowired
    private StarterServiceProperties properties;

    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnProperty(prefix = "example.service", value = "enabled", havingValue = "true")
    StarterService starterService (){
        return new StarterService(properties.getConfig());
    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值