spring入门

首先,什么是Spring?

Spring是一个开源的IoC(Inverse of Control,反转控制)和AOP(Aspect Oriented Programming,面向切面编程)容器框架,是Java平台上最广泛使用的企业级应用程序框架之一。

那么,Spring有哪些特点呢?

  1. 轻量级:Spring框架本身就很小,却能够提供支持多种功能的扩展。

  2. 面向切面编程(AOP):Spring提供了一种在程序运行过程中,根据某些条件(切点)动态地将代码织入到程序中的方法,AOP实现了程序的模块化。

  3. 控制反转(IoC):Spring创建对象实例的方式和传统的方式不同,是通过创建Bean对象并把它们交给Spring容器进行管理的方式来实现。

  4. 依赖注入(DI):Spring容器会将Bean对象的依赖关系注入到它们中。

Spring IoC容器

IoC是Spring框架的核心机制之一,也是它与其他框架的最大不同之处。IoC的思想就是将实例化对象的控制权交给Spring,由Spring去控制对象的生命周期和依赖注入。IoC容器是一个对象工厂,负责创建、初始化、销毁Bean以及管理其整个生命周期。

Spring提供了多种IoC容器实现,如BeanFactory、ApplicationContext等。其中,ApplicationContext是BeanFactory的子接口,提供了更多的特性,如消息、继承、国际化等功能。另外,ApplicationContext还支持AOP等扩展。

Spring Bean

Spring Bean就是一个由Spring IoC容器管理的对象实例。通常情况下,Spring Bean是单例的,也就是说整个应用只有一个实例。但是,如果需要,也可以设置成多例的。Spring可以通过XML配置文件和Java注解的方式定义Bean。

例如使用XML配置文件定义bean:

<bean id="user" class="com.example.User">
   <property name="name" value="John"/>
   <property name="age" value="20"/>
</bean>

这样,容器就可以实例化一个名为user的User对象,并给其属性name和age赋值。

Spring支持多种作用域的Bean,包括单例(Singleton)、原型(Prototype)、请求(Request)、会话(Session)、全局会话(全局Session)。

Spring AOP

AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,主要用于解决系统间的横切关注点。AOP可以在不修改原程序的情况下,动态地添加或删除一些操作。Spring AOP实现了对AOP的支持,并可以和其他的框架一起使用。

Spring AOP支持5种通知类型:

  • 前置通知(Before advice):在目标方法之前执行。
  • 后置通知(After return advice):在目标方法正常执行之后执行。
  • 环绕通知(Around advice):在目标方法之前和之后分别执行,并可以在执行过程中自定义操作。
  • 异常通知(After throwing advice):在目标方法抛出异常之后执行。
  • 最终通知(After (finally) advice):无论目标方法是否抛出异常,都会在其后面执行。

可以通过AspectJ语言和Spring的AOP框架来实现AOP,其中AspectJ语言是类似于Java的语言,提供了一组注解和关键字来实现切面。

Spring MVC

Spring MVC是一个MVC(Model-View-Controller,模型-视图-控制器)框架,用于Web开发。它通过将Web请求的不同处理阶段分离开来,使得开发者可以更加清晰地进行开发和维护。

Spring MVC框架的基本工作流程如下:

  • 用户发送请求到DispatcherServlet。
  • DispatcherServlet通过Handler Mapping查找到对应的Controller。
  • Controller调用Service进行业务逻辑处理,得到处理结果并返回。
  • Controller选择对应视图进行渲染并返回给用户。

Spring MVC框架提供了一系列注解和框架,使得开发Web应用程序变得简单、方便和高效。

例如:

  • @RequestMapping注解:用于映射请求路径到Controller方法。
  • @PathVariable注解:用于接收经过匹配后的请求路径中的变量。
  • @RequestParam注解:用于绑定请求参数到Controller方法参数。
  • @ResponseBody注解:用于将Controller返回的字符串或JSON对象封装为HTTP响应。
  • Model和ModelAndView:用于将数据和视图封装到同一个对象中

Spring Boot

Spring Boot是基于Spring框架的快速开发框架,它简化了Spring应用程序的开发、配置和部署。Spring Boot通过提供一组自动配置的特性,尽可能少地干预开发者的操作,以此减少配置并加快应用程序的开发速度。

通常情况下,一个Spring应用程序需要复杂的配置才能正常运行,包括数据源、Web服务器、日志等方面的配置。而使用Spring Boot,只需要几行代码就可以快速搭建一个完整的Spring应用程序,比如如下的启动类:

@SpringBootApplication
public class MyApplication {
   public static void main(String[] args) {
      SpringApplication.run(MyApplication.class, args);
   }
}

有了Spring Boot,我们可以快速地开发Spring应用程序,并部署到不同的环境中,如云平台、Docker或者传统的运行平台中。

Spring Data

Spring Data是Spring框架中用于简化数据操作和访问的模块。它提供了一种高度抽象的方式,使得开发者可以在不同的数据源中进行快速的数据存取和操作,包括关系型数据库、NoSQL数据库、Apache Hadoop和Apache Solr等。

相对于传统的JDBC,Spring Data有更高的抽象层次,可以实现更少的代码,同时也提供了更多的功能。在使用Spring Data时,我们可以通过定义接口及其方法,而不是直接编写SQL,从而方便地操作数据库,如下所示:

public interface UserRepository extends CrudRepository<User, Long> {
   List<User> findByLastName(String lastName);
}

这段代码定义了一个UserRepository接口,它继承了CrudRepository接口,并且提供了findByLastName方法,该方法根据lastName字段的值从数据库中查询相关记录。

Spring Security

