首页 > 其他分享 >实例展示Spring的作用以及如何使用

实例展示Spring的作用以及如何使用

时间:2024-09-24 15:49:42浏览次数:3  
标签:展示 Spring class 实例 org import public UserService

Spring 是一个广泛应用于 Java 开发的开源框架,它主要有以下几个重要作用:

一、依赖注入(Dependency Injection)

作用:

  • 解耦组件之间的依赖关系,使得代码更易于维护和测试。比如在一个 Web 应用中,不同的业务逻辑层和数据访问层之间如果直接相互创建对象,会导致代码紧密耦合,一旦其中一个模块发生变化,可能会影响到其他多个模块。而通过 Spring 的依赖注入,可以在运行时动态地将对象注入到需要的地方,降低模块之间的耦合度。

实例:

  • 假设你有一个服务类 UserService 需要访问数据库来获取用户信息,通常情况下可能会在 UserService 中直接实例化一个数据访问对象 UserDao。但使用 Spring 后,可以将 UserDao 的实例注入到 UserService 中。
    public class UserService {
        private UserDao userDao;

        // 通过构造函数注入
        public UserService(UserDao userDao) {
            this.userDao = userDao;
        }

        public List<User> findAllUsers() {
            return userDao.findAll();
        }
    }

  • 在 Spring 的配置文件(如 XML 配置文件或 Java 配置类)中,配置 UserService 和 UserDao 的关系:
    <beans>
        <bean id="userDao" class="com.example.UserDaoImpl"/>
        <bean id="userService" class="com.example.UserService">
            <constructor-arg ref="userDao"/>
        </bean>
    </beans>

二、面向切面编程(AOP)

作用:

  • 将横切关注点(如日志记录、事务管理、安全检查等)从业务逻辑中分离出来,提高代码的可维护性和可重用性。例如,在一个企业级应用中,需要对多个业务方法进行日志记录,如果在每个方法中都添加日志代码,会导致代码重复且难以维护。使用 Spring AOP,可以将日志记录定义为一个切面,在不修改业务代码的情况下,自动应用到需要的地方。

实例:

  • 定义一个日志切面类:
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    @Aspect
    public class LoggingAspect {
        private static final Logger logger = LoggerFactory.getLogger(LoggingAspect.class);

        @Around("execution(* com.example.service..*.*(..))")
        public Object logMethodCall(ProceedingJoinPoint joinPoint) throws Throwable {
            logger.info("Entering method: {}", joinPoint.getSignature().toShortString());
            Object result = joinPoint.proceed();
            logger.info("Exiting method: {}", joinPoint.getSignature().toShortString());
            return result;
        }
    }

  • 在 Spring 配置文件中启用切面:
    <beans>
        <!-- 其他 bean 定义 -->
        <aop:aspectj-autoproxy/>
        <bean class="com.example.LoggingAspect"/>
    </beans>

三、事务管理

作用:

  • 简化数据库事务的处理。在处理数据库操作时,保证数据的一致性和完整性。例如,在一个银行转账的业务场景中,需要从一个账户扣款并向另一个账户存款,这两个操作必须要么同时成功,要么同时失败。Spring 的事务管理可以确保这种事务性操作的正确执行。

实例:

  • 使用 @Transactional 注解标记需要事务管理的方法:
    import org.springframework.transaction.annotation.Transactional;

    public class BankService {
        @Transactional
        public void transferMoney(int fromAccountId, int toAccountId, double amount) {
            // 扣款逻辑
            deductMoney(fromAccountId, amount);
            // 存款逻辑
            depositMoney(toAccountId, amount);
        }

        private void deductMoney(int accountId, double amount) {
            // 数据库操作,从指定账户扣款
        }

        private void depositMoney(int accountId, double amount) {
            // 数据库操作,向指定账户存款
        }
    }

  • 在 Spring 配置文件中配置事务管理器:
    <beans>
        <!-- 其他 bean 定义 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
    </beans>

