spring注入bean的方法是什么?
spring注入bean的方法?
关于这个问题,Spring注入bean的方法有以下几种:
spring注入bean的方法是什么?
spring注入bean的方法是什么?
1. 构造器注入:通过构造器注入可以在实例化bean时直接通过构造器参数传递所需的依赖。
2. Setter方法注入:通过setter方法注入可以在实例化bean后通过setter方法设置所需的依赖。
3. 接口注入:通过实现特定接口的方式实现依赖注入,如BeanNameAware、BeanFactoryAware、InitializingBean、DisableBean等。
4. 注解注入:通过使用注解方式实现依赖注入,如@Autowired、@Resource、@Value等。
5. 自动装配:通过自动装配的方式实现依赖注入,如byName、byType、constructor、autodetect等。
Spring注入bean的方法有以下几种:
1. 构造器注入:使用构造器方法同时设置依赖项和属性值。
2. Setter注入:在bean的setter方法中注入所需的依赖项和属性值。
3. 接口注入:使用Ja Bean的Setter方法注入依赖项,通常使用Spring依赖项查找或依赖项注入器接口。
4. 注解注入:使用@Autowired或@Inject注解自动注入依赖项。
5. 配置文件注入:通过在Spring配置文件中提供标记来完成bean的注入,可以使用XML或Ja Config的形式。
1、属性注入
属性注入即通过setXXX( )方法注入bean的属性值或依赖对象。由于属性注入方式具有可选择性和灵活性高的特点,因此它也是实际开发中最常用的注入方式。
Spring首先会调用bean的默认构造函数实例化bean对象,然后再通过反射的方法调用set方法来注入属性值。
属性注入要求bean提供一个默认的构造函数,并且为需要注入的属性提供set方法 。
TIps:所谓默认的构造函数,即不带参数的构造函数。如果类中没有自定义任何构造函数,则系统(JVM)会自动生成一个不带参的默认构造函数,如果类中显示的自定义了有参数的构造函数,则系统就不会在自动生成默认构造函数,需要自己手动再加一个无参的构造函数。
下面通过一个实例来演示Spring中bean的属性注入方式:
编写一个user类:
package com.Kevin.bean;/ 创建一个类测试bean的属性注入方式 @author Kevin /public class User { private String username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; }}
配置文件:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="; xmlns:xsi="; xmlns:context="; xsi:schemaLocation=" ; <!-- bean definitions here --> <!-- 配置对象 --> <bean id="user" class="com.Kevin.bean.User"> <property name="username"> <value>Kevin</value> </property> </bean> </beans>
其中,每个属性值对应一个property标签,name属性值为类中属性的名称。在bean实现类中拥有与其对应的实现方法setUsername( )。
Tips:Spring只会检查bean中是否含有setter方法,而对是否有对应的属性变量则不作具体要求,但按照约定俗成的规则我们为其设定相应的属性变量。
Spring中<property>标签的命名规范:
Spring的<property>标签所指定的属性名称和bean实现类的setter方法满足Sun JaBean的属性命名规范,即XXX的属性对应setXXX( )的方法。
一般情况下,ja的属性变量名都以小写字母开头,但考虑到一些特殊意义的英文缩略词,ja bean也允许一些大写字母开头的变量名。但必须满足以下两点:
变量的前两个字母要么全部大写,要么全部小写;
但以一般编程习惯来说,属性名全部使用小写字母,方便编程和阅读。
对于属性注入方式来说,只能人为地在配置文件中提供保证,而无法在语法级别提供保证。此时就需要使用构造函数注入这种方式,以此来更好地满足要求。
2、构造函数注入
构造函数注入是除属性注入之外的另一种常用的注入方式,它可以保证一些必要的属性在bean实例化时就得到了设置,并在实例化后就可以使用。
使用构造函数注入的前提是: bean必须提供带参的构造函数。
对于构造函数的注入,配置文件可以有以下几种方式:
按类型匹配入参
按索引匹配入参
联合使用类型和索引匹配入参
通过自身类型反射匹配入参
3、工厂方法注入
工厂方法是应用中被经常使用的设计模式,也是控制反转和单实例设计思想的主要实现方法。工厂类负责创建一个或多个工厂类实例,工厂类方法一般以接口或抽象类变量的形式返回目标类实例。
工厂类对外屏蔽了目标类的实例化步骤,调用者甚至根本不用指定具体的目标类是什么。由于Spring容器以框架的方法提供工厂方法的功能,并以透明的方式开放给开发者。因此很少需要手工编写工程方法。但在一些遗留系统或第三方类库中还是会碰到工程方法,此时便可以使用Spring工厂注入的方法来进行Spring的注入。
Spring工厂注入的方法可以分为静态和非静态两种。
(1) 非静态工厂方法
有些工厂方法是非静态的,必须实例化工厂类之后才能调用工厂方法。下面通过一个示例来演示。
编写工厂类:
package com.Kevin.factorybean;/ 编写工厂类测试非静态工厂方法注入 @author Kevin / public class BookFactory { public Book buyBook(){ Book book = new Book(); book.setName("Think in Ja"); return book; }}
配置文件编写:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="; xmlns:xsi="; xmlns:context="; xsi:schemaLocation=" ; <!-- bean definitions here --> <!-- 配置对象 --> <bean id="bookFactory" class="com.Kevin.factorybean.BookFactory"></bean> <bean id="book" factory-bean="bookFactory" factory-mod="buyBook"></bean> </beans>
由于bookFactory的工厂方法不是静态的,因此需要先定义一个工厂类的bean,然后通过 factory-bean 属性来引用工厂bean实例。再通过属性 factory-mod 来指定对应的工厂方法。
(2) 静态工厂方法
很多工厂类方法都是静态的,这意味着无需创建工厂类实例的情况下就可以调用工厂类方法。因此静态工程方法比非静态工厂方法的调用更加方便简洁。下面通过一个实例来演示静态工厂方法。
编写factory类:
package com.Kevin.factorybean;/ 编写工厂类测试静态工厂方法注入 @author Kevin /public class CarFactory { public static Car createCar(){ Car car = new Car(); car.setBrand("Lamborghini"); return car; }}
编写配置文件:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="; xmlns:xsi="; xmlns:context="; xsi:schemaLocation=" ; <!-- bean definitions here --> <!-- 配置对象 --> <bean id="car" class="com.Kevin.factorybean.Car" factory-mod="createCar"></bean> </beans>
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。