Spring Security是Spring框架提供的安全框架,用于保护Web应用程序和服务。它提供了身份验证、用户授权、保护Web请求、过滤器等多项安全功能,使得开发者可以方便地加入安全功能到其应用程序中。

在Spring Security中,可以进行基于角色/权限的身份验证和授权,也支持基于表单、HTTP基本身份验证、OAuth等多种身份验证/授权方式。例如:

@Configuration
@EnableWebSecurity
public class BasicAuthSecurityConfiguration extends WebSecurityConfigurerAdapter {

   @Autowired
   public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
      auth.inMemoryAuthentication()
         .withUser("user1").password(passwordEncoder().encode("password")).roles("USER")
         .and().withUser("user2").password(passwordEncoder().encode("password")).roles("ADMIN");
   }

   @Override
   protected void configure(HttpSecurity http) throws Exception {
      http.authorizeRequests()
         .antMatchers("/admin/**").hasRole("ADMIN")
         .antMatchers("/user/**").hasAnyRole("USER", "ADMIN")
         .and().httpBasic()
         .and().csrf().disable();
   }

   @Bean
   public PasswordEncoder passwordEncoder() {
      return new BCryptPasswordEncoder();
   }
}

这段代码配置了一个HTTP基本身份验证的安全过滤器,用于保护应用程序的/user/**/admin/**两个URL。其中,configureGlobal()方法配置了两个用户的用户名和密码,并指定对应的角色;configure()方法配置了URL和角色的对应关系,并且启用了HTTP基本身份验证。

Spring事务管理

在应用程序中,数据一致性是非常重要的。Spring框架提供了事务管理机制,用于在应用程序中实现数据一致性。

Spring事务管理机制主要分为两种方式:

  • 编程方式(Procedural Transaction Management):开发者通过编写代码来实现事务管理。这种方式需要更大的开发工作,通常只在比较复杂的事务场景下使用。
  • 声明式方式(Declarative Transaction Management):在Spring上下文文件中声明事务属性,以便Spring自动管理和控制事务。这种方式更为简单和易于使用,并且易于维护。

在声明式方式中,Spring框架通过AOP来实现事务管理,并且有两种常见的方式:

  • 基于XML配置文件的事务管理。
  • 基于注解的事务管理。

例如,基于注解的方式如下所示:

@Service
@Transactional
public class UserServiceImpl implements UserService {

   @Autowired
   private UserRepository userRepository;

   @Override
   public User addUser(User user) {
      return userRepository.save(user);
   }

   @Override
   public List<User> getAllUsers() {
      return userRepository.findAll();
   }

}

这段代码中,@Transactional注解告诉Spring框架这个方法需要受到事务管理。

Spring RESTful Web Services

Spring框架提供了RESTful Web服务的开发功能,这允许应用程序通过HTTP协议暴露REST API,提供数据服务。在Spring中,可以使用Spring MVC框架实现RESTful Web服务。

RESTful Web服务是一种可扩展的,基于资源的Web服务,由HTTP/HTTPS、XML/JSON和URIs组成。RESTful Web服务可以通过HTTP方法(GET、POST、PUT、DELETE等)来操作资源,并且可以通过uri定位资源。

在使用Spring开发RESTful Web服务时,可以使用如下注解:

  • @RestController:表明这个类是一个RESTful Web服务类。
  • @RequestMapping:用于定义请求URI、HTTP方法和Produces/Consumes媒体类型等信息。
  • @PathVariable:用于在请求URI中获取参数。
  • @RequestBody:用于将请求的JSON/XML等格式数据,转化成Java Beans并绑定到参数上。
  • @ResponseBody:用于将方法返回值转化成响应的JSON/XML等格式数据。

例如如下代码片段:

@RestController
@RequestMapping(value="/users")
public class UserController {

   @Autowired
   private UserService userService;

   @GetMapping(value = "/{id}")
   public User getUser(@PathVariable Long id) {
      return userService.getUser(id);
   }

   @PostMapping
   public User addUser(@RequestBody User user) {
      return userService.addUser(user);
   }

   @PutMapping(value = "/{id}")
   public User updateUser(@PathVariable Long id, @RequestBody User user) {
      user.setId(id);
      return userService.updateUser(user);
   }

   @DeleteMapping(value = "/{id}")
   public void deleteUser(@PathVariable Long id) {
      userService.deleteUser(id);
   }
}

这段代码中,使用@RestController注解来表明这个类是一个RESTful Web服务类。使用@RequestMapping注解来定义请求URI和HTTP方法。可以通过@PathVariable注解在请求URI中获取参数。使用@RequestBody将请求数据转化为Java对象,使用@ResponseBody将Java对象转化为响应数据。

Spring集成其他框架

Spring框架具有非常强大的扩展性和兼容性,可以与其他众多框架无缝集成。例如:

  • ORM框架:Spring可以与Hibernate、MyBatis等ORM框架无缝集成,使用ORM框架可以方便地管理数据库数据。
  • 数据库连接池:Spring可以与常用的数据库连接池无缝集成,包括C3P0和Druid等。
  • 缓存框架:Spring可以与Ehcache、Redis等常见的缓存框架无缝集成,提高应用程序访问效率。
  • 消息队列:Spring可以与ActiveMQ、RabbitMQ等多种消息队列无缝集成,实现可靠的异步消息通信。
  • 日志框架:Spring可以与常见的日志框架Log4j、Logback等无缝集成,提供更全面的日志记录和分析功能。
  • 其他:除此之外,Spring还可以与各种Web框架、安全框架、测试框架等无缝集成。

以上就是关于Spring的入门内容的补充,希望能够对您有所帮助。如果您有任何疑问,请随时在评论中告诉我。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值