使用 Spring 框架通常需要以下步骤:

  1. 添加 Spring 依赖:
    • 在 Maven 或 Gradle 项目中添加 Spring 相关的依赖项。例如,对于 Maven 项目,可以在 pom.xml 文件中添加以下依赖:
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>6.0.11</version>
    </dependency>

  1. 配置 Spring:
    • 可以使用 XML 配置文件或 Java 配置类来定义 bean 和配置 Spring 的各种功能。如上文示例中的 XML 配置文件,或者使用 Java 配置类:
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import com.example.UserDaoImpl;
    import com.example.UserService;

    @Configuration
    public class AppConfig {
        @Bean
        public UserDaoImpl userDao() {
            return new UserDaoImpl();
        }

        @Bean
        public UserService userService() {
            return new UserService(userDao());
        }
    }

  1. 启动 Spring 容器:
    • 在应用的入口处,创建 Spring 容器并获取所需的 bean。例如:
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;

    public class Main {
        public static void main(String[] args) {
            ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
            UserService userService = context.getBean(UserService.class);
            // 使用 userService 进行业务操作
        }
    }

标签:展示,Spring,class,实例,org,import,public,UserService
From: https://blog.csdn.net/A_cot/article/details/142492117

相关文章

  • springcloud中sentient整合openfeign组件
    openfeign作为微服务各个模块之间调用的组件,如果服务提供方出现异常,会将错误返回给服务消费方,消费方可以通过sentinel的服务降级方法,对如果调用异常的情况进行处理以下介绍下具体做法:一、服务消费方必须整合openfeign,方法可以参考:https://www.cnblogs.com/qwg-/p/18007449pom.x......
  • Springboot实战——黑马点评之附近商铺
    Springboot实战——黑马点评之附近商铺1认识GEO存储1.1GEO是什么1.2GEO怎么在Redis中存储2数据库店铺导入Redis将数据库中的店铺数据按店铺类型type为关键字,分类存入Redis里数据结构:key(shop_type)--sortedSetsortedSet序列中元素组成为value(shopId)--score......
  • 构建SpringBoot驱动的文档管理平台
    第1章绪论1.1背景及意义随着社会的快速发展,计算机的影响是全面且深入的。员工生活水平的不断提高,日常生活中员工对在线文档方面的要求也在不断提高,在线文档管理受到广大员工的关注,使得在线文档管理系统的开发成为必需而且紧迫的事情。在线文档管理系统主要是借助计算机,通......
  • 基于springboot社区医疗服务小程序 毕业设计-附源码37272
                          摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区医疗服务小程序管理系统被用户普遍使用,为方......
  • Springboot实战——黑马点评之探店及关注
    黑马点评——达人探店及关注推送1探店业务实现1.1探店笔记发布1)笔记blog字段属性除此之外,在"搜索博客"接口实现中会涉及到向前端展示用户的部分信息,例如用户头像icon、用户昵称name、用户是否点赞该博客islike(用于对点赞按钮高亮作实现),在设计实体类时使用springboot注解@......
  • springcloud中流控和熔断
    接下去简单介绍下如何利用sentinel的dashboard进行流控和熔断。一、流控(服务提供方设置)1、在簇点链路找到对应资源名,点击流控,选择QPS或者线程数,单位是秒,设置单机阈值流控:QPS:每秒访问数;线程数:也就是时间段内只有对应的线程数处理,超过的线程请求会等待2、流控模式:直接、关联......
  • Spring事务传播机制(最全示例)
    我们在使用Spring框架进行开发时,经常在service层写很多方法,而且这些方法都是带事务的,那么Spring的事务怎么在多个方法之间传播呢?今天我们就仔细聊一聊。Spring的事务传播机制主要解决在多个方法之间,事务如何传递的问题,通常有7种传播类型:REQUIREDSUPPORTSMANDATORYREQUIRES_N......
  • SpringBoot使用@Scheduled注解实现定时任务
    SpringBoot使用@Scheduled注解实现定时任务_springbootscheduled注解-CSDN博客 importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.scheduling.annotation.EnableSched......
  • SpringBoot养老院管理系统 计算机专业毕业设计源码06036
    摘 要随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设养老院管理系统。本设计主要实现集人性化、高效率、便捷等优点于一身的养老院管理......
  • SpringBoot框架在电子商务平台中的应用
    3系统分析这部分内容虽然在开发流程中处于最开始的环节,但是它对接下来的设计和实现起着重要的作用,因为系统分析结果的好坏,将直接影响后面环节的开展。3.1可行性研究影响系统开发的因素有很多,比如开发成本高就不适合开展,或者是开发时间超过了预期,也不适合开展等等。所以,......