Spring 的几种注入方法

Spring 的几种注入方法,第1张

概述目录1.setter 方法注入2.构造函数注入3.注解注入Spring 中的IOC 就是控制bean的容器,各个bean 之间会存在相互的引用,那在各个bean之间如何引用就显得尤为重要。Spring 中常见的注入方法主要有:setter方法注入,构造函数注入,注解注入。1.setter 方法注入这种注入要是依赖于配置文件中注入配置文件如下:<bean ...

目录

1.setter 方法注入

2.构造函数注入

3.注解注入


Spring 中的IOC 就是控制bean的容器,各个bean 之间会存在相互的引用,那在各个bean之间如何引用就显得尤为重要。

Spring 中常见的注入方法主要有:setter方法注入,构造函数注入,注解注入。

1.setter 方法注入

这种注入要是依赖于配置文件中注入

配置文件如下:

<bean ID="userService" >	<property name="userDao" ref="userDao"></property></bean><bean ID="userDao" ></bean>

Spring会将property中name值的每个单词首字母转换成大写,然后再在前面拼接上"set"构成一个方法名,然后去对应的类中查找该方法,通过反射调用,实现注入。

对应的JAVA代码:

public class UserService{	private UserDao userDao;		public voID setUserDao(UserDao userDao) {		this.userDao = userDao;	}}

有一点需要注意:如果通过set方法注入属性,那么spring会通过默认的空参构造方法来实例化对象,所以如果在类中写了一个带有参数的构造方法,一定要把空参数的构造方法写上,否则spring没有办法实例化对象,导致报错。

2.构造函数注入

在配置文件中,通过constructor-args 标签注入到对应的bean 中。

<bean ID="userService" >	<constructor-arg ref="userDao"></constructor-arg></bean><bean ID="userDao" ></bean>

对应的java类:

public class UserService{	private UserDao userDao;		public UserService(UserDao userDao) {		this.userDao = userDao;	}}

关于构造函数的注入,也会涉及到多个构造函数如何匹配的问题,这里可以通过配置文件中的index 以及type进行匹配。示例中,本来就只有一个参数的构造函数,比较简单。

3.注解注入

主要有4种注解的类可以注册bean,每种注解可以任意使用,只是语义上有所差异:

@Component 可以用于注册所有bean

@Controller 可以用于注册控制层的bean

@Service 可以用于注册服务层的bean

@Repository 可以用于注册dao层的bean

描述依赖关系的的主要有2种:

@Resource(java 注解)默认以byname的方式去匹配与属性名相同的bean 的ID,如果没有找到就以byType的方式查找,如果byType找到多个,通过@QualifIEr 注解(Spring注解)指定某个具体名称的bean。

@autowired (Spring 注解) 默认以byType的方式去匹配类型相同的bean,如果只匹配到一个,那么就直接注入该bean,此时不论要注入的bean的name 是什么。如果匹配到多个,就会调用Defaultlistablebeanfactory 的determineautowireCandIDate 方法来决定具体注入哪个bean。

determineautowireCandIDate 方法的逻辑是:

先找 Bean 上有@Primary 注解的,有则直接返回 bean 的 name。再找 Bean 上有 @Order,@PriorityOrder 注解的,有则返回 bean 的 name。最后再以名称匹配(Byname)的方式去查找相匹配的 bean。

可以简单的理解为先以 ByType 的方式去匹配,如果匹配到了多个再以 Byname 的方式去匹配,找到了对应的 bean 就去注入,没找到就抛出异常。

在配置文件中,bean的配置属性autowire有以下几种类型:

先看示例:

<bean ID="auto"  autowire="byType"/>
no:不采用autowire 机制,这种情况,当我们需要使用依赖注入时,只能使用</ref>标签byname:通过属性的名称自动装配(注入)。spring 会在容器中查找名称与bean属性名称一致的bean,并自动注入到bean的属性中。byType:通过类型自动装配(注入)。spring 会在容器中查找class与bean 属性类一致的bean,并自动注入到bean的属性中。constructor:类似于byType,但是通过构造函数的参数类型来匹配。default:采用父级标签(即beans的 default-autowire属性)的配置

 

总结

以上是内存溢出为你收集整理的Spring 的几种注入方法全部内容,希望文章能够帮你解决Spring 的几种注入方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1215254.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存