Spring依赖注入的四种方式
首先,我们需要定义一个Bean的class类:
package framework.spring;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.*;
public class Person {
private String name;
private String address;
private int phone;
public Person() {
System.out.println("【构造器】调用Person的构造器实例化");
}
public Person(String name, String address, int phone) {
this.name = name;
this.address = address;
this.phone = phone;
}
public String getBeanName() {
return beanName;
}
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("【注入属性】注入属性name");
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
System.out.println("【注入属性】注入属性address");
this.address = address;
}
public int getPhone() {
return phone;
}
public void setPhone(int phone) {
System.out.println("【注入属性】注入属性phone");
this.phone = phone;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
", phone=" + phone +
", beanFactory=" + beanFactory +
", beanName='" + beanName + '\'' +
'}';
}
}
Setter注入
<!-- setter -->
<bean id="person1" class="framework.spring.Person" scope="singleton" p:name="张三" p:address="广州"
p:phone="1319412212" />
setter注入只需要将相对应的属性参数传入,就可以了。
构造器注入
<!-- constructor-->
<bean id="person2" class="framework.spring.Person" init-method="myInit"
destroy-method="myDestory" scope="singleton" >
<constructor-arg name="name" value="zhangsan"></constructor-arg>
<constructor-arg name="address" value="beijing"></constructor-arg>
<constructor-arg name="phone" value="1319124212"></constructor-arg>
</bean>
静态工厂注入
<!-- static factory-->
<bean id="person3" class="framework.spring.PersonFactory" scope="singleton" factory-method="staticPersonFactory">
</bean>
在静态工厂注入的配置文件中,我们需要定义对应的静态工厂类和静态方法。注意这里的静态就是指static,我刚刚突然想不起来静态是指什么意思了。
public class PersonFactory {
// static factory
public static Person staticPersonFactory(){
return new Person("lisi","nanjing",131912312);
}
// factory
public Person personFactory(){
return new Person("wanger","changsha",131912312);
}
}
这里定义了两个工厂,一个是静态的,一个是非静态的。
实例工厂注入
实例工厂和静态工厂稍微有点区别,因为静态工厂不需要初始化工厂,而实例工厂需要。
<!-- factory-->
<bean id="personFactory" class="framework.spring.PersonFactory"></bean>
<bean id="person4" class="framework.spring.PersonFactory" scope="singleton" factory-bean="personFactory" factory-method="personFactory">
</bean>
这里我们先定义了一个工厂类,然后才定义的我们需要的bean对象。
Spring依赖注入的四种方式的更多相关文章
- Spring依赖注入的三种方式
看过几篇关于Spring依赖注入的文章,自己简单总结了一下,大概有三种方式: 1.自动装配 通过配置applicationContext.xml中的标签的default-autowire属性,或者标签 ...
- SSH深度历险记(八) 剖析SSH核心原则+Spring依赖注入的三种方式
于java发育.一类程序猿必须依靠类的其他方法,它是通常new依赖类的方法,然后调用类的实例,这样的发展问题new良好的班统一管理的例子.spring提出了依赖注入的思想,即依赖类不由程 ...
- SSH深度历险(八) 剖析SSH核心原理+Spring依赖注入的三种方式
在java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依 ...
- Spring中依赖注入的四种方式
在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入 这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的sett ...
- spring的依赖注入的四种方式,数组与集合注入;引用注入;内部bean注入
三种注入方式 第一种: 基于构造函数 hi.java (bean) package test_one; public class hi { private String name; public hi ...
- spring 依赖注入的3种方式
在实际环境中实现IoC容器的方式主要分为两大类,一类是依赖查找,依赖查找是通过资源定位,把对应的资源查找回来:另一类则是依赖注入,而Spring主要使用的是依赖注入.一般而言,依赖注入可以分为3种方式 ...
- Spring基础05——Spring依赖注入的三种方式
Spring支持3种依赖注入的方式:属性注入.构造器注入.工厂 1.属性注入 属性注入即通过setter方法注入Bean的属性或依赖的对象.使用<property>元素,使用name属性指 ...
- spring——依赖注入的三种方式
1 构造器注入(与构造器有直接关系) 默认无参构造 3种构造方式:通过<contructor-arg>调用类中的构造器 下标 <bean id="userService&q ...
- 六 Spring属性注入的四种方式:set方法、构造方法、P名称空间、SPEL表达式
Spring的属性注入: 构造方法的属性注入 set方法的属性注入
随机推荐
- 快速设置 JAVA_HOME
快速设置 JAVA_HOME %SystemRoot%\System32\rundll32.exe sysdm.cpl,EditEnvironmentVariables
- HCNA Routing&Switching之交换技术基础
什么是交换机?顾名思义,交换机就是用来数据包交换的:广泛用于终端接入:它的前身是hub(集线器),hub是一个古老的设备,它的作用也是用于终端接入,但hub有一个最大的缺点是它不能隔离冲突域:所谓冲突 ...
- decimal和float的区别
场景 今天在开发的时候,在mongodb中有个字段保存的数据结构是decimal,然后需要对这个字段的值进行范围的查询.结果却怎么查询值范围都是空. 解决 如图中看到的,利用Navicat,可以明显的 ...
- 线性反馈移位寄存器(LFSR)
LFSR用于产生可重复的伪随机序列PRBS,该电路有n级触发器和一些异或门组成,如下图所示. 其中,gn为反馈系数,取值只能为0或1,取为0时表明不存在该反馈之路,取为1时表明存在该反馈之路:这里的反 ...
- 正则表达式-固定XML格式提取内容
(?<=(<(?<a>([A-Za-z]*?))>)).*?(?=(</\k<a>>))
- NAR | 张勇洪/周超/刘小云团队合作揭示2-羟基异丁酰化修饰调控光暗适应性反应机制
景杰生物 | 报道 组蛋白赖氨酸的翻译后修饰是表观遗传学密码的重要组成部分,它们动态地调节染色质的结构和功能,影响基因表达活性,参与生物体的环境适应性调控.赖氨酸酰化修饰家族(Acylation) ...
- C++ //多态 //静态多态:函数重载 和 运算符重载 属于静态多态 ,复用函数名 //动态多态:派生类和虚函数实现运行时多态
1 //多态 2 //静态多态:函数重载 和 运算符重载 属于静态多态 ,复用函数名 3 //动态多态:派生类和虚函数实现运行时多态 4 5 //静态多态和动态多态的区别 6 //静态多态的函数地址早 ...
- C++ //继承中构造和析构顺序
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 class Base 6 { 7 pu ...
- 心酸!30岁深漂失业3个月,从巅峰跌落谷底,大龄Android开发必须要懂的事!
2021年3月,我的前同事,在我们群里说他准备回老家了,问我们有没有人可以暂时收养他的猫. --他说,这周末就要离开深圳了. 他失业了.3个多月没收入,还要交着房租,过年来之后找了快一个月的工作也没有 ...
- 爱了,字节跳动大神最佳整理:582页Android NDK七大模块学习宝典,理论与实践
前言 时至今日,短视频App可谓是如日中天,一片兴兴向荣.随着短视频的兴起,音视频开发也越来越受到重视,而且薪资水涨船高,以一线城市为例,音视频工程开发的薪资比Android应用层开发高出40%. 但 ...