Spring lOC的注解使用与开发

news2024/11/26 20:35:18

Spring

  • Spring IoC注解式开发
    • 为什么使用注解
    • Spring注解的使用
    • @Value注解
    • @Autowired注解
    • 全注解式开发


Spring IoC注解式开发

为什么使用注解

注解的存在主要是为了简化XML的配置,注解的开发能大大提高我们的开发效率的,但它在一定程度上违背了OCP原则。

Spring注解的使用

如何使用以上的注解呢?

第一步:加入aop的依赖

加入spring-context依赖之后,会关联加入aop的依赖,不用做

第二步:在配置文件中指定扫描的包,Alt+enter添加context命名空间 annotate.xml

<?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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">


    <context:component-scan base-package="com.w.spring6.annotate"/>
</beans>

第三步:在Bean类上使用注解

package com.w.spring6.annotate;

import org.springframework.stereotype.Component;

@Component(value = "userBean")
public class User {
}

编写测试程序:
AnnotationTest.java

package com.w.spring.test;

import com.w.spring6.annotate.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AnnotationTest {

    @Test
    public void testBean(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("annotate.xml");
        User userBean = applicationContext.getBean("userBean", User.class);
        System.out.println(userBean);
    }
}

运行结果:
在这里插入图片描述

@Value注解

当属性的类型是简单类型时,可以使用@Value注解进行注入。

例:
User.java

package com.w.spring6.annotate;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component(value = "userBean")
public class User {
    @Value(value = "zhangsan")
    private String name;
    @Value("20")
    private int age;

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

annotate.xml

<?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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">


    <context:component-scan base-package="com.w.spring6.annotate"/>

</beans>

测试程序:

    @Test
    public void testValue(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("annotate.xml");
        Object user = applicationContext.getBean("userBean");
        System.out.println(user);
    }

运行结果:
在这里插入图片描述

@Autowired注解

@Autowired注解可以用来注入非简单类型
单独使用@Autowired注解,默认根据类型装配。

例:
UserDao接口

package com.w.spring6.dao;

public interface UserDao {
    void insert();
}

UserDaoForMySQL.java

package com.w.spring6.dao;

import org.springframework.stereotype.Component;

@Component //纳入bean管理
public class UserDaoForMySQL implements UserDao{
    @Override
    public void insert() {
        System.out.println("正在向mysql数据库插入User数据");
    }
}

UserService.java

package com.w.spring6.service;

import com.w.spring6.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component // 纳入bean管理
public class UserService {

    @Autowired // 在属性上注入
    private UserDao userDao;

    // 没有提供构造方法和setter方法。

    public void save(){
        userDao.insert();
    }
}

annotate.xml

<context:component-scan base-package="com.w.spring6.dao,com.w.spring6.service"/>

测试程序:

@Test
public void testAutowired(){
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("annotate.xml");
    UserService userService = applicationContext.getBean("userService", UserService.class);
    userService.save();
}

运行结果:
在这里插入图片描述

全注解式开发

所谓的全注解开发就是不再使用spring配置文件了。写一个配置类来代替配置文件。

配置类代替spring配置文件
Spring6Configuration.java

package com.w.spring6.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan({"com.w.spring6.dao", "com.w.spring6.service"})
public class Spring6Configuration {
}

编写测试程序:不再new ClassPathXmlApplicationContext()对象了。

@Test
public void testNoXml(){
    ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Spring6Configuration.class);
    UserService userService = applicationContext.getBean("userService", UserService.class);
    userService.save();
}

运行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1213376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能客服外包与传统呼叫中心人力外包对比有哪些优势?

随着人工智能技术的飞速发展&#xff0c;智能客服外包服务为企业提供了更高效、更智能的客户服务解决方案&#xff0c;越来越多的企业更愿意选择智能客服外包服务。与传统呼叫中心人力外包相比&#xff0c;智能客服外包有哪些优势呢&#xff1f; 减轻人力资源压力 智能客服系统…

Linux指令(二)

&#x1f3a0;&#x1f3a0;&#x1f3a0;&#x1f3a0;&#x1f3a0;&#x1f3a0;&#x1f3a0;&#x1f3a0;&#x1f3a0;&#x1f3a0;&#x1f3a0;&#x1f3a0;&#x1f3a0;&#x1f3a0;&#x1f3a0;&#x1f3a0; &#x1f396;️&#x1f396;️&#x1f396;️&a…

设备报修流程要怎么优化?工单管理系统如何提高设备维修效率?

在当今快速发展的数字化时代&#xff0c;传统的设备报修流程已经难以满足企业的需求。纸质记录、电话通知等传统方式不仅效率低下&#xff0c;而且容易造成信息遗漏和错误。为了解决这些问题&#xff0c;企业需要引入一种更加高效、便捷的维修管理系统——的修工单管理系统。  …

TSINGSEE青犀视频平台EasyCVR修改设备通道不生效是什么原因?该如何解决?

视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#…

如何在Windows 10上恢复丢失的文件?

丢失文件时该怎么办&#xff1f; 在使用电脑的过程中&#xff0c;我们经常会遇到丢失重要文件的情况。无论是意外删除、病毒攻击还是电脑格式化&#xff0c;都可能导致文件丢失。在面对这些情况时&#xff0c;大多数人总是会问&#xff1a;“如何在电脑上恢复丢失的文件&am…

每天学习一点点之从 SonarQube Bug 看对线程中断异常的处理

