文章目录
使用
bean
标签来注入Bean
1. Constructor注入
通过Bean的构造方法给Bean的属性注入值。
1.1 无参构造方法注入
<!--无参构造方法来注入Bean-->
<bean class="com.learning.spring.ioc.Book" id="book0"/>
1.2 有参构造方法注入
在bean
标签中使用constructor-arg
标签来实现有参构造方法来注入Bean。
1.2.1 index方式
<!--有参构造方法注入:index表示属性定义的顺序-->
<bean class="com.learning.spring.ioc.Book" id="book1">
<constructor-arg index="0" value="1"/>
<constructor-arg index="1" value="三国演义"/>
<constructor-arg index="2" value="30"/>
</bean>
1.2.2 name方式
<!--有参构造方法注入:name表示属性定义名称-->
<bean class="com.learning.spring.ioc.Book" id="book2">
<constructor-arg name="id" value="2"/>
<constructor-arg name="name" value="红楼梦"/>
<constructor-arg name="price" value="40"/>
</bean>
2. Setter注入
我们也可以通过Bean属性的set方法注入值。此时,在bean
标签中我们使用property
标签来完成属性的注入。这里的name
的值是根据setter方法名推断出来的值,而非属性名称。
<bean class="com.learning.spring.ioc.Book" id="book3">
<property name="id" value="3"/>
<property name="name" value="水浒传"/>
<property name="price" value="30"/>
</bean>
3. P名称空间注入
在名称空间中加入p名称空间,直接在bean
标签的属性中使用p
来设置属性值。注意,这里不是属性名称,而是和属性对应的setter方法一一对应。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--在p名称空间的加持下直接给属性赋值,这里要和Setter方法名称保持一致-->
<bean class="com.learning.spring.ioc.Book" id="book4" p:id="4" p:bookName="西游记" p:price="33"/>
</beans>
4. 工厂方法注入
4.1 静态工厂注入
4.1.1 静态工厂方法示例
静态工厂方法提供了单实例的创建及获取。
public class OkHttpUtils {
private static OkHttpClient OkHttpClient;
public static OkHttpClient getInstance() {
if (OkHttpClient == null) {
OkHttpClient = new OkHttpClient.Builder().build();
}
return OkHttpClient;
}
}
4.1.2 注入静态工厂方法提供的Bean
<bean class="org.javaboy.OkHttpUtils" factory-method="getInstance" id="okHttpClient"></bean>
4.2 实例工厂注入
实例工厂就是工厂方法是一个实例方法,这样,工厂类必须实例化之后才可以调用工厂方法。
4.2.1 实例工厂方法示例
public class OkHttpUtils {
// 注意这里是实例属性
private okhttp3.OkHttpClient OkHttpClient;
public OkHttpClient getInstance() {
if (OkHttpClient == null) {
OkHttpClient = new OkHttpClient.Builder().build();
}
return OkHttpClient;
}
}
4.2.2 注入实例工厂方法提供的Bean
<!--先注册实例工厂-->
<bean class="com.learning.spring.ioc.OkHttpUtils" id="okHttpUtils"/>
<!--调用示例工厂的方法来注册实例okHttpClient-->
<bean class="okhttp3.OkHttpClient" factory-bean="okHttpUtils" factory-method="getInstance" id="okHttpClient"/>