开发的时候一直用@Autowired和@Resource注解实现自动装配,但是一直不明白byType这个装配方式是什么,研究才明白这两者之间的区别。
@Resource注解一般是先根据名称去查找,如果没有再根据类型查找
一般Spring用@Resource注解实现byName,这个注解比较简单理解,就是用对象名注册到Spring容器中,如果出现相同名称项目启动就会报错。
首先咱们先理解什么是Class类型:
每个类的运行时的类型信息就是用Class对象表示的。它包含了与类有关的信息。其实我们的实例对象就通过Class对象来创建的。Java使用Class对象执行其RTTI(运行时类型识别:Run-Time
Type Identification),多态就是基于RTTI实现的。
每一个类都有一个Class对象,每当编译一个新类就产生一个Class对象,基本类型 (boolean,
int等)有Class对象,数组有Class对象,就连关键字void也有Class对象(void.class)。Class对象对应着java.lang.Class类,如果说类是对象抽象和集合的话,那么Class类就是对类的抽象和集合。
当你用一个接口,并且有多个实现类,同一个方法会有多种不同的实现逻辑。
接口Car
public interface Car {
int find();
int out();
}
实现类Benz
import org.springframework.stereotype.Service;
@Service
public class Benz implements Car{
@Override
public int find() {
System.out.println("奔驰");
return 0;
}
@Override
public int out() {
return 0;
}
}
实现类Honda
import org.springframework.stereotype.Service;
@Service
public class Honda implements Car{
@Override
public int find() {
System.out.println("本田");
return 0;
}
@Override
public int out() {
return 0;
}
}
控制层
import com.example.mqredises.entity.Car;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/car")
public class CarController {
@Autowired
private Car car;
@RequestMapping("/test")
public int test(){
return car.find();
}
}
这个时候编译器会报错,显示
Could not autowire. There is more than one bean of ‘Car’ type.
Beans:
benz (Benz.java) honda (Honda.java)
会找到多个相同Car类型的Bean
这个时候咱们有两种解决方案:
@Qualifier("benz")
@Autowired
private Car car;
@Resource(name = "benz")
private Car car;
实际上Spring的byName和byType基本上是不会出错的,都是可用的,只是有时候会出现不同包名底下有相同的类名,导致注册到Spring容器里报错了,也就是byName;而byType也是直接指定了接口的类型但底下却有多个实现类也会造成报错,实际开发过程中,一般都是直接指定实现类的类型,这样也不会出现报错;根据自己的项目架构选择合适的注解即可。
文章浏览阅读5.2k次。在Ubuntu下面安装飞鸽,iptux,编译源码的时候需要使用gtk+2.0,貌似大多数的图形界面软件都依赖于gtk+2.0,所以很有安装的必要好像安装的步骤挺复杂的,网上找到的文章,贴在这里留着以后备用。 apt-get install build-essential #这将安装gcc/g++/gdb/make 等基本编程工具apt-get install gnome-core-devel #这将安装 lib_你的机器没有安装gtk的开发库,ubantu18.04
文章浏览阅读307次,点赞2次,收藏3次。在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。
文章浏览阅读1.6w次,点赞4次,收藏13次。设置使用3G数据功能:从源代码看到隐藏的API(ConnectivityManager.java): /** * Sets the persisted value for enabling/disabling Mobile data. * * @param enabled Whether the mobile data connection should_connectivitymanager 反射
文章浏览阅读941次。《互换性与测量技术》模拟题一.单选题1.优先选用基孔制的原因是().A.孔比轴难加工B.减少定尺寸孔用刀具量具的规格和数量C.减少孔和轴的公差带数量D.从工艺上讲应先加工孔后加工轴2.评定齿轮传递运动准确性的指标是().A.齿距累积总偏差B.单个齿距偏差C.齿廓总偏差D.螺旋线总偏差3.当几何公差框格的指引线箭头与尺寸线对齐时所表示的被测要素是().A.轮廓要素B.单一要素C.中心要素D.基准要素4.螺纹代号M20×2-7g6g表示的螺纹是().A.粗牙普通外螺纹B.粗_要求两孔同轴度φ0.3mm最大偏差是多少
文章浏览阅读1k次。@Simulink PLC Coder :将Simulink模型转为TwunCAT程序1 先把simulink程序封装为一个子系统subsystem,标注好输入输出端口参考链接:https://ww2.mathworks.cn/help/plccoder/ug/plc-coder-general.html#bsemuq2-12 程序内不能包含任何连续状态的模块(比如微分,积分模块),而且有不支持的等simulink模块(比如Clock模块),因此需要用离散状态的功能块替代,或者编写MATLAB _simulink导入到twincat
文章浏览阅读100次。缘起随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,还有应用之间的互相调用等等问题,插件化技术应用而生。如果没有插件化技术,美团、淘宝这些集成了大量“app”的应用,可能会有几个g那么大。所以,当今的Android移动开发,不会热修复、插件化、组件化,80%以上的面试都过不了。阿里P8大佬每天熬夜到凌晨一两点,花了将近半个月时间将Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、_程序员35岁为什么会是一个分水岭
文章浏览阅读4.6k次。使用MyBatis-generator自动生成MyBatis映射代码下载mybatis-generator.1.3.1.jar 点击打开链接(包含英文api)还需要ant-1.6.5.jar主要说下如何使用配置文件生成,建立 config.xml
文章浏览阅读671次,点赞19次,收藏6次。最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
文章浏览阅读819次。需求一个工程使用源码版本运行,一个工程使用发布版本引擎运行,两个客户端在Editor模式下,可以通过JoinSession这种方式进行连接,正常会判断两份客户端版本不同不可以连接,可以通过绑定FNetworkVersion::IsNetworkCompatibleOverride 来实现自定义的版本比较,这里比较简单粗暴,具体详细的可以参考 https://zhuanlan.zhihu.com/p/158986763 实现具体方法(FNetworkVersion::IsNetworkCompatibleO_ue4 networkversionoverride
文章浏览阅读5.5k次,点赞2次,收藏3次。前后端接口数据联调有一种form-data形式,一般用来做文件上传,但是有时在登录的时候,也会用到这种格式传递数据,此时就需要通过借助FormData对象实现。_from-data类型的接口参数怎么传
文章浏览阅读5.9k次。最近想翻点老游戏出来玩,比如圣战群英传2,但是卡得我mmp,一通搜索和捣鼓之后,终于发现了比较简单的解决问题的方法。1、首先确认电脑中是否有vcredist2010,至少08年以后的VC++库,没有就安。2、检查游戏根目录下有没有d3d9.dll,没有就下方传送门。https://dl.pconline.com.cn/download/91252.html如果还没能解决问题,那么:3、看看根目录有没有Disciple.ini,如果没有:3.1、看看根目录有没有一个骷髅头头像的Importer.e_disciples 2如何窗口化运行
文章浏览阅读5.5k次。数据链路层有许多协议,但有三个基本问题是相同的:封装成帧、透明传输和差错检验。为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检验措施,目前广泛使用的是循环冗余(CRC)检验的检错技术。 CRC检验原理: 在发送端,先把数据划分为组,假定每个组k个比特。现假定待传送的数据M=101001(k=6)。CRC运算就是在数据M后面添加供差错检验用的n位冗余码,然后构成一个帧发送出去,_链路层循环冗余校验码是检验哪一部分