spring/springboot/sprinngMVC

一:Spring

(1)介绍

Spring 是一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。
其中 IoC(Inverse of Control:控制反转) 和 AOP(Aspect-Oriented Programming:面向切面编程)是Spring的两个核心思想

  • IoC的意思是控制反转,是一种设计思想,把需要在程序中手动创建对象的控制权交给了Spring框架。IoC的载体是IoC容器,本质是一个工厂,数据结构上来看是一个Map,用来存放着各种对象。当我们创建一个对象时,只需要配置好配置文件/注解,而不用担心对象是怎么被创建出来的。 Spring Bean可以理解为由IoC容器管理的类。
  • AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。

 Spring以bean的方式组织和管理Java应用中的各个组件及其关系。Spring使用BeanFactory来产生和管理Bean,它是工厂模式的实现。BeanFactory使用控制反转(IoC)模式将应用的配置和依赖性规范与实际的应用程序代码分开


 Spring帮助我们管理Bean分为两个部分:

  • 一个是注册Bean(@Component , @Repository , @Controller , @Service , @Configration), 
  • 一个装配Bean(@Autowired , @Resource,可以通过byTYPE(@Autowired)、byNAME(@Resource)的方式获取Bean)。 完成这两个动作有三种方式,一种是使用自动配置的方式、一种是使用JavaConfig的方式,一种就是使用XML配置的方式。

声明bean的注解

  1. @Component :spring通用的注解,被spring管理的组件或bean,将 java 类标记为 bean。它是任何 Spring 管理组件的通 用构造型。当你不确定是属于哪一层的时候使用。
  2. @Repository 用于持久层,数据库访问层
  3. @Service 用于服务层,处理业务逻辑
  4. @Controller 用于呈现层,(spring-mvc)

注入bean的注解
注入用@Autowire的,需要指定id就用@Qualifier。
@Resource:由JSR-250提供

java配置类相关注解
@Configuration 声明当前类为配置类,相当于xml形式的Spring配置(类上)
@Bean 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式(方法上)
@Configuration 声明当前类为配置类,其中内部组合了@Component注解,表明这个类是一个bean(类上)

切面(AOP)相关注解
Spring支持AspectJ的注解式切面编程。
@Aspect 声明一个切面(类上)
使用@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数。
@After 在方法执行之后执行(方法上) @Before 在方法执行之前执行(方法上) @Around 在方法执行之前与之后执行(方法上)
@PointCut 声明切点
在java配置类中使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持(类上)
 

之所以区分开几种类型,一是spring想在以后的版本中为它们添加特殊技能,二是这种分层的做法使web架构更清晰,易读性与维护性更好。

 @Component 和 @Bean 的区别是什么?

@Component 注解作用于类,而@Bean注解作用于方法。
@Component 和 @Bean 是两种使用注解来定义bean的方式。
Component :作用于类上,通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中。(@Controller、@Service、@Repository )
@Bean: 作用于方法或注解上,通常这个方法中定义产生这个Bean的逻辑。用于显式声明单个bean,而不是让Spring像上面那样自动执行它。它将bean的声明与类定义分离,并允许您精确地创建和配置bean。而@Bean则常和@Configuration注解搭配使用

联系:
1、作用都是一样的,都是注册bean到Spring容器中。
2、引用第三方库中的类需要装配到Spring容器时,则只能通过@Bean来实现。

总结:
@Component和@Bean都是用来注册Bean并装配到Spring容器中,但是Bean比Component的自定义性更强。可以实现一些Component实现不了的自定义加载类。
2、@Bean主要用于第三方类库的加载到Spring Bean中,之前通过xml中的<baen>标签来实现,现在可直接在类中实现。

@Autowired 和 @Resource 的区别?

出身不同:@Autowired 来自于 Spring,而 @Resource 来自于 JDK 的注解; 使用时设置的参数不同:相比于 @Autowired 来说,@Resource 支持更多的参数设置,例如 name 设置,根据名称获取 Bean。


 Bean 的作用域是指 Bean 在 Spring 整个框架中的某种行为模式,比如 singleton 单例作用域,就 表示 Bean 在整个 Spring 中只有一份,它是全局共享的,那么当其他人修改了这个值之后,那么另一 个人读取到的就是被修改的值。
