前言:
而今咱们对“构造器与方法的区别”大体比较注意,各位老铁们都需要了解一些“构造器与方法的区别”的相关文章。那么小编也在网络上收集了一些有关“构造器与方法的区别””的相关知识,希望你们能喜欢,咱们一起来学习一下吧!想一个问题,要给一个类传值应该如何做?
在“DI(依赖注入)入门案例”中已经讲过通过set()方法注入一个对象即引用类型
但是,要是注入的不是这种引用类型而是简单类型如String,int之类的呢?
其实,有两种方法即setter注入和构造方法(构造器)注入
(还有个问题:可不可以不要自己写依赖,要啥依赖自己去找呢?最后部分——自动装配)
一.setter()注入
1)注入引用类型:“DI(依赖注入)入门案例”已讲述,不再重复!
2)注入简单类型:很类似引用类型,首先在类里定义属性及对应set方法,然后在配置文件通过<property name value>进行配置依赖关系即可,即相对于引用类型仅仅在配置依赖关系的时候将ref改为value
以在BookDaoImpl.java类中注入简单类型为例
定义简单属性及对应set方法:
再在配置文件中配置bean的时候定义依赖关系:
注意这里相比于引用类型这里使用的是value传入值
可以运行起点程序了(这里获得bookService对象并调用里面的save()方法,bookService对象并调用里面的save()方法又调用bookDao里的save()方法):
运行结果:
这就是setter方法对于两种数据类型的注入!!!
二.构造方法(构造器)注入
其实跟setter注入差不多,只不过在类里将set方法换成构造方法,然后在配置文件中将<property>标签换成<constructor-arg>标签即可
1)引用类型注入:一样的,首先类里定义引用属性,然后写构造方法,最后配置文件中进行配置传值即可
以BooksService类为例,定义引用属性和构造方法:
配置文件进行配置:使用constructor-arg标签,name的值是构造方法里形参名(注意不是属性名),通过ref传值即要传入的对象
最后就可以运行起点程序得到结果
2)简单类型注入:一样的,类里定义简单类型变量并生成构造方法
再配置文件进行配置:相比于引用类型只不过由ref变成了value,要注意的是,跟配置引用类型一样,name的值依然要跟构造方法里形参名字一致
此时就可以运行了
起点程序
运行结果
但是,这里发现一个问题:对于简单类型注入来说也需要在配置的时候name的值和构造方法形参的名字一样,这有耦合度,可不可打破这个限制呢?有:
打破方式一:
配置的时候将name换成type,即只传入数据类型没这样就不要写具体名字了,但是当有两个及以上的参数是同数据类型的那就不可用了
打破方式二:解决了上一种方式的缺陷,即只通过index给参数位置
总结一下:name--->type--->index
三.自动装配(注意这种方式只能用于引用类型)
这个就实现了配置文件的时候不需要自己写依赖,需要什么类型自己去找,实现方法很简单,通过一个属性autowire即可实现
使用BookServiceImpl.java为例
类里写上属性类型即属性名称和setter方法,即BookServiceImpl要使用BookDao
再到配置文件种进行配置依赖关系:常规操作创建BookDaoImpl的bean,再创建BookServiceImpl的bean,但是,这里通过autowire自动装配:
1)按类型
即bookService类里通过private BookDao bookDao;知道它要的是是BookDao类型,然后配置文件中正好有一个这个类型的bean即bookDao,因此就自己寻找并且配上了
此时可以运行程序:
运行结果:
2)还可以按名称
bookService类里通过private BookDao bookDao;知道它要的变量名是bookDao,而配置文件中正好有一个叫bookDao的bean,因此直接配上了
同样运行起点程序得结果
到此为止,依赖注入基本就学完了!!!
但是还有个问题:到此为止知道了引用类型,简单类型的注入,但是集合怎么注入呢?集合只是个壳子,注入的话是注入里面的数字呀
标签: #构造器与方法的区别