首先,要学习中春天的Bean的注入方式,就要先了解什么是依赖注入。依赖注入是指:让调用类对某一接口的实现类的实现类的依赖关系由第三方注入,以此来消除调用类对某一接口实现类的依赖。
春容器中支持的依赖注入方式主要有属性注入,构造函数注入,工厂方法注入。接下来将为大家详细介绍这三种依赖注入的方式以及它们的具体配置方法。
属性注入即通过setXXX()方法注入bean的属性值或依赖对象。由于属性注入方式具有可选择性和灵活性高的特点,因此它也是实际开发中最常用的注入方式。
春季首先会调用bean的默认构造函数实例化bean对象,然后再通过反射的方法调用集方法来注入属性值。
属性注入要求bean提供一个默认的构造函数,并且得为需要注入的属性提供集方法。
提示:所谓默认的构造函数,即不带参数的构造函数。如果类中没有自定义任何构造函数,则系统(JVM)会自动生成一个不带参的默认构造函数,如果类中显式的自定义了有参数的构造函数,则系统就不会在自动生成默认构造函数,需要自己手动再加一个无参的构造函数。
下面通过一个实例来演示春天中bean的属性注入方式:
编写一个用户类:
包com.Kevin.bean;/* * *创建一个类测试bean的属性注入方式 * @author凯文 * */公开课用户{ 私人字符串的用户名; 公共字符串getUsername () { 返回用户名; } 公共空间setUsername(字符串的用户名){ 这一点。用户名=用户名; } } >之前配置文件:
& lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比; & lt;豆类xmlns=" http://www.springframework.org/schema/beans " xmlns: xsi=" http://www.w3.org/2001/XMLSchema-instance " xmlns:上下文=" 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”比;& lt; !——这里的bean定义的在 & lt; !——配置对象——比; & lt; bean id=坝没А崩?癱om.Kevin.bean.User”比; & lt;属性名="用户名"比; & lt; value> Kevin & lt;/property> & lt;/bean> & lt;/beans>其中,每个属性值对应一个财产标签,名字属性值为类中属性的名称。在bean实现类中拥有与其对应的实现方法setUsername ()。
提示:春天只会检查bean中是否含有setter方法,而对是否有对应的属性变量则不作具体要求,但按照约定俗成的规则我们最好为其设定相应的属性变量。
春天中& lt; property>标签的命名规范:
<李>春季的& lt; property>标签所指定的属性名称和豆实现类的setter方法满足太阳JavaBean的属性命名规范,即XXX的属性对应setXXX()的方法。李>
一般情况下,java的属性变量名都以小写字母开的头,但考虑到一些特殊意义的英文缩略词,java bean也允许一些大写字母开头的变量名。但必须满足以下两点:
<李>变量的前两个字母要么全部大写,要么全部小写;李> <李>但以一般编程习惯来说,属性名最好全部使用小写字母,方便编程和阅读。李>
对于属性注入方式来说,只能人为的在配置文件中提供保证,而无法在语法级别提供保证。此时就需要使用构造函数注入这种方式,以此来更好的满足要求。
构造函数注入是除属性注入之外的另一种常用的注入方式,它可以保证一些必要的属性在bean实例化时就得到了设置,并在实例化后就可以使用。
使用构造函数注入的前提是:豆必须提供带参的构造函数。
对于构造函数的注入,配置文件可以有以下几种方式:
<李>按类型匹配入参李> <李>按索引匹配入参李> <李>联合使用类型和索引匹配入参李> <李>通过自身类型反射匹配入参李>
<强>【按类型匹配入参方式】强>
编写豆代码:
包com.Kevin.bean;/* * *编写豆测试按类型匹配入参方式 * @author凯文 * */公共类人{ 私人字符串名称; 私人整数年龄; 公共字符串getName () { 返回名称; } 公共空间setName(字符串名称){ this.name=名称; } 公共整数getAge () { 返回年龄; } 公共空间setAge(整数年龄){ 这一点。年龄=年龄; } }详解春天中bean的几种注入方式