Spring 容器在初始化一个 Bean 的实例时,同时会指定该实例的作用域。Spring有 6 种作用域,最后四种是基于 Spring MVC 生效的:

  1. singleton:单例作用域
  2.  prototype:原型作用域(多例作用域) 
  3. request:请求作用域
  4.  session:回话作用域
  5.  application:全局作用域
  6. websocket:HTTP WebSocket 作用域

注意后 4 种状态是 Spring MVC 中的值,在普通的 Spring 项目中只有前两种。


Spring 框架中用到了哪些设计模式?

  1. 工厂设计模式 : Spring 使用工厂模式通过 BeanFactory、ApplicationContext 创建 bean 对象。
  2. 代理设计模式 : Spring AOP 功能的实现。
  3. 单例设计模式 : Spring 中的 Bean 默认都是单例的。
  4. 模板方法模式 : Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。
  5. 包装器设计模式 : 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
  6. 观察者模式: Spring 事件驱动模型就是观察者模式很经典的一个应用。
  7. 适配器模式 : Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配Controller。

二:SpringBoot

(1)什么是 Spring Boot?

  • Spring Boot 是为了快速开发 Spring 而诞生的,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,使开发者能快速上手。

(2)SpringBoot有哪些优点?

  • 快速集成框架,Spring Boot 提供了启动添加依赖的功能,用于秒级集成各种框架。
  • 内置运行容器,无需配置 Tomcat 等 Web 容器,直接运行和部署程序。
  • 快速部署项目,无需外部容器即可启动并运行项目。
  • 可以完全抛弃繁琐的 XML,使用注解和配置的方式进行开发。
  • 支持更多的监控的指标,可以更好的了解项目的运行情况等特点。

(2) SpringBoot的核心注解是什么?由那些注解组成?

Spring Boot 可使用 Idea 或网页创建,它的设计思想是约定大于配置,类上标注 @SpringBootApplication 就可以启动 Spring Boot 项目了。

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:

  1. @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
  2. @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,例如:java 如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
  3. @ComponentScan:Spring组件扫描。

(3) SpringBoot配置文件

配置文件作用:整个项目中所有的重要数据都是在配置文件中配置的。如

  • 数据库的连接信息(包含用户名和密码的设置);
  • 项目的启动端口;
  •  第三方系统的调用秘钥等信息;
  •  用于发现和定位问题的普通日志和异常日志等。

想象一下如果没有配置信息,那么 Spring Boot 项目就不能连接和操作数据库,甚至是不能保存可以用于排查问题的关键日志,所以配置文件的作用是非常重要的。
Spring Boot 配置文件主要分为以下两种格式:

  • .yml(树形结构配置文件,可读性高,易于理解,用来表达数据序列化格式)
  • .properties(是以键值对形式配置)

 

 同时出现的话,properties的优先级更高;但一般实际业务中,会采取统一的一种配置文件格式。

 读取配置文件:

如果在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现。
@Value 注解使用“${}”的格式读取,如下代码所示:

public class ReadYml {
    @Value("${server.port}")
    private String port;
    @PostConstruct
    public void postConstruct() {
        System.out.println("Read YML,port:" + port);
} }

properties和 yml 对比:

  1. properties 是以 key=value 的形式配置的键值类型的配置文件,而 yml 使用的是类似 json 格式的 树形配置方式进行配置的,yml 层级之间使用换行缩进的方式配置,key 和 value 之间使用“: ”英文 冒号加空格的方式设置,并且空格不可省略。
  2. properties 为早期并且默认的配置文件格式,但其配置存在一定的冗余数据,使用 yml 可以很好 的解决数据冗余的问题。
  3. yml 通用性更好,支持更多语言,如 Java、Go、Python 等,如果是云服务器开发,可以使用一份 配置文件作为 Java 和 Go 的共同配置文件。
  4. yml 虽然可以和 properties 共存,但一个项目中建议使用统一的配置类型文件。

(4) SpringBoot、Spring MVC和Spring有什么区别?

  • Spring
    Spring最重要的特征是依赖注入。所有Spring Modules不是依赖注入就是IOC控制反转。
    当我们恰当的使用DI或者是IOC的时候,可以开发松耦合应用。
  • Spring MVC
    Spring MVC提供了一种分离式的方法来开发Web应用。通过运用像DispatcherServelet,MoudlAndView 和 ViewResolver 等一些简单的概念,开发 Web 应用将会变的非常简单。
  • SpringBoot
    Spring和Spring MVC的问题在于需要配置大量的参数。
    SpringBoot通过一个自动配置和启动的项来解决这个问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值