web项目从war+tomcat到spring-boot+jar

在spring boot问世以前,java传统的web服务器端开发抛开了五花八门的技术框架,开发的模式几乎完全遵循MVC的分层结构+外部的应用服务器来部署项目,spring的强大对于专业的开发人员几乎相当于是JavaEE的编程中的联合国,针对各种技术方向的突破与研究已经极其深入,而弹簧的庞大体系也对开发者造成了很大的公关挑战,在实际的运用中各种复杂的使用环境中,就算是纯粹的春季全栈开发,也依旧会产生各种复杂的问题,这些问题的出现极大的影响了开发者的开发效率,为项目开发造成了很大排错成本,而且传统的战争+应用服务器模式在开发中也依然存在许多的不足,例如tomcat的容器的热加载缺陷,以及项目整体的启动依赖测tomcat的容器的web.xml配置,对于绝大多数的开发项目中,很多的配置文件几乎内容都是千篇一律的,spring的xml:配置自动扫描,配置datasource ,配置spring和mybatis的整合的SqlSessionFactoryBean,配置mybatis扫描的MapperScannerConfigurer。配置事件管理器。配置spring mvc的xml:配置注释驱动,配置自动扫描Controller,配置InternalResourceViewResolver以及web.xml中上下文环境配置,监听器配置,过滤器配置等,其遵循的模式早已经在开发者中根深蒂固,那么这样的复杂的,繁琐的但是都千篇一律的事情为何不能有一个统一的模板呢将这些复杂的无功的事情全部再次封装,将各框架的整合(解决配置错误问题),将各个JAR的依赖整合(解决版本冲突),将tomcat的与项目上下文环境整合(解决外部容器的启动加载以及配置问题),而这样的整合,几乎可以将开发者的精力完全侵注在核心业务的开发中,简化开发步骤,提高开发效率,降低开发成本。

springboot 提供项目自动生成网站https://start.spring.io/
一下提供一个例子参照:

创建一个简单的maven工程 ---pom.xml

我们可以看到上面的pom.xml依赖类型是spring-boot-starter-*, 以spring-boot-starter-web为例. 不需要指定version, 通过父工程的dependencyManagement来获得其版本为1.5.3. spring-boot-starter-web本身的pom.xml文件中有引用到以下的lib, 且paretn也为1.5.3版本, 然后通过maven的依赖传递, spring-boot-starter-web会为该工程引入1.5.3版本的spring-boot-starters对应的spring-boot和spring mvc模块.这样就完成了依赖的管理.

@EnableAutoConfiguration

前面SampleController类上有SpringBootApplication注解, 这个注解上面又有EnableAutoConfiguration注解. 自动配置默认的配置就是由这个注解生效的. 你如果添加了spring-boot-starter-web依赖, 那么就给你配置一堆和Spring MVC相关的默认配置, 如果你添加了spring-boot-starter-jdbc,那么就给你自动配置jdbcTemplate和事务管理器. 如果你添加了spring-boot-starter-mongodb, 那么就给你自动配置mongodbTemplate等等..

大概原理举例说明: 
比如我们添加了spring-boot-starter-jdbc依赖, 那么类路径下就会有JdbcTemplate这个类. 
Spring Boot自动配置检测classpath有jdbcTemplate这个类, 且beanFactory中没有JdbcTemplate的bean, 也就是说没有手动配置, 就从BeanFactory中取出我们配置的datasource, 然后自动配置一个JdbcTemplate. 然后对于事务管理器也是相应的逻辑. 配置一个事务管理器的bean. 
相关代码可见JdbcTemplateAutoConfiguration和DataSourceTransactionManagerAutoConfiguration. 
Spring Boot通过自动配置的魔法, 大大减少了Spring的配置

@Configuration

Spring Boot提倡基于Java的配置。尽管你可以使用一个XML源来调用 SpringApplication.run() ,我们通常建议你使用 @Configuration 类作为主要源。一般定义 main 方法的类也是主要 @Configuration 的一个很好候选。你不需要将所有的 @Configuration 放进一个单独的类。 @Import 注解可以用来导入其他配置类。另外,你也可以使用 @ComponentScan 注解自动收集所有的Spring组件,包括 @Configuration 类。

如果你绝对需要使用基于XML的配置,我们建议你仍旧从一个 @Configuration 类开始。你可以使用附加的 @ImportResource 注解加载XML配置文件。

@Configuration注解该类,等价 与XML中配置beans;用@Bean标注方法等价于XML中配置bean


@SpringBootApplication

很多Spring Boot开发者总是使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 注解他们的main类。由于这些注解被如此频繁地一块使用(特别是你遵循以上最佳实践时),Spring Boot提供一个方便的 @SpringBootApplication 选择。
该 @SpringBootApplication 注解等价于以默认属性使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 。

@ComponentScan 

相当于spring.xml中的上下文组件扫描,当注解在类名上后会自动在容器中生成一个这个类的Bean可自动发现和装配一些Bean。


@Profiles

Spring Profiles提供了一种隔离应用程序配置的方式,并让这些配置只能在特定的环境下生效。任何@Component或@Configuration都能被@Profile标记,从而限制加载它的时机。


 @RestController 注解是 @ResponseBody和 @Controller的合集

  • @RequestMapping 提供路由信息,负责URL到Controller中的具体函数的映射。

  • @Service 一般用于修饰service层的组件

  • @Autowired 自动导入依赖的bean。

  • @Inject 等价于默认的@Autowired,只是没有required属性;

  • @Bean 用@Bean标注方法等价于XML中配置的bean,意思是产生一个bean,并交给spring管理

  • @Import 用来导入其他配置类。

  • @ImportResource 用来加载xml配置文件。

  • @JsonBackReference 解决嵌套外链问题。

  • @Component 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

  • @Repository 使用@Repository注解可以确保DAO或者repositories提供异常转译

  • @Resource(name=”name”,type=”type”) 没有括号内内容的话,默认byName。与@Autowired干类似的事

  • @Value 注入Spring boot application.properties配置的属性的值。示例代码:

  • @Qualifier 当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定

参考:https://blog.csdn.net/qq_34870296/article/details/78581799












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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值