Spring技术

Spring核心特性

1. 控制反转(IoC)

  • 定义‌:将对象的创建、配置、组装的控制权从应用程序代码中解耦出来,交由IoC容器来完成。
  • 作用‌:
    • 解耦
    • 提高可测试性
    • 简化代码
  • 实现方式‌:
    • 基于XML的配置
    • 基于注解的配置

2. 依赖注入(DI)

  • 定义‌:IoC的一种具体实现方式,通过容器向对象注入所需的依赖关系。
  • 作用‌:
    • 降低耦合度
    • 提高灵活性
    • 支持多种注入方式(构造器注入、Setter注入、接口注入等)
  • 实现‌:通过IoC容器读取配置文件或注解,自动创建对象并注入依赖。

3. 面向切面编程(AOP)

  • 定义‌:将横切关注点(如日志、事务、安全性等)与核心业务逻辑分离。
  • 作用‌:
    • 提高代码可读性
    • 增强代码可维护性
    • 提高开发效率
  • 实现‌:
    • 切面(Aspect)
    • 连接点(Join Point)
    • 切点(Pointcut)
    • 通知(Advice)
  • 技术基础‌:基于代理(JDK动态代理或CGLIB代理)。

4. 声明式事务管理

  • 定义‌:通过声明式方式(如注解或XML配置)来管理事务。
  • 作用‌:
    • 简化事务管理
    • 提高代码可读性
    • 支持多种事务管理器
  • 实现‌:
    • 基于注解的事务管理(@Transactional
    • 基于XML配置的事务管理

5. 数据访问与集成

  • 定义‌:Spring框架对多种数据访问技术的支持(JDBC、Hibernate、JPA等)。
  • 作用‌:
    • 简化数据访问
    • 支持多种持久化技术
    • 提高开发效率
  • 实现‌:
    • JdbcTemplate
    • HibernateTemplate
    • JpaTemplate
    • Repository接口(Spring Data JPA)

Spring MVC

一、Spring MVC简介

Spring MVC是Spring框架中的一个模块,它实现了Web MVC设计模式,用于构建Web应用程序。Spring MVC提供了清晰的角色划分,包括控制器(Controller)、视图(View)和模型(Model),以及将这三者分离的机制。

二、Spring MVC核心组件

  1. DispatcherServlet‌:

    • 前端控制器,负责接收HTTP请求,并将其分发到相应的处理器。
  2. HandlerMapping‌:

    • 处理器映射器,根据请求的URL找到对应的处理器。
  3. HandlerAdapter‌:

    • 处理器适配器,调用处理器的方法处理请求。
  4. ViewResolver‌:

    • 视图解析器,将逻辑视图名解析为具体的视图对象。
  5. Controller‌:

    • 控制器,处理具体的业务逻辑,并返回模型数据和视图名。

三、Spring MVC工作流程

  1. 请求接收‌:

    • 客户端发送HTTP请求到DispatcherServlet。
  2. 请求分发‌:

    • DispatcherServlet通过HandlerMapping找到对应的处理器。
  3. 处理器处理‌:

    • HandlerAdapter调用处理器的方法,处理请求并返回ModelAndView对象。
  4. 视图解析‌:

    • ViewResolver将ModelAndView对象中的逻辑视图名解析为具体的视图对象。
  5. 响应返回‌:

    • DispatcherServlet将视图对象渲染为HTML响应,并返回给客户端。

四、Spring MVC配置示例

1. XML配置

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
           http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/mvc 
           http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 启用Spring MVC注解支持 -->
    <mvc:annotation-driven />

    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!-- 配置控制器 -->
    <bean class="com.example.controller.MyController" />

</beans>

2. Java配置(基于注解)

@Configuration
@EnableWebMvc
@ComponentScan("com.example")
public class WebConfig implements WebMvcConfigurer {

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

    // 其他WebMvcConfigurer接口方法的实现...
}

3. Spring MVC控制器示例

@Controller
public class MyController {

    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "Hello, Spring MVC!");
        return "hello"; // 返回视图名,对应/WEB-INF/views/hello.jsp
    }
}

Spring 注解

一、Spring 常用注解

  • @Component‌:标注一个类为Spring容器中的一个Bean。
  • @Repository‌:标注在DAO层类上,表示该类用于访问数据库。
  • @Service‌:标注在服务层类上,表示该类用于执行业务逻辑。
  • @Controller‌:标注在控制器类上,表示该类用于处理HTTP请求。
  • @Autowired‌:用于自动装配Spring容器中的Bean。
  • @Qualifier‌:与@Autowired注解配合使用,指定需要装配的Bean的名称。
  • @Value‌:用于注入Spring表达式语言(SpEL)表达式或属性值。
  • @Configuration‌:标注配置类,定义@Bean注解的方法实例化Bean。
  • @Bean‌:在配置类中定义Bean,注册到Spring容器中。
  • @Profile‌:指定Bean在哪些环境下可用。

