当前位置: 首页 > news >正文

熟悉并使用Spring框架 - 注解篇

文章目录

  • 前言
  • 什么是Spring注解配置
  • 开启注解支持
  • 常用的Bean定义注解
    • @Component
  • Bean的命名
  • 依赖注入注解
    • @Autowired
    • @Resource
    • @Qualifier
  • Bean的作用域
  • 配置类的使用
    • @Configuration
    • @Value
  • 完整示例
  • 小结

前言

上次我们聊了Spring的XML配置,今天来看看注解配置。说实话,注解配置真的比XML方便太多了,代码更简洁,维护也更容易。现在大部分项目都在用注解,所以这个必须得掌握。

什么是Spring注解配置

简单来说,就是用注解来告诉Spring哪些类是Bean,如何进行依赖注入。不用写那么多XML了,直接在Java代码上加注解就行。

开启注解支持

首先需要告诉Spring使用注解。如果你还在用XML文件,加上这一行:

<!-- 开启注解扫描 -->
<context:component-scan base-package="com.coldscholor"/>

当然,更简单的方式是用Java配置类:

@Configuration
@ComponentScan("com.coldscholor")
public class AppConfig {}

常用的Bean定义注解

@Component

这是最基本的Bean定义注解:

@Component
public class UserService {public void sayHello() {System.out.println("Hello from UserService");}
}

除了@Component,还有几个更具体的:

@Service  // 业务层
public class OrderService {public void processOrder() {System.out.println("处理订单");}
}@Repository  // 数据访问层
public class UserDao {public void saveUser() {System.out.println("保存用户");}
}@Controller  // 控制层
public class UserController {public void handleRequest() {System.out.println("处理请求");}
}

其实功能上都一样,只是这三个注解用于分层架构更规范。

Bean的命名

默认情况下,Bean的名字就是类名首字母小写:

@Component  // Bean名称为 userService
public class UserService {
}@Component("myUserService")  // 自定义Bean名称
public class UserService {
}

依赖注入注解

@Autowired

可以用在字段上:

@Service
public class OrderService {@Autowiredprivate UserService userService;public void createOrder() {userService.sayHello();}
}

也可以用在构造器上:

@Service
public class OrderService {private UserService userService;@Autowiredpublic OrderService(UserService userService) {this.userService = userService;}
}

还可以用在setter方法上:

@Service
public class OrderService {private UserService userService;@Autowiredpublic void setUserService(UserService userService) {this.userService = userService;}
}

@Resource

@Service
public class OrderService {@Resource(name = "userService")private UserService userService;
}

@Qualifier

当有多个同类型的Bean时:

@Service("emailService")
public class EmailNotificationService implements NotificationService {// 邮件通知实现
}@Service("smsService") 
public class SmsNotificationService implements NotificationService {// 短信通知实现
}@Controller
public class NotificationController {@Autowired@Qualifier("emailService")private NotificationService notificationService;
}

Bean的作用域

用@Scope注解来指定:

@Component
@Scope("singleton")  // 单例,这是默认的
public class SingletonBean {
}@Component
@Scope("prototype")  // 原型,每次获取都创建新的
public class PrototypeBean {
}

配置类的使用

@Configuration

@Configuration
public class DatabaseConfig {@Beanpublic DataSource dataSource() {// 创建数据源return new HikariDataSource();}@Beanpublic JdbcTemplate jdbcTemplate(DataSource dataSource) {return new JdbcTemplate(dataSource);}
}

@Value

@Component
public class DatabaseService {@Value("${database.url}")private String databaseUrl;@Value("${database.timeout:30}")  private int timeout;
}

需要配合properties文件使用:

@Configuration
@PropertySource("classpath:application.properties")
public class AppConfig {
}

application.properties文件:

database.url=jdbc:mysql://localhost:3306/test
database.timeout=60

完整示例

// 1. 配置类
@Configuration
@ComponentScan("com.coldscholor")
@PropertySource("classpath:application.properties")
public class AppConfig {
}// 2. Service层
@Service
public class UserService {@Value("${app.name}")private String appName;public void welcome(String name) {System.out.println("欢迎 " + name + " 使用 " + appName);}
}// 3. Controller层
@Controller
public class UserController {@Autowiredprivate UserService userService;public void handleUser(String userName) {userService.welcome(userName);}
}// 4. 启动类
public class Application {public static void main(String[] args) {ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);UserController controller = context.getBean(UserController.class);controller.handleUser("张三");((AnnotationConfigApplicationContext) context).close();}
}

application.properties:

app.name=我的Spring应用

小结

注解配置是现在Spring开发的主流方式,相比XML配置更加简洁直观。优点在于代码更简洁,配置和使用Bean简单,它的核心就是几个注解:

  • @Component及其子注解用于定义Bean
  • @Autowired用于依赖注入
  • @Configuration用于配置类
  • @Value用于注入配置值
http://www.dtcms.com/a/328147.html

相关文章:

  • JavaWeb从入门到精通!第二天!(Servlet)
  • Jenkins + SonarQube 从原理到实战三:SonarQube 打通 Windows AD(LDAP)认证与踩坑记录
  • 基于多模态大模型的个性化学习路径生成系统研究
  • 循环神经网络(RNN)全面解析
  • 运维学习Day22——Anisible自动化与基本使用
  • SpringBoot面试宝典
  • MySQL User表入门教程
  • Spyglass CDC rule
  • NLP—词向量转换评论学习项目分析
  • 28.分类算法:让机器学会分类
  • Tauri Qt孰优孰劣
  • ncurses 6.5 交叉编译移植到OpenHarmomy
  • 2025年渗透测试面试题总结-16(题目+回答)
  • Linux文件系统:从虚拟接口到物理实现的架构解析
  • 【C#】用队列构建一个对象池管理对象的创建和释放
  • NumPy 快速入门与实战教程(逐行拆解 + 专业扩展)
  • 详细了解sklearn中的CountVectorizer
  • 【c++深入系列】:万字详解模版(下)
  • [Robotics_py] 路径规划算法 | 启发式函数 | A*算法
  • MaxKB+合合信息TextIn:通过API实现PDF扫描件的文档审核
  • LRU算法与LFU算法
  • 农业智慧大屏系统 - Flask + Vue实现
  • 云计算分类与主流产品
  • iOS 文件管理全流程实战,从开发调试到数据迁移
  • 初识神经网络04——构建神经网络2
  • 软路由雷达:基于OpenWrt系统的传统逆向思路的冷门实现
  • 外部中断寄存器的实现-库函数版(STC8)
  • Android性能优化:架构层面的性能考量
  • 【第13话:泊车感知】场景检测与分割:自主泊车场景中的检测及语义分割方法
  • Linux中的tar 和crontab命令