【重温SSM框架系列】3 - Spring注解开发(注解代替xml文件配置)

简介: 【重温SSM框架系列】3 - Spring注解开发(注解代替xml文件配置)

为什么使用注解开发

首先你需要对注解有一定的了解才能进行下面的内容,对JAVA中的注解还比较陌生的小伙伴可以参考一下下面这篇文章,对JAVA注解有一个初步的了解。

从前面的内容我们可以发现,Spring开发中有许多的配置,非常的费时费力,影响开发效率。

Spring本身就是一个轻代码而重配置的框架,配置比较繁重,影响开发效率,所以就在Spring中加入了注解,使用注解代替原来的xml配置文件,这样就可以简化配置,提升开发效率。

Spring中的常用注解

  • @Component:使用在类上用于实例化Bean
  • @Controller:使用在web层类上用于实例化Bean(作用于@Component一致)
  • @Service:使用在service层类上用于实例化Bean(作用于@Component一致)
  • @Repository:使用在dao层类上用于实例化Bean(作用于@Component一致)
  • @Autowired:使用在字段上用于根据类型依赖注入
  • @Qualifier:结合@Autowired一起使用用于根据名称进行依赖注入
  • @Resource:相当于@Autowired+@Qualifier,按照名称进行注入
  • @Value:注入普通属性
  • @Scope:标注Bean的作用范围
  • @PostConstruct:使用在方法上标注该方法是Bean的初始化方法
  • @PreDestroy:使用在方法上标注该方法是Bean的销毁方法

以上的这些注解主要是替代 Bean 标签的配置。但是这些注解还不能全部替代xml配置文件,包括以下几个新注解:

  • @Configuration:用于指定当前类是一个Spring 配置类,当创建容器时会从该类上加载注解
  • @ComponentScan:用于指定Spring 在初始化容器时要扫描的包
  • @Bean:使用在方法上,标注将该方法的返回值存储到Spring 容器中
  • @PropertySource:用于加载.properties 文件中的配置
  • @Import:用于导入其他配置类

使用注解代替XML文件配置

使用注解进行开发时,需要在核心配置文件中配置组件扫描,作用是指定哪个包及其子包下的Bean需要进行扫描以便识别使用注解配置的类、字段和方法。

也就是告诉Spring在这些包下面使用了注解,运行的时候需要扫描。

<context:component-scan base-package="com.wang"></context:component-scan>

base-package就是指向使用注解的包。

代替 Bean 标签的注解

前面我们讲过 Bean 标签的一些基本属性,如下:

id:Bean实例在Spring容器中的唯一标识;
class:配置Bean的全包名(全限定名);
scope:配置对象的作用范围;
init-method:指定类中的初始化方法名称;
destroy-method:指定类中销毁方法名称。

现在我们就使用注解的方式来代替xml文件中 Bean 标签的配置。

@Component代替id和class属性

在xml中将一个类交给Spring容器管理的配置是这样的:

<bean id="userDao" class="com.wang.dao.impl.UserDaoImpl"></bean>

使用@Component注解后是这样的(直接在对应类上面加上@Component即可):

//<bean id="userDao" class="com.wang.dao.impl.UserDaoImpl"></bean>
@Component("userDao")
public class UserDaoImpl implements UserDao {

【注】: ==对于@Controller、@Service、@Repository三个注解,他们的作用与@Component注解是一致的,只是一个语义化的表达,体现出我们的三层架构==(即@Controller对应controller层的类、@Service对应service层的类、@Repository对应dao层的类)

@Autowired、@Qualifier、@Resource代替字标签 property的依赖注入

xml文件中的依赖注入如下:

    <bean id="userService" class="com.wang.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property>
    </bean>

使用注解代替如下:
在这里插入图片描述
@Resource注解相当于于@Autowired+@Qualifier注解,按照名称进行注入。

@Value代替property普通属性注入

xml中的值注入:

