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

JAVA-SSM学习2 Spring-注解开发

感じてどきどき

注解管理IOC

之前提到的@Component注解以及其他在被依赖的类前添加的注解

@Component‌:通用的组件注解,可以作用在任意层的类上。这是最基础的注解,其他三个注解都是它的特化版本。
‌@Controller‌:用于标识控制层的组件,通常与 Spring MVC 结合使用,处理 Web 请求。值得注意的是声明控制层的bean必须只能用@Controller
‌@Service‌:用于标识业务逻辑层的组件,处理具体的业务逻辑。
‌@Repository‌:用于标识数据访问层(DAO 层)的组件,负责数据访问操作。

添加注解之后需要在配置文件中使用<context:component-scan>来设置Component的扫描范围,使用base-package属性具体指定范围

<context:component-scan base-package="org.example" />

配置类取代配置文件

原配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="org.example" /></beans>

使用@Configuration注解设置生成一个配置类,使用@ComponentScan设置扫描范围

@Configuration
@ComponentScan("org.example")
public class SpringConfig {}

获取Bean对象,使用AnnotationConfigApplicationContext后接配置类类型获取容器

public class App2 {public static void main(String[] args) {ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);Service service = ctx.getBean(Service.class);service.ServiceFunc();}
}

注解设置bean作用范围和生命周期

在类名上添加@Scope注解设置单例还是非单例,在类中方法上添加@PostConstruct注解设置生命周期启动函数,添加@PreDestroy注解设置生命周期销毁函数

@Component
@Scope("singleton")
public class DaoImpl implements Dao {@Overridepublic void DaoFunc() {System.out.println("Now is DaoFunc!");}@Override@PostConstructpublic void Init() {System.out.println("Now InitFunc!");}@Override@PreDestroypublic void Destroy() {System.out.println("Now DestroyFunc!");}
}

效果如下:
image

注解开发依赖注入

使用@Autowire注解实现自动依赖注入,使用@Value注解实现普通类型注入

@Component
public class DaoImpl implements Dao {@Value("9")private Integer Number;@Value("LoveLive")private String Status;@Overridepublic void DaoFunc() {System.out.println("Now is DaoFunc!");System.out.println("Now Number is : "+Number+" ,Status is : "+Status);}}@Component
public class ServiceImpl implements Service {@Autowiredprivate Dao dao;public void ServiceFunc() {System.out.println("Now is Service!");dao.DaoFunc();}}

效果如下:
image

如果使用properties文件加载,需要在配置类中添加@PropertySource({})注解添加相关文件,然后在类中使用@Value(${})获取相关值

// src/main/resources/jdbc.properties
Number=9
Status=LoveLive// src/main/java/org/example/config/SpringConfig.java
@Configuration
@ComponentScan("org.example")
@PropertySource({"jdbc.properties"})
public class SpringConfig {
}// src/main/java/org/example/Dao/impl/DaoImpl.java
@Component
public class DaoImpl implements Dao {@Value("${Number}")private Integer Number;@Value("${Status}")private String Status;@Overridepublic void DaoFunc() {System.out.println("Now is DaoFunc!");System.out.println("Now Number is : "+Number+" ,Status is : "+Status);}}

注解开发管理第三方Bean

使用@Bean注解在单独的配置类中创建第三方Bean对象

//设置配置类
@Configuration
public class CommonConfig {@Beanpublic SAXReader saxReader() {return new SAXReader();}  
}

在配置类上方添加@Import()将指定的类导入到Spring容器中,使其成为容器管理的Bean

@Configuration
@Import({CommonConfig.class})
public class MainConfig {// ...
}

注解开发第三方Bean注入资源

普通类型使用成员变量配合@Value注入;引用类型使用方法形参传递,@Bean会自动分配

XML配置文件和Bean注解对比

概括如下,其中标红为常用注解:
image

http://www.jsqmd.com/news/624043/

相关文章:

  • APK Installer:Windows原生运行Android应用的技术架构深度解析
  • 定义莫尔-库仑土体材料
  • 如何用Hessian矩阵快速判断凸函数?附Python代码示例
  • 数据预处理实战指南:从原始数据到模型输入的完整流程
  • 芯片SVD文件生成实战:从零到一构建ARM Cortex-M4设备描述
  • HbuilderX实战:5个提升前端开发效率的隐藏技巧(附配置截图)
  • 不锈钢艺术金属创新工艺与高端应用:鼎钻钢业2026技术白皮书 - 博客万
  • 小白友好!科哥CAM++镜像快速搭建指南,轻松实现说话人验证与特征提取
  • Flutter鸿蒙化实战:从工具链报错到流畅构建的避坑指南
  • 从零上手SimSwap:单图免训练视频换脸项目的部署与实战解析
  • Opis Closure源码深度剖析:从ReflectionClosure到安全提供者
  • FreeRTOS上GPIO模拟IIC通信,如何搞定us级延时和任务调度这两个大坑?
  • 振动信号处理中的频域积分技术:消除低频噪声的工程实践
  • 上海室内设计品牌推荐:差异化定制与美学表达的多元探索 - 时事观察官
  • 【LLM工程化生死线】:为什么83%的大模型项目卡在数据Pipeline?附Gartner验证的4层校验框架
  • 2025年Node.js打包工具终极指南:传统方案的技术价值与生态现状
  • 芯片封装材料大比拼:环氧树脂 vs 陶瓷 vs 金属,哪种更适合你的项目?
  • 项目介绍 MATLAB实现基于GRU-Transformer门控循环单元(GRU)结合Transformer编码器进行多变量时间序列预测的详细项目实例(含模型描述及部分示例代码)专栏近期有大量优惠 还
  • Windows PDF处理神器:3分钟极速安装Poppler-windows完整指南
  • SyncBackSE和Pro怎么选?家庭用户与小微企业的避坑指南(V11版)
  • 长沙全居邦防水工程有限公司:天心区外墙防水防水补漏公司 - LYL仔仔
  • Rust测试实战
  • ChanlunX缠论插件:5分钟快速掌握专业级股市技术分析
  • 语义分割新手避坑指南:从Labelme标注到VOC数据集,我踩过的那些坑都帮你填平了
  • Navicat试用期重置终极指南:5步轻松突破数据库工具时间限制
  • 讲讲全国范围内靠谱的一次性吸管制造商,涿州市荟芳塑料制品如何? - 工业推荐榜
  • higress 这个中登才是AI时代的心头好阜
  • Warehouse vs. Depot:如何根据业务需求选择合适的存储解决方案
  • AKSUN 推出 DR-IR 系列连续型结晶干燥机 PET 结晶时间数据显示可缩短至 7–17 分钟 - 博客万
  • UE Viewer终极教程:解锁虚幻引擎资源宝库的完整指南