Spring中基于注解的IOC配置项目举例详解

文章目录

  • Spring中基于注解的IOC配置项目举例详解
    • 1、创建如下结构的Spring项目
      • pom.xml
      • dao层
      • service层
      • application.xml
      • log4j.properties
    • 2、用于创建对象的常用注解
      • 2.1、@Controller或@Controller("user")声明bean,且id="user"
      • 2.2、@Service或用@Service("user")声明bean,且id="user"
      • 2.3、@Repository或同上面两个
      • 2.4、@Component
      • 2.5、@Scope
      • 以上几个注解功能相同,但为了在项目实现过程中便于区分则一般按照下面分类使用
    • 3、用于属性注入的注解
      • 3.1、@Autowired
      • 3.2、@Resource
      • 3.3、@Value
    • 测试类

Spring中基于注解的IOC配置项目举例详解

1、创建如下结构的Spring项目

在这里插入图片描述

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>SpringDemo</artifactId><groupId>cn.fpl</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>Spring_IOC_Annotation</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.8.RELEASE</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.30</version></dependency></dependencies>
</project>

dao层

public class UserDaoImpl implements UserDao {@Overridepublic void addUser(){System.out.println("insert into tb_user......");}
}

service层

public class UserServiceImpl implements UserService {@Overridepublic void addUser(){System.out.println(userDao+"       "+name+"      "+age);userDao.addUser();}
}

application.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"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 "><!--告诉spring,容器启动时要扫描的包,且spring会依据注解创建对象并存到IOC容器中--><context:component-scan base-package="cn.fpl"></context:component-scan>
</beans>

log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

2、用于创建对象的常用注解

2.1、@Controller或@Controller(“user”)声明bean,且id=“user”

  • 作用:

    把资源交给spring来管理,相当于:<bean id="" class="">;一般用于表现层。

  • 属性:

    value:指定bean的id;如果不指定value属性,默认bean的id是当前类的类名首字母小写

2.2、@Service或用@Service(“user”)声明bean,且id=“user”

  • 作用:

    把资源交给spring来管理,相当于:<bean id="" class="">;一般用于业务层。

  • 属性:

    value:指定bean的id;如果不指定value属性,默认bean的id是当前类的类名首字母小写

2.3、@Repository或同上面两个

  • 作用:

    把资源交给spring来管理,相当于:<bean id="" class="">;一般用于持久层。

  • 属性:

    value:指定bean的id;如果不指定value属性,默认bean的id是当前类的类名,首字母小写

    2.4、@Component

    • 作用:

    把资源交给spring来管理,相当于:<bean id="" class="">;通用。

  • 属性:

    value:指定bean的id;如果不指定value属性,默认bean的id是当前类的类名,首字母小写;

    2.5、@Scope

    • 作用:

    指定bean的作用域范围。

  • 属性:

    value:指定范围的值,singleton prototype request session。

    以上几个注解功能相同,但为了在项目实现过程中便于区分则一般按照下面分类使用

@Controller:web
@Service:service
@Repository:dao
@Component:三层架构之外

3、用于属性注入的注解

以下四个注解的作用相当于:<property name="" ref="">

3.1、@Autowired

作用:

自动按照类型注入。set方法可以省略。

案例:

@Service
public class UserServiceImpl implements UserService {@Autowired //注入类型为UserDAO的beanprivate UserDao userDao;public void addUser(){userDao.addUser();}
}

3.2、@Resource

  • 作用:

    自动按照名字注入。set方法可以省略。

  • 属性:

​ name:指定bean的id。

案例:

@Service
public class UserServiceImpl implements UserService {@Resource(name="userDaoImpl")//注入id=“userDaoImpl”的beanprivate UserDao userDao;public void addUser(){userDao.addUser();}
}

3.3、@Value

  • 作用:

    注入基本数据类型和String类型数据的

  • 属性:

​ value:用于指定值

  • 案例一
@Service
public class UserServiceImpl implements UserService {@Resource(name="userDaoImpl") //注入id=“userDaoImpl”的beanprivate UserDao userDao;@Value("张三")//注入Stringprivate String name;@Value("18")//注入Integerprivate Integer age;public void addUser(){System.out.println(name+","+age);userDao.addUser();}
}
  • 案例二
  • 创建config.properties文件在resources文件夹下
name=张三
age=18
  • 在application.xml文件中加载配置文件
