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方法的属性注入
随机推荐
- Python - 基础数据类型 dict 字典
字典简介 字典在 Python 里面是非常重要的数据类型,而且很常用 字典是以关键字(键)为索引,关键字(键)可以是任意不可变类型 字典由键和对应值成对组成,字典中所有的键值对放在 { } 中间,每一 ...
- JBoss JMXInvokerServlet 反序列化漏洞
poc地址:https://cdn.vulhub.org/deserialization/DeserializeExploit.jar
- 网络安全日记 ① IIS 之web服务器搭建以及dns转发配置
IIS(internet info server)服务器的搭建 创建iis服务 打开光驱 选择网络应用服务 安装iis和ftp(后面有讲) 配置服务 通过管理工具打开iis 2. 此时80端口就已经开 ...
- 背单词(AC自动机+线段树+dp+dfs序)
G. 背单词 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 给定一张包含N个单词的表,每个单词有个价值W.要求从中选出一个子序列使 ...
- 原生ajax练习-post&xml
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- template.js模板工具案例
案例一 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset=&qu ...
- MySQL 索引使用案例
索引使用案例 支持多种过滤条件 假设要设计一个在线约会网站,用户信息表有很多列,包括国家.地区.城市.性别.眼睛颜色,等等.网站必须支持上面这些特征的各种组合来搜索用户,还必须允许根据用户的最后在线时 ...
- 100的累加和 while 循环
//100的累加和 while 循环 #include <stdio.h> int main() { int sum = 0; //5050 int i = 0; while(i < ...
- STM32启动文件详解及SystemInit函数分析(转)
;先在RAM中分配系统使用的栈,RAM的起始地址为0x2000_0000 ;然后在RAM中分配变量使用的堆 ;然后在CODE区(flash)分配中断向量表,flash的起始地址为0x0800_0000 ...
- WPF 线程开启等待动画
public static Dictionary<string, object> Dic = new Dictionary<string, object>();//定义一个字典 ...