框架学习03-Spring 七大核心模块

  1. 核心容器(Core Container)

    • Spring - Core :提供了框架的基本构建块,包括依赖注入(Dependency Injection,DI)和控制反转(Inversion of Control,IOC)功能。这是Spring框架的核心部分,它允许开发者将对象之间的依赖关系从代码中解耦出来。例如,通过使用ApplicationContext接口的实现类(如ClassPathXmlApplicationContextAnnotationConfigApplicationContext)来创建和管理应用程序上下文,从而获取和管理Bean。

    • Spring - Beans :负责管理和操作Bean,包括Bean的定义、创建、配置和销毁。它提供了BeanFactory接口,这是Spring容器的核心接口,用于加载和管理Bean。在实际应用中,开发者可以通过XML配置文件或Java注解来定义Bean,如使用@Component@Service@Repository@Controller等注解来标记类为Bean,然后由Spring容器进行管理。

    • Spring - Context :构建在Core和Beans模块之上,提供了一种更高级别的应用程序上下文,用于在应用程序中访问对象。它还提供了国际化(i18n)支持、事件传播机制、资源加载等功能。例如,通过MessageSource接口可以实现国际化文本消息的获取和处理,方便开发多语言应用程序。

    • Spring - Expression Language (SpEL) :是一种强大的表达式语言,用于在运行时查询和操作对象图。它可以嵌入到Spring配置文件或注解中,用于动态地计算属性值、调用方法等。例如,可以在XML配置文件中使用SpEL来设置Bean的属性值,如这里就通过SpEL获取系统属性user.name的值来设置User对象的name属性

      xml 复制代码
      <bean id="user" class="com.example.User"> <property name="name" value="#{systemProperties['user.name']}"/> </bean>`
  2. 数据访问与集成(Data Access/Integration)

    • Spring - JDBC :提供了对JDBC(Java Database Connectivity)的简化操作。它封装了JDBC的样板代码,使得数据库访问更加容易。例如,通过JdbcTemplate类,开发者可以用更少的代码实现数据库的查询、插入、更新和删除操作。比如,这里就使用JdbcTemplate查询了年龄大于18岁的用户信息。

      java 复制代码
      JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); String sql = "SELECT * FROM users WHERE age >?"; List<User> users = jdbcTemplate.query(sql, new Object[]{18}, new RowMapper<User>() { public User mapRow(ResultSet rs, int rowNum) throws SQLException { User user = new User(); user.setId(rs.getInt("id")); user.setName(rs.getString("name")); return user; } });`
    • Spring - ORM :支持与各种对象 - 关系映射(ORM)框架的集成,如Hibernate、JPA(Java Persistence API)等。它提供了统一的编程接口,使得在切换不同的ORM框架时更加容易。例如,当使用JPA时,Spring可以管理EntityManagerFactoryEntityManager,并且通过@PersistenceContext注解可以方便地注入EntityManager,如

      java 复制代码
      @Repository public class UserRepository { @PersistenceContext private EntityManager entityManager; public User findById(Long id) { return entityManager.find(User.class, id); } }`。
    • Spring - OXM:用于对象到XML的映射(Object - XML Mapping),支持多种XML转换技术,如JAXB(Java Architecture for XML Binding)、Castor等。它可以将Java对象转换为XML格式,或者将XML数据转换为Java对象。例如,在与外部系统进行XML数据交换时,使用Spring - OXM可以方便地进行数据转换和处理。

    • Spring - Transactions :提供了一个编程式和声明式事务管理的统一框架。声明式事务管理是Spring的一个重要特性,通过在方法或类上使用@Transactional注解,就可以轻松地实现事务管理。例如,这里在transferMoney方法上使用@Transactional注解,使得该方法在执行过程中如果出现异常,事务会自动回滚,保证数据的一致性。

      java 复制代码
       @Service public class UserService { @Transactional public void transferMoney(User fromUser, User toUser, double amount) { fromUser.setBalance(fromUser.getBalance() - amount); toUser.setBalance(toUser.getBalance() + amount); } }
  3. Web(Web)

    • Spring - Web:提供了基础的Web开发功能,包括构建Web应用程序的基本组件,如Servlet上下文、HTTP请求和响应处理等。它是Spring MVC(Model - View - Controller)的基础模块。例如,在Servlet环境中,Spring - Web可以帮助处理Servlet初始化、请求分发等基础操作。

    • Spring - WebMVC :是Spring框架用于构建Web应用程序的MVC(Model - View - Controller)框架。它提供了一种清晰的架构来分离应用程序的模型、视图和控制器。例如,通过定义@Controller注解的类作为控制器,@RequestMapping注解来映射请求路径,ModelAndView来传递数据和视图名称,这里HelloController就是一个简单的MVC控制器,当访问"/hello"路径时,会返回一个包含"Hello, World!"消息的视图。

      java 复制代码
      @Controller public class HelloController { @RequestMapping("/hello") public ModelAndView hello() { ModelAndView mav = new ModelAndView("hello"); mav.addObject("message", "Hello, World!"); return mav; } }`
  4. AOP(Aspect - Oriented Programming)

    • Spring - AOP :提供了面向切面编程的支持。它允许开发者将横切关注点(如日志记录、安全检查、事务管理等)从业务逻辑中分离出来,以切面(Aspect)的形式进行统一管理。例如,可以使用@Aspect注解定义一个切面,@Before@After@Around等注解来定义在方法执行前后或周围执行的代码。比如,这个切面会在UserService类的所有方法执行前打印方法名称,用于日志记录。

      java 复制代码
      @Aspect public class LoggingAspect { @Before("execution(* com.example.service.UserService.*(..))") public void logBefore(JoinPoint joinPoint) { System.out.println("Before method: " + joinPoint.getSignature().getName()); } }`
  5. 消息(Messaging)

    • Spring - AMQP :用于与高级消息队列协议(Advanced Message Queuing Protocol,AMQP)兼容的消息中间件(如RabbitMQ)进行集成。它提供了一种简单的方式来发送和接收消息。例如,通过RabbitTemplate可以发送消息,@RabbitListener注解可以接收消息。如这里配置了RabbitMQ相关的组件,并在MessageService中定义了一个消息接收方法。

      java 复制代码
      `@Configuration public class RabbitMQConfig { @Bean public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { return new RabbitTemplate(connectionFactory); } } @Service public class MessageService { @RabbitListener(queues = "myQueue") public void receiveMessage(String message) { System.out.println("Received message: " + message); } }`,
    • Spring - Messaging :提供了一套通用的消息传递抽象,支持多种消息传递方式,包括基于消息队列和基于发布/订阅(Publish/Subscribe)模式。它是构建分布式系统中消息传递机制的重要模块。例如,通过MessageChannelMessageHandler等概念,可以实现消息的发送和接收。

  6. 测试(Testing)

    • Spring - Test :提供了对Spring应用程序进行单元测试、集成测试和功能测试的支持。它包括对依赖注入、事务管理、MVC等功能的测试支持。例如,通过这里在JUnit测试中加载了Spring应用程序配置AppConfig,并对UserServicetransferMoney方法进行了测试。

      java 复制代码
      @RunWith(SpringJUnit4ClassRunner.class)`和`@ContextConfiguration`注解,可以方便地在JUnit测试中加载Spring应用程序上下文,进行各种测试。如`@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {AppConfig.class}) public class UserServiceTest { @Autowired private UserService userService; @Test public void testTransferMoney() { User fromUser = new User(); fromUser.setBalance(1000.0); User toUser = new User(); toUser.setBalance(0.0); userService.transferMoney(fromUser, toUser, 500.0); assertEquals(fromUser.getBalance(), 500.0); assertEquals(toUser.getBalance(), 500.0); } }`,
  7. 工具(Instrumentation)

    • Spring - Instrument:提供了在Java应用程序中添加代理(Agent)的功能,用于在运行时监控和管理应用程序。例如,在应用程序性能分析、故障诊断等场景中,可以通过添加代理来收集信息。不过这个模块相对使用较少,主要用于一些高级的应用场景,如对JVM进行字节码增强等操作。
相关推荐
ac-er888825 分钟前
ThinkPHP 模型如何更新数据
数据库·oracle·php
MogulNemenis28 分钟前
每日八股——JVM组成
java·jvm·后端·学习
A_aspectJ33 分钟前
Oracle数据库 创建dblink的过程及其用法详解
数据库·oracle
TPCloud35 分钟前
详细的oracle rac维护命令集合
数据库·oracle·rac操作命令
奈斯ing1 小时前
【Oracle篇】掌握SQL Tuning Advisor优化工具:从工具使用到SQL优化的全方位指南(第六篇,总共七篇)
运维·数据库·sql·oracle
矿矿不想吃饭1 小时前
UG Motion学习笔记
笔记·学习
小A1591 小时前
STM32完全学习——点亮LED灯
stm32·学习
小汤猿人类1 小时前
Spring Data Redis使用方式
java·redis·spring
DarkAthena2 小时前
【MogDB】MogDB5.2.0重磅发布第八篇-支持PLSQL编译全局缓存
数据库·缓存·oracle
web3探路者2 小时前
2024年 Web3开发学习路线全指南
学习·web3·区块链·智能合约·软件开发·dapp开发·公司开发