Spring(二)---基于注解的方式实现Bean管理和注入属性

目录

引入

什么是注解

Spring针对Bean管理中创建对象提供的注解

用注解的方式创建对象

①:编写接口和实现类

②:在需要管理的类上添加@Component注解(上边四个都可以)

③:编写配置文件,重点是开启注解扫描

④编写测试方法

用注解的方实现属性注入

纯注解的形式实现IOC


引入

什么是注解

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

②:使用注解,注解作用在类上面,方法上面,属性上边

③:使用注解的目的:简化XML配置

Spring针对Bean管理中创建对象提供的注解

@Component 普通的类

@Controller 表现层

@Service 业务层

@Repository 持久层

*上边四个功能一样,都可以用来创建bean实例

用注解的方式创建对象

①:编写接口和实现类

package com.qcby.testanno;public interface UserService {public void hello();
}

②:在需要管理的类上添加@Component注解(上边四个都可以)

package com.qcby.testanno;import org.springframework.stereotype.Component;/* <bean id="us" class="UserServiceImpl"/> */
/*** 组件,作用:把当前类使用IOC容器进行管理,如果没有指定名称,默认使用类名,首字母是小写。* userServiceImpl。或者自己指定名称**/
@Controller(value="us")
public class UserServiceImpl implements UserService {public void hello() {System.out.println("使用注解,方便吧!");}
}

 如下操作:

③:编写配置文件,重点是开启注解扫描

<?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
http://www.springframework.org/schema/context/spring-context.xsd"><!--开启注解扫描 com.qcby所有的包中的所有的类--><context:component-scan base-package="com.qcby"/>
</beans>

如下操作:

④编写测试方法