<!--加载config.properties配置文件,并把配置文件中的数据存到IOC容器中--><context:property-placeholder location="config.properties"></context:property-placeholder>
  • 注入属性值
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;@Value("${name}")//注入Stringprivate String name;@Value("${age}")//注入Integerprivate Integer age;public void addUser() {System.out.println(name+","+age);userDao.addUser();}
}

测试类

public static void main(String[] args) {ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");UserDao userDao = ac.getBean("userDaoImpl", UserDao.class);UserService userService = ac.getBean("user", UserService.class);userService.addUser();}

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

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

相关文章

leetcode04-元素符号积

题目链接&#xff1a; https://leetcode.cn/problems/sign-of-the-product-of-an-array/description/?envTypestudy-plan-v2&envIdprogramming-skills 思路&#xff1a; 设置一个符号位&#xff0c;初始值为1&#xff0c;遍历整个初始数组&#xff1a; 若碰到数组元素为0&…

大根堆小根堆

偷学的罒ω罒&#xff0c;非常好用的模版&#xff0c;分享一下。学过堆排应该很容易就看懂了&#xff0c;看不懂学一下堆排&#xff0c;不好懂的地方我也写了注释 小根堆 template<typename T> class smallest_heap { private://建堆T heap[10001];int len; public:sma…

2024年的诸多跨年演讲,为什么觉得像是鸡汤?

时光如白驹过隙匆匆而已&#xff0c;转瞬间已来到2024年。伴随着新的一年的到来&#xff0c;一些互联网大佬如罗振宇、吴晓波等纷纷直播演讲&#xff0c;分享各自的思考和感悟。值不值得听呢&#xff1f;为什么有时候觉得是鸡汤&#xff1f;这里分析下可能的原因。 罗振宇的“做…

基于EMD-SpEn(样本熵)联合小波阈值去噪

代码原理 基于 EMD-SpEn&#xff08;样本熵&#xff09;联合小波阈值去噪方法是一种用于信号降噪的信号处理方法&#xff0c;它结合了经验模态分解 (EMD)、样本熵 (SpEn) 和小波阈值处理技术。 首先&#xff0c;使用 EMD 将原始信号分解为一组称为经验模态函数 (IMFs) 的信号…

linux USB 设备基础知识

一个 USB 设备是一个非常复杂的事物, 如同在官方的 USB 文档(可从 http://www.usb.org 中得到)中描述的. 幸运的是, Linux 提供了一个子系统称为 USB 核, 来处理大部分复杂的工作. 这一章描述驱动和 USB 核之间的交互. 图 USB 设备概览 显示了 USB 设备如何包含配置, 接口, 和端…

VUE3跳转页面时 定时器未清除解决

一,问题 1、在vue中使用setTimeout定时器的时候&#xff0c;可能会遇到关不掉的情况&#xff0c;会存在明明已经在beforeDestroy和destroyed中设置了定时器清除了&#xff0c;但是有时候没生效&#xff0c;定时器还会继续执行。 2、在这里需要说一下setTimeout的使用场景&…

软件体系结构与风格复习一

总结了软件体系结构风格的经典部分。 从软件架构风格的定义&#xff0c;到软件架构模型&#xff0c;到一些经典的软件架构风格。然后是敏捷开发中的软件架构&#xff0c;之后是软件架构风格的设计和实现&#xff0c;最后是软件架构风格的质量和评估。 这是整个课程的开展顺序…

YoloV8改进策略:基于频域多轴表示学习模块|全网首发|高效涨点|代码注释详解

摘要 涨点效果:在我自己的数据集上,改进一的mAP50 由0.986涨到了0.99,mAP50-95由0.737涨到0.749,涨点明显! 本文尝试使用频域多轴表示学习模块改进YoloV8,尝试了4种改进方式,均有不同的涨点。 论文:《医学图像分割中的频域多轴表示学习》 https://arxiv.org/pdf/231…

新能源汽车@2023/24:卷价格、拼智能与生态战

【潮汐商业评论/原创】 2023年末尾&#xff0c;受到大众广泛热议的小米汽车发布会“姗姗来迟”&#xff0c;也为“乱战”中的2023新能源汽车市场画上了一个句号。 然而&#xff0c;在雷军整整三个小时看似平和的演讲与技术讲解中&#xff0c;实则在电机、智驾、智舱等核心技术…

正则表达式速查

正则表达式速查 1、正则表达式2、常用正则表达式速查手册 1、正则表达式 正则表达式是一种强大的文本匹配工具&#xff0c;可以用于在文本中查找特定的模式 正则表达式由不同类型的字符组成&#xff0c;包括普通字符、元字符、分隔符和转义字符等。其中&#xff1a; 普通字符&…

java基础之java8新特性-默认方法

目录 1.默认方法 jdk8之前的接口 jdk8的接口 默认方法的用途 1.默认方法 jdk8之前的接口 在jdk8之前接口&#xff08;interface&#xff09;中可以定义变量和方法&#xff0c;变量必须是public&#xff0c;static&#xff0c;final的&#xff1b;方法必须是public&#xf…

初识对抗生成网络(GAN)

在研究语义通信的时候&#xff0c;发现解码端很多都是用GAN或基于GAN来完成的。带着对GAN的好奇&#xff0c;对GAN进行了一个初步学习。这篇文章介绍一下和GAN相关的一些常识吧~   本文围绕以下几个内容展开&#xff1a;     1.什么是GAN&#xff1f;     2.为什么要…

独立看门狗与窗口看门狗

一、简介 STM32F10xxx内置两个看门狗&#xff0c;提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障&#xff1b;当计数器达到给定的超时值时&#xff0c;触发一个中断(仅适用于窗口型看门狗)或产…

buuctf-Misc 题目解答分解106-108

106.[DDCTF2018]流量分析 提示了私钥 &#xff0c;无厘头&#xff0c;先不管了&#xff0c;应该是流量加密了&#xff0c;用wireshark 打开 看看&#xff0c;真个数据流量&#xff0c;没有http 直接找到TCP 协议的包追踪一下TCP 找到TCP 不是红色的包追踪&#xff0c;大量的数…

长虹智能电视ZLM60HiS机芯刷机方法及刷机固件,附进维修模式方法

适配机芯&#xff1a;ZLM60HiS 型号&#xff1a;Q1FU、D6000i、U3、D8000ID 软件强制升级方法&#xff1a; 1、下载后解压&#xff0c;找到upgrade_ZLM60HiS_MT5508_V1.00xxx_part.pkg 、chandroid_ota_ZLM60HiS_datapart.zip复制到U盘根目录&#xff08;不要有任何文件夹&a…

AOP获取方法返回值

我们用Spring的AOP切面做日志收集或者记录的时候&#xff0c;在springboot中用Aspect注解。比如&#xff1a; Aspect public class AdviceTest {Before("execution(* com.abc.service.*.many*(..))")public void permissionCheck(JoinPoint point) {System.out.print…

多交朋友多条路

最近在找工作&#xff0c;然后有个朋友帮我推荐一个公司&#xff0c;很感激他&#xff0c;这个朋友是之前指导过他写简历认识的&#xff0c;然后人家也有给我讲过一些知识&#xff0c;最近帮我推一个公司&#xff0c;不免觉得&#xff0c;其实多交点志同道合的朋友&#xff0c;…

指增的超额来自于哪里,2024的乾坤九法,美股的宏观估值双杀

图片截止到&#xff1a;2024/1/4 上证 周四 -0.43% 市场热点分析 1. 2024元旦后国内外市场都出现了不同程度的下跌。技术面国内市场一直走在72日均线之下&#xff0c;而且没有形成底部&#xff0c;熊市还会延续。宏观方面&#xff0c;12月官方PMI持续向下&#xff0c;小企业更多…

初入职场工作应该怎么干?

上一篇文章说过了&#xff0c;踏入职场和同事和领导关系怎么处&#xff0c;接下来我说说工作怎么干。 初入职场可能对环境&#xff0c;人&#xff0c;事&#xff0c;工作都一脸懵逼&#xff0c;深怕工作干不好之类的&#xff0c;所以我要给你吃定心丸&#xff0c;让你可以驰骋…

DBA技术栈(二):MySQL 存储引擎

2.1 MySQL存储引擎概述 上个业余的图&#xff1a; MyISAM 存储引擎是 MySQL 默认的存储引擎&#xff0c;也是目前 MySQL 使用最为广泛的存储引擎之一。他的前身就是我们在 MySQL 发展历程中所提到的 ISAM&#xff0c;是 ISAM 的升级版本。在 MySQL最开始发行的时候是 ISAM 存…