    <bean id="user" class="com.wang.pojo.User">
        <property name="username" value="test"/>
        <property name="password" value="testPassword"/>
    </bean>

使用注解后的值注入:

@Component("user")
public class User {
    private Integer id;
    @Value("test")
    private String username;
    @Value("testPassword")
    private String password;
}

@Scope注解代替scope属性标注Bean的范围

xml中scope属性标注Bean范围

<bean id="userDao" class="com.wang.dao.impl.UserDaoImpl" scope="prototype">
</bean>

使用@Scope注解标注Bean范围
在这里插入图片描述

@PostConstruct、@PreDestroy注解代替init-method、destroy-method属性配置

xml中配置Bean的初始化方法和销毁方法。

<bean id="user" class="com.wang.pojo.User" init-method="start" destroy-method="end"></bean>

@PostConstruct、@PreDestroy注解配置Bean的初始化方法和销毁方法。

    @PostConstruct
    public void start(){
        System.out.println("初始化方法");
    }

    @PreDestroy
    public void end(){
        System.out.println("销毁方法");
    }

代替其他标签的注解

@Configuration

学习下面几个注解需要先创建一个类,并在该类上加@Configuration注解,表明该类是一个Spring的核心配置文件,以代替applicationContext.xml。

@Configuration      //标志该类为Spring的核心配置类
public class SpringConfig {
}

@ComponentScan代替context:component-scan配置包扫描

xml中配置包扫描:

<context:component-scan base-package="com.wang"></context:component-scan>

配置类中配置包扫描:

@Configuration      //标志该类为Spring的核心配置类
@ComponentScan("com.wang")
public class SpringConfig {
}

@Bean代替非自定义的Bean的配置

xml中配置数据源如下:

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>

配置文件中配置数据源:

@Configuration      //标志该类为Spring的核心配置类
@ComponentScan("com.wang")
public class SpringConfig {

    @Bean("dataSource")
    public DataSource getDataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        return dataSource;
    }
}

@PropertySource代替context:property-placeholder加载外部properties配置文件

xml中加载.properties 文件中的配置

<context:property-placeholder location="jdbc.properties"/>

配置类中加载.properties 文件中的配置
在这里插入图片描述获取jdbc.properties中配置的内容

@Configuration      //标志该类为Spring的核心配置类
@ComponentScan("com.wang")
@PropertySource("jdbc.properties")
public class SpringConfig {

    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    @Bean("dataSource")
    public DataSource getDataSource(){
        DruidDataSource dataSource = new DruidDataSource();
//        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
//        dataSource.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai");
//        dataSource.setUsername("root");
//        dataSource.setPassword("123456");
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
9077 132
|
缓存 监控 Java
SpringBoot @Scheduled 注解详解
使用`@Scheduled`注解实现方法周期性执行,支持固定间隔、延迟或Cron表达式触发,基于Spring Task,适用于日志清理、数据同步等定时任务场景。需启用`@EnableScheduling`,注意线程阻塞与分布式重复问题,推荐结合`@Async`异步处理,提升任务调度效率。
1847 128
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
XML Java 数据格式
常用SpringBoot注解汇总与用法说明
这些注解的使用和组合是Spring Boot快速开发和微服务实现的基础,通过它们,可以有效地指导Spring容器进行类发现、自动装配、配置、代理和管理等核心功能。开发者应当根据项目实际需求,运用这些注解来优化代码结构和服务逻辑。
822 12
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
983 2
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
815 0
探索Spring Boot的@Conditional注解的上下文配置
|
智能设计 Java 测试技术
Spring中最大化@Lazy注解,实现资源高效利用
本文深入探讨了 Spring 框架中的 `@Lazy` 注解,介绍了其在资源管理和性能优化中的作用。通过延迟初始化 Bean,`@Lazy` 可显著提升应用启动速度,合理利用系统资源,并增强对 Bean 生命周期的控制。文章还分析了 `@Lazy` 的工作机制、使用场景、最佳实践以及常见陷阱与解决方案,帮助开发者更高效地构建可扩展、高性能的 Spring 应用程序。
517 0
Spring中最大化@Lazy注解,实现资源高效利用
|
XML 前端开发 Java
讲解SSM的xml文件
本文详细介绍了SSM框架中的xml配置文件,包括springMVC.xml和applicationContext.xml,涉及组件扫描、数据源配置、事务管理、MyBatis集成以及Spring MVC的视图解析器配置。
476 1
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
567 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)