package com.qcby.test;import com.qcby.testanno.UserService;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Demo2 {@Testpublic void run1(){ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContextanno.xml");UserService us = (UserService) ac.getBean("us");us.hello();}
}

如下操作(和没有使用注解前相同即可,不用变动):

用注解的方实现属性注入

@Value 用于注入普通类型(String,int,double等类型)--比较麻烦,某些情况下不如直接赋值。

@Autowired 默认按类型进行自动装配(引用类型)---掌握这个

@Qualifier 不能单独使用必须和@Autowired一起使用,强制使用名称注入---不如直接使用Autowired

@Resource Java提供的注解,也被支持。使用name属性,按名称注入

具体的代码如下:
 

// 默认当前类名就是ID名称,首字母小写
@Component(value = "c")
// @Controller
// @Service(value = "c")
// @Repository(valu = "c")
public class Car {// 注解注入值,属性set方法是可以省略不写的。// 只有一个属性,属性的名称是value,value是可以省略不写的@Value("大奔2")private String cname;@Value(value = "400000")private Double money;// 也不用提供set方法// 按类型自动装配的注解,和id名称没有关系@Autowired //一定要学会(用于注入对象)// 按id的名称注入,Qualifier不能单独使用,需要Autowired一起使用。// @Qualifier(value = "person")// @Resource Java提供的注解,按名称注入对象,属性名称是name// @Resource(name = "person")private Person person;@Overridepublic String toString() {return "Car{" +"cname='" + cname + '\'' +", money=" + money +", person=" + person +'}';}}
@Controller
//@Component(value = "person")
public class Person {@Value("张三")private String pname;@Overridepublic String toString() {return "Person{" +"pname='" + pname + '\'' +'}';}}
@Test
public void run1(){// 工厂ApplicationContext ac = newClassPathXmlApplicationContext("applicationContext.xml");// 获取对象Car car = (Car) ac.getBean("c");System.out.println(car);
}

纯注解的形式实现IOC

纯注解的方式是微服务架构开发的主要方式,所以也是非常的重要。纯注解的目的是替换掉所有的配置文件。但是需要编写配置类。

常用的注解总结

@Configuration 声明是配置类

@ComponentScan 扫描具体包结构的

编写实体类:

@Component
public class Order {@Value("北京")private String address;@Overridepublic String toString() {return "Order{" +"address='" + address + '\'' +'}';}
}

编写配置类,替换掉applicationContext.xml配置文件

@Configuration
// 扫描指定的包结构
@ComponentScan(value = "com.qcby")
public class SpringConfig {
}

测试方法的编写:

package com.qcby.test;
import com.qcby.demo4.Order;
import com.qcby.demo4.SpringConfig;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Demo4 {@Testpublic void run(){// 创建工厂,加载配置类ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);// 获取到对象Order order = (Order) ac.getBean("order");System.out.println(order);}
}

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

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

相关文章

集成自然语言理解服务,让应用 “听得懂人话”

如今&#xff0c;应用程序智能化已成趋势&#xff0c;开发者想要实现智能化&#xff0c;那么首先需要赋予应用理解自然语言的能力&#xff0c;使其能够准确地听懂人话&#xff0c;进而响应用户需求&#xff0c;并提供一系列智能化服务。比如用户语音控制应用程序帮忙订票&#…

Redis常见阻塞原因总结

O(n) 命令 Redis 中的大部分命令都是 O(1)时间复杂度&#xff0c;但也有少部分 O(n) 时间复杂度的命令&#xff0c;例如&#xff1a; KEYS *&#xff1a;会返回所有符合规则的 key。HGETALL&#xff1a;会返回一个 Hash 中所有的键值对。LRANGE&#xff1a;会返回 List 中指定…

golang自定义MarshalJSON、UnmarshalJSON 原理和技巧

问题出现的原因&#xff1a;在前后端分离的项目中&#xff0c;经常出现的问题是时间戳格式的问题。 后端的日期格式兼容性强&#xff0c;比较完善。前端由于各种原因&#xff0c;日期格式不完善。 就会产生矛盾。 ms int64比较通用&#xff0c;但是unix时间没有可读性&#xff…

BGP的六种状态分别是什么?

此文章主要简单介绍下BGP的六种状态 1.Idle BGP会话的初始状态&#xff0c;路由器在此状态下不与任何BGP邻居通信&#xff0c;通常标识会话还没有开始或由于错误而未能启动&#xff0c;一般来说&#xff0c;缺乏去往BGP对等体的路由是导致BGP路由器其状态一直处于idle状态的常…

推挽输出和开漏输出

推挽输出&#xff1a;能真正的输出高低电平 开漏输出&#xff1a;无法正真的输出高电平&#xff08;会分压&#xff09;&#xff0c;高电平时没有驱动能力&#xff0c;需要借助外部上拉电阻完成对外驱动

Linux之磁盘管理相关命令

1、du 作用&#xff1a;查看文件和目录占用的磁盘空间情况 语法&#xff1a; # 显示目录下每个子目录的磁盘使用情况 du [选项] 目录/文件 # 例&#xff1a;查/root下一层的文件和目录大小 du --max-depth1 -ah /root选项&#xff1a; -h&#xff1a;以人们较易阅读的GBytes,…

任务三数据库加固

1 修改mysql配置文件my.cnf&#xff0c;通常在/etc/my.cnf或者/etc/mysql/my.cnf 把mysql用户添加进去,分配最小权限&#xff0c;如果没有useradd添加一个 2 mysql -u root -p 登录mysql&#xff0c;输入 drop database test; 3 登录mysql&#xff0c;输入 update mysql.us…

uniapp开发app,cover-view不能隐藏,使用v-if,v-show都不行的解决办法

先上解决方案 在最后多写一个v-else <cover-view class"point-info" v-if"selectedPoint"><cover-view class"info-content"><cover-view class"info-item">。。。</cover-view><cover-view class"i…

3D视觉[一]3D计算机视觉

3D视觉[一]3D计算机视觉 3D计算机视觉概述 像机标定 文章目录 3D视觉[一]3D计算机视觉前言一、人类视觉二、计算机视觉2.1 计算机视觉的研究目的2.2 计算机视觉的研究任务2.3 计算机视觉的研究方法2.4 视觉计算理论2.5 马尔框架中计算机视觉表达的四个层次2.5.1 图像&#xff…

智慧商城:购物车模块基本静态结构 + 构建vuex cart模块,获取数据存储(异步actions)

基本静态结构 静态结构直接 cv笔记中的内容 &#xff0c;粘贴到 layout架子上的 cart组件中 给详情页底部的 首页 和 购物车 添加点击跳转事件 cart.vue中应用到的 van-Checkbox组件&#xff0c;进行该组件的引入注册 将数字框替换为之前封装好(两个-按钮中间的1那个输入框)的组…

ExcelVBA编程输出ColorIndex与对应颜色色谱

标题 ExcelVBA编程输出ColorIndex与对应颜色色谱 正文 解决问题编程输出ColorIndex与对应色谱共56&#xff0c;打算分4纵列输出&#xff0c;标题是ColorIndex,Color,Name 1. 解释VBA中的ColorIndex属性 在VBA&#xff08;Visual Basic for Applications&#xff09;中&#xff…

前端和后端解决跨域问题的方法

目前很多java web开发都是采用前后端分离框架进行开发&#xff0c;相比于单体项目容易产生跨域问题。 一、跨域问题CORS 1.什么是跨域问题&#xff1f; 后端接收到请求并返回结果了&#xff0c;浏览器把这个响应拦截了。 2.跨域问题是怎么产生的&#xff1f; 浏览器基于同源…

有哪些免费的 ERP 软件可供选择?哪些 ERP 软件使用体验较好?

想找个 “免费” 的 ERP 软件&#xff1f; 咱得知道&#xff0c;ERP 那可是涉及财务、人力、供应链、采购、销售等好多方面的重要企业软件。功能这么全&#xff0c;能免费才怪呢&#xff01;真要是有免费的&#xff0c;早就火遍大江南北&#xff0c;说不定把市场都垄断了&…

0.gitlab ubuntu20.04 部署问题解决

安装依赖&#xff1a; ① sudo apt-get update 出现&#xff1a; 解决方式&#xff1a; 去 /etc/apt/sources.list.d 这个目录删除或注释对应的list文件 第三方软件的源一般都以list文件的方式放在 /etc/apt/sources.list.d 这个目录 重新运行sudo apt-get update 安装…

中国人工智能学会技术白皮书

中国人工智能学会的技术白皮书具有多方面的重要作用&#xff0c;是极具权威性和价值的参考资料。 看看编委会和编写组的阵容&#xff0c;还是很让人觉得靠谱的 如何下载这份资料呢&#xff1f;下面跟着步骤来吧 步骤一&#xff1a;进入中国智能学会官网。百度搜索“中国智能学…

Windows中运行Linux(WSL)

Windows Subsystem for Linux&#xff08;WSL&#xff09;是一个在Windows 10和更高版本上运行Linux二进制可执行文件&#xff08;ELF格式&#xff09;的兼容层。它允许你在Windows上直接运行Linux环境&#xff0c;包括大多数命令行工具、实用程序和应用程序&#xff0c;无需修…

electron打包linux环境

注意:新版的electron已经不支持在win上直接打包Linux的环境了,服务会卡住,会一直生成文件占用磁盘(我发现的时候占了我100G&#xff0c;而且文件夹很深&#xff0c;找了java代码while循环&#xff0c;好不容易删除的o(╥﹏╥)o) electron有一个专门打包的docker镜像&#xff0c…

windows下搭建本地sofa-registry

官方介绍&#xff1a; SOFARegistry 是蚂蚁金服开源的一个生产级、高时效、高可用的服务注册中心。SOFARegistry 最早源自于淘宝的 ConfigServer&#xff0c;十年来&#xff0c;随着蚂蚁金服的业务发展&#xff0c;注册中心架构已经演进至第五代。目前 SOFARegistry 不仅全面服…

编译原理复习---目标代码生成

适用于电子科技大学编译原理期末考试复习。 1. 目标代码 是目标机器的汇编代码或机器码&#xff0c;在本课程中指的是类似于汇编代码的一种形式&#xff0c;由一条条的指令构成目标代码。 抽象机指令格式&#xff1a;OP 目的操作数&#xff0c;源操作数。 我们要做的&…

2024年港澳台华侨生联考师范类院校录取情况来

导读 师范类大学一直是在港澳台华侨生联考中&#xff0c;最受瞩目的学校类型之一&#xff0c;今天我们就跟大家一块来盘点一下2024年的港澳台联考中&#xff0c;师范类大学的录取分数线情况。&#xff08;景于行提示您&#xff1a;我们给您提供的分数线数据真实可靠&#xff0…