问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

spring IOC容器操作Bean管理——完全注解方式

发布网友 发布时间:2024-10-02 07:12

我来回答

1个回答

热心网友 时间:2024-11-22 16:40

本文是自己在尚硅谷spring5学习过程中,对完全注解方式实现Bean管理的知识理解和总结。自己的学识有限,如果有什么不正确的地方,还请小伙伴们积极纠正!

1、什么是注解

1.注解是代码的特殊标记,格式:@注解名称(属性名=属性值,属性名=属性值)

2.使用注解,可以作用在类上面、方法上面、属性上面

3.使用注解的目的:简化xml配置文件

2、创建Bean对象可以使用的注解

1.@Component

2.@Controller

3.@Repository

4.@Service

上面四个注解的功能都是一样的,都可以用来创建bean对象实例

步骤1:创建一个配置类

//替代xml配置文件,表示MyConfig是一个配置类@Configuration//开启包扫描功能,basePackages表明要扫描哪个包下的类@ComponentScan(basePackages="day01.demo1")publicclassMyConfig{}

步骤2:代码初体验

@Component()//相当于xml配置文件<beanid="a"></bean>,可以不写,默认是类名的首字母小写publicclassA{publicvoidhello(){System.out.println("你好呀");}}

下面来通过spring的方式来获取 A 的对象,并调用其方法hello()

@Testpublicvoidtest(){ApplicationContextcontext=newAnnotationConfigApplicationContext(MyConfig.class);Abean=context.getBean("a",A.class);bean.hello();}

运行结果:

如果 @Component(value = "Hello")的value属性值改变,context调用getBean()方式时,上述代码的"a"也就应该改为value对应的属性值"Hello",否则就会报下图的错误:

步骤3:代码小进阶

//先创建一个接口UserDaopublicinterfaceUserDao{voidadd();}//再创建一个接口UserDao的实现类UserDaoImp@RepositorypublicclassUserDaoImpimplementsUserDao{@Overridepublicvoidadd(){System.out.println("add2()...");}}@ServicepublicclassUserService{@Autowired//此注解是根据属性类型进行自动装配privateUserDaouserDao;publicvoidfun1(){System.out.println(userDao);userDao.add();}}@Testpublicvoidtest1(){ApplicationContextcontext=newAnnotationConfigApplicationContext(MyConfig.class);UserServiceuserService=context.getBean("userService",UserService.class);userService.fun1();}

上述代码执行流程: 从IOC容器中获取类UserService的实例,然后调用其方法fun1();同时,也会从IOC容器中创建类UserDaoImp的实例,然后输出userDao对象,最后userDao调用重写后的方法add()

运行结果:

需要注意的是,因为接口不能实例化,所以不能给UserDao添加注解,而是应该在其实现类上添加创建对象的注解(四个注解中的任何一个即可)

步骤4:把握细节

再创建一个UserDao接口的实现类UserDaoImpl

@Repository//UserDao接口的另一个实现类publicclassUserDaoImplimplementsUserDao{@Overridepublicvoidadd(){System.out.println("add()...");}}

需要注意的是,当一个接口有多个实现类的时候,使用@Autowired就会报如下异常:

解决方法1:可以和@Qualifier一起使用

@ServicepublicclassUserService{@Autowired@Qualifier(value="userDaoImpl")//@Qualifier注解根据名称注入,value值是该类的注解中的value值privateUserDaouserDao;publicvoidfun1(){System.out.println(userDao);userDao.add();}}

解决方法2:使用@Resource注解

@ServicepublicclassUserService{@Resource(name="userDaoImpl1")//此注解相当于@Autowired和@Qualifier注解,来自于javax,不建议使用privateUserDaouserDao;publicvoidfun1(){System.out.println(userDao);userDao.add();}}

结尾:

使用spring5提供的完全注解开发时,首先需要创建一个配置类,这个配置类需要加上两个注解(@Configuration、@ComponentScan),需要注入属性时,要注意当一个接口有多个实现类时,最好使用@Autowired + @Qualifier 的注解方式!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
陌陌发语音出现转码失败怎么办 女孩2010年5月10号阴历3月27早晨9点55分出生的五行缺什么 钟姓男孩名字2023年5月10日出生的 凤眼果有什么营养?凤眼果的这些营养你都知道吗? 专升本成绩多少合格 山东专升本成绩多少合格 山东2022年专升本成绩什么时候出 2024专升本成绩公布时间及入口 2023年山东专升本各专业录取分数线 什么时候出专升本成绩 山东专升本综合素质测评成绩怎么算 带你体验Spring6中11种IOC控制反转实现方式 22234CC/W33轴承22234CC/W33轴承用途 SKF 22217CC/W33轴承22217CC/W33轴承用途 轴承23230CC/W3323230CC/W33销售网络 22230CC/W33轴承22230CC/W33轴承用途 FAG 23220CC/W33轴承23220CC/W33销售网络 lol新区活动(LOL新区男爵领域开启介绍_lol新区活动(LOL新区男爵领域开启... lol男爵领域怎么进?lol男爵领域什么时候开启 LOL男爵领域2888金币如何领取 注册账号怎么没有2888金币 LOL男爵领域新区怎么进 男爵领域在哪里 专升本的难度和高考比怎么样?那个更难?? 相亲时怎样和女孩子聊天? nova5手机自带云相册吗? 苹果一体机怎么进bios? 苹果一体机怎么装windows系统 印度尼西亚拘留会传回中国吗 【在九大行星中,被称为最冷的行星是哪一颗? A.天王星 B.冥王星】 懂... 电动剃须刀哪个牌子最好用啊?? 剃须刀哪个品牌最好用? 考试介绍丨上海三月专科层次三月自主招生考试介绍,你想知道的都在这里... 有人知道最近很火的小说作者坐墙等红杏吗?他因为哪部作品出名的?好看吗... 大师们,用IOC注入最大的好处是什么? 我这是笔记本,不管下载了什么软件都打不开,没反应。求解答,谢谢 电脑死机,我的三星笔记本上网的时候点击视频看,突然死机,然后启动不了... akg701与hd600对比 真心求教,AKG K701的迷茫 u盘怎么设置权限设置密码-(u盘可以设置密码) 大连链家公积金缴存太少可以讨回吗? ...吗?效果怎么样?要不要忌口?会不会反弹。求真实回答 ...第一次开机安照提示输入了帐户名和密码,之后开机都要输入密码... 要达到什么条件才可以确定为是固定资产 鱼刺卡喉咙了!医生说找不到,可能是刺进肉里头了!就叫我吃点阿莫西林,过... 安步当车的故事是什么 波尔多的欲望天堂剧情介绍 波尔多的欲望天堂简介 波尔多欲望天堂简介 西蒙·比尔弗伊个人作品 谁有猫扑1000个包子表情包,全部的。 下列说法错误的是无论演奏者还是欣赏者下列说法错误的是 23岁 可以配置保险吗?