二、Spring MVC 常用注解

  • @RequestMapping‌:用于映射HTTP请求与处理器方法。
  • @GetMapping‌:处理HTTP GET请求的快捷方式。
  • @PostMapping‌:处理HTTP POST请求的快捷方式。
  • @PutMapping‌:处理HTTP PUT请求的快捷方式。
  • @DeleteMapping‌:处理HTTP DELETE请求的快捷方式。
  • @PathVariable‌:用于将URI模板变量绑定到处理器方法的参数上。
  • @RequestParam‌:用于将请求参数绑定到处理器方法的参数上。
  • @ModelAttribute‌:用于将请求参数或表单数据绑定到Model对象上。
  • @SessionAttributes‌:用于声明需要会话范围内存储的Model属性。

三、Spring Boot 常用注解

  • @SpringBootApplication‌:标注在主类上,是@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan的组合注解。
  • @SpringBootConfiguration‌:表明一个类提供了Spring Boot应用配置。
  • @EnableAutoConfiguration‌:告诉Spring Boot基于添加的jar依赖自动配置应用。
  • @AutoConfigureAfter‌:在指定的自动配置类之后应用自动配置。
  • @AutoConfigureBefore‌:在指定的自动配置类之前应用自动配置。
  • @ConditionalOnBean‌:当容器中有指定Bean的条件下应用自动配置。
  • @ConditionalOnClass‌:当类路径下有指定类时应用自动配置。
  • @ConditionalOnMissingBean‌:当容器中没有指定Bean的条件下应用自动配置。
  • @ConditionalOnMissingClass‌:当类路径下没有指定类时应用自动配置。
  • @ConditionalOnProperty‌:当指定的属性具有特定的值时应用自动配置。

四、Spring Cloud 常用注解

  • @EnableEurekaClient‌:用于激活Eureka客户端的配置。
  • @EnableEurekaServer‌:用于激活Eureka服务器的配置。
  • @EnableHystrix‌:用于启用Hystrix断路器功能。
  • @HystrixCommand‌:用于标记一个方法作为Hystrix命令,可以指定回退逻辑等。
  • @EnableFeignClients‌:用于启用Feign客户端的配置,Feign是一个声明式的Web服务客户端。
  • @FeignClient‌:用于标记一个接口为Feign客户端,可以指定服务名称等。
  • @EnableZuulProxy‌:用于启用Zuul API网关的配置。
  • @EnableConfigServer‌:用于启用Spring Cloud Config配置服务器的配置。
  • @RefreshScope‌:用于支持在运行时刷新配置,通常与Spring Cloud Config配合使用。

Spring Boot 自动装配流程

一、概述

Spring Boot的自动装配是Spring Boot框架的核心特性之一,它大大简化了Spring应用的配置和开发过程。通过自动装配,Spring Boot能够根据项目中添加的依赖自动配置Spring应用,使得开发者无需手动编写大量的配置代码。

二、自动装配流程

1. 查找@SpringBootApplication注解的类

Spring Boot应用的入口通常是一个带有@SpringBootApplication注解的类。这个注解是一个组合注解,它包括了@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan三个注解。其中,@EnableAutoConfiguration注解是自动装配的关键。

2. @EnableAutoConfiguration注解的作用

@EnableAutoConfiguration注解告诉Spring Boot基于添加的jar依赖自动配置应用。它会导入AutoConfigurationImportSelector类,这个类负责查找并加载所有符合条件的自动配置类。

3. 自动配置类的查找

AutoConfigurationImportSelector类会扫描Spring Boot的自动配置jar包中的META-INF/spring.factories文件。这个文件中列出了所有自动配置类的全限定名。然后,它会根据当前项目的依赖和属性设置,过滤出需要应用的自动配置类。

4. 自动配置类的应用

一旦确定了需要应用的自动配置类,Spring Boot就会将这些类实例化,并将它们注册到Spring容器中。这些自动配置类通常会使用@Conditional注解来确保它们只在特定条件下被应用。例如,一个自动配置类可能只在某个特定的类存在时才被应用。

5. 自动装配的细粒度控制

虽然Spring Boot的自动装配大大简化了配置过程,但在某些情况下,你可能需要对自动装配进行细粒度的控制。这时,你可以使用@SpringBootApplication注解的exclude属性来排除某些自动配置类,或者使用@EnableAutoConfiguration注解的excludeName属性来排除特定的自动配置类名。

三、自动装配的示例

假设你创建了一个Spring Boot Web应用,并且添加了spring-boot-starter-web依赖。Spring Boot会自动配置Tomcat作为内嵌的Servlet容器,并配置Spring MVC。你无需手动编写任何配置代码,就可以启动一个Web应用。

@SpringBootApplication
public class MySpringBootApplication {

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值