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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 【重温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;
    }
}
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
22天前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
165 73
|
18天前
|
Java Spring 容器
【SpringFramework】Spring IoC-基于注解的实现
本文主要记录基于Spring注解实现IoC容器和DI相关知识。
48 21
|
22天前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
|
22天前
|
Java Spring
【Spring配置】idea编码格式导致注解汉字无法保存
问题一:对于同一个项目,我们在使用idea的过程中,使用汉字注解完后,再打开该项目,汉字变成乱码问题二:本来a项目中,汉字注解调试好了,没有乱码了,但是创建出来的新的项目,写的注解又成乱码了。
|
2月前
|
前端开发 Java Spring
Spring MVC核心:深入理解@RequestMapping注解
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的核心,它将HTTP请求映射到控制器的处理方法上。本文将深入探讨`@RequestMapping`注解的各个方面,包括其注解的使用方法、如何与Spring MVC的其他组件协同工作,以及在实际开发中的应用案例。
52 4
|
2月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
174 2
|
2月前
|
前端开发 Java Spring
探索Spring MVC:@Controller注解的全面解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序的基石之一。它不仅简化了控制器的定义,还提供了一种优雅的方式来处理HTTP请求。本文将全面解析`@Controller`注解,包括其定义、用法、以及在Spring MVC中的作用。
69 2
|
2月前
|
消息中间件 Java 数据库
解密Spring Boot:深入理解条件装配与条件注解
Spring Boot中的条件装配与条件注解提供了强大的工具,使得应用程序可以根据不同的条件动态装配Bean,从而实现灵活的配置和管理。通过合理使用这些条件注解,开发者可以根据实际需求动态调整应用的行为,提升代码的可维护性和可扩展性。希望本文能够帮助你深入理解Spring Boot中的条件装配与条件注解,在实际开发中更好地应用这些功能。
50 2
|
2月前
|
JSON Java 数据格式
springboot常用注解
@RestController :修饰类,该控制器会返回Json数据 @RequestMapping(“/path”) :修饰类,该控制器的请求路径 @Autowired : 修饰属性,按照类型进行依赖注入 @PathVariable : 修饰参数,将路径值映射到参数上 @ResponseBody :修饰方法,该方法会返回Json数据 @RequestBody(需要使用Post提交方式) :修饰参数,将Json数据封装到对应参数中 @Controller@Service@Compont: 将类注册到ioc容器
|
2月前
|
前端开发 Java 开发者
Spring MVC中的控制器:@Controller注解全解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序控制层的核心。它不仅简化了控制器的定义,还提供了灵活的请求映射和处理机制。本文将深入探讨`@Controller`注解的用法、特点以及在实际开发中的应用。
137 0