最近在基于 SonarQube 对代码进行质量优化&#xff0c;说实话&#xff0c;之前觉得 SonarQube 这种很无聊&#xff0c;但最近静下心来看了一些扫描出来的问题后&#xff0c;发现这种工具作用还是挺大的&#xff0c;能够帮助我们找到代码中的隐藏缺陷&#xff0c;从而夯实基础。…

遍历一个对象,并得出所对应的值

var dates {//定义的对象year:now.getFullYear(),month:now.getMonth()1,date:now.getDate(),hour:now.getHours(),minute:now.getMinutes(),second:now.getSeconds() }//开始遍历循环 var val; for (val in dates){console.log(对象名称&#xff1a;val-对象的值&#xff1a;…

【性能】如何计算 Web 页面的 FP 指标

什么是 FP 指标 FP (First Paint) 为首次渲染的时间点&#xff0c;在性能统计指标中&#xff0c;从用户开始访问 Web 页面的时间点到 FP 的时间点这段时间可以被视为 白屏时间&#xff0c;也就是说在用户访问 Web 网页的过程中&#xff0c;FP 时间点之前&#xff0c;用户看到的…

网络嵌入综述

图嵌入综述整理&#xff08;上&#xff09; 来源&#xff1a;图算法探索系列&#xff08;一&#xff09;&#xff1a;图嵌入模型的原理和应用篇【万字长文】 图9是DeepWalk模型在推荐场景下的应用。图9&#xff08;a&#xff09;显示的是不同用户在不同Session中的item点击序列…

8年经验的软件工程师建议

我希望在职业生涯早期就开始做的事情和我希望以不同的方式做的事情。 大家好&#xff0c;我已经做了八年半的软件工程师。这篇文章来源于我最近对自己在职业生涯中希望早点开始做的事情以及希望以不同方式做的事情的自我反思。 我在这里分享的对任何希望提高和进步到高级甚至…

【PyQt小知识 - 2】:QTextEdit内容的更新和获取、隐藏或显示滚动条、光标插入文本、文本自适应移动

文章目录 QTextEdit更新和获取内容隐藏或显示滚动条光标插入文本文本自适应移动 QTextEdit 更新和获取内容 更新&#xff1a;QTextEdit().setText(text) 或 QTextEdit().setPlainText(text) 获取&#xff1a;QTextEdit().toPlainText() setText()和setPlainText()的区别&…

自动化测试Mock神器:轻松模拟HTTP请求..

一、背景 在日常测试过程中或者研发开发过程中&#xff0c;目前接口暂时没有开发完成&#xff0c;测试人员又要提前介入接口测试中&#xff0c;测试人员不仅仅只是简单的编写测试用例&#xff0c;也可以通过一些mock的方法进行来提前根据接口测试的情况进行模拟返回接口的信息…

怎么选好用的电脑监控软件

在选择好用的电脑监控软件时&#xff0c;需要考虑多个因素&#xff0c;包括功能和特性、安全性和隐私保护、用户界面、实时监控和报警功能、日志记录和报告功能、兼容性以及用户评价和口碑等。 首先&#xff0c;需要明确你需要监控的内容&#xff0c;例如屏幕活动、应用程序使用…

U盘变成了.lnk,怎么处理

没曾想客户电脑是是不是有个病毒啥的&#xff0c;把我的U盘直接干成了只有一个.lnk的一个快捷方式&#xff0c;后面百度找了很多方法&#xff0c;最后找到了一个非常实用的方法&#xff0c;后整理了一下交给大家 方法如下&#xff1a; 1.找到电脑U盘文件 2.搜索框中输入你之…

正则提取记录

使用正则 https?:\/\/([^\/\s])/

TikTok女性创作者:媒体世界的新领袖

在数字时代&#xff0c;社交媒体已成为媒体和娱乐产业的关键组成部分&#xff0c;而TikTok作为最受欢迎的短视频分享平台之一&#xff0c;为女性创作者提供了一个独特的机会来在媒体世界中崭露头角。 这个平台不仅为女性创作者提供了一个创作和分享自己的声音、观点和创意的空…

Arthas搭建与使用

背景 在平时开发过程中经常会遇到日志打印有问题、代码不知道是否执行、定位运行缓慢的代码段等需求&#xff0c;这时往往需要排查很久&#xff0c;并且由于我们基于docker进行部署&#xff0c;一旦有问题要发包调试的话构建过程还是比较复杂耗时的&#xff0c;有时候打包只是…

为什么说MES管理系统是车间层与管理层的桥梁

随着制造业的快速发展&#xff0c;企业对于生产过程中的管理要求越来越高。为了满足这一需求&#xff0c;MES生产管理系统应运而生。MES管理系统作为车间层与管理层之间的桥梁&#xff0c;扮演着至关重要的角色。本文将探讨为什么说MES管理系统是车间层与管理层之间的桥梁。 一…

动画短片怎么制作gif?一个方法简单又好用

网络上常常能看到动画短片&#xff0c;虽然时长短但是内容很丰富。当我们想要将这种动画短片做成gif格式图片的时候&#xff0c;应该怎么办呢&#xff1f;很简单&#xff0c;通过使用在线制作动画&#xff08;https://www.gif.cn/&#xff09;网站&#xff0c;无需下载软件上传…

uniapp生成自定义(分享)图片并保存到相册

需求描述 在一个页面中底部有个保存图片的功能&#xff0c;点击能够保存一张生成的自定义表格图片。 第一眼见到这个需求 自己会出现了两个问题 如何去处理图片中的自定义内容以及样式如何将自定义内容转化成图片 至于保存图片&#xff0c;uniapp有对应的api去实现uni.saveIma…