框架学习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进行字节码增强等操作。
相关推荐
智慧老师16 分钟前
Spring基础分析13-Spring Security框架
java·后端·spring
虾球xz37 分钟前
游戏引擎学习第55天
学习·游戏引擎
oneouto1 小时前
selenium学习笔记(二)
笔记·学习·selenium
sealaugh321 小时前
aws(学习笔记第十九课) 使用ECS和Fargate进行容器开发
笔记·学习·aws
炭烤玛卡巴卡1 小时前
学习postman工具使用
学习·测试工具·postman
thesky1234562 小时前
活着就好20241224
学习·算法
蜗牛hb2 小时前
VMware Workstation虚拟机网络模式
开发语言·学习·php
汤姆和杰瑞在瑞士吃糯米粑粑2 小时前
【C++学习篇】AVL树
开发语言·c++·学习
虾球xz2 小时前
游戏引擎学习第58天
学习·游戏引擎
奶香臭豆腐3 小时前
C++ —— 模板类具体化
开发语言·c++·学习