Spring属性注入、构造方法注入、工厂注入以及注入参数(转)
Spring 是一个开源框架.
Spring 为简化企业级应用开发而生(对比EJB2.0来说). 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能。
Spring 是一个 IOC(DI) 和 AOP 容器框架。
具体描述 Spring:
轻量级:Spring 是非侵入性的 - 基于 Spring 开发的应用中的对象可以不依赖于 Spring 的 API
控制反转(依赖注入) (IOC----inverse of control 、DI --- dependency injection)
面向切面编程(AOP --- aspect oriented programming)
容器: Spring 是一个容器, 因为它包含并且管理应用对象的生命周期
框架: Spring 实现了使用简单的组件配置组合成一个复杂的应用. 在 Spring 中可以使用 XML 和 Java 注解组合这些对象
一站式:在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库 (实际上 Spring 自身也提供了展现层的 SpringMVC 和 持久层的 Spring JDBC)
所需jar包

|
1
2
3
4
5
6
7
8
9
|
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean name="dog" class="com.zhiqi.entity.Dog"></bean> </beans> |
装配一个Bean
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package com.zhiqi.entity;public class Dog { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }} |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package com.zhiqi.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.zhiqi.entity.Dog;public class T { public static void main(String[] args) { ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml"); Dog dog=(Dog)ac.getBean("dog"); System.out.println(dog.getName()); }} |

此时装配了Dog这个类,但是为null
需要进行依赖注入(属性注入、构造方法注入,工厂注入)
1、属性注入:
装配一个员工类
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package com.zhiqi.entity;public class Employee { private int id; private String name; private String sex; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; }} |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package com.zhiqi.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.zhiqi.entity.Dog;import com.zhiqi.entity.Employee;public class T { public static void main(String[] args) { ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml"); Employee employee=(Employee)ac.getBean("employee"); System.out.println(employee.getName()); }} |

属性注入如下:<property name="" value=""></property>
|
1
2
3
4
5
|
<bean name="employee" class="com.zhiqi.entity.Employee"> <property name="id" value="10050"></property> <property name="name" value="小鲜肉"></property> <property name="sex" value="男"></property> </bean> |
构造方法注入一(通过类型):<constructor-arg type="" value=""></constructor-arg>
|
1
2
3
4
5
|
<bean name="employee" class="com.zhiqi.entity.Employee"> <constructor-arg type="int" value="10010"></constructor-arg> <constructor-arg type="String" value="小萝莉"></constructor-arg> <constructor-arg type="String" value="女"></constructor-arg> </bean> |
此时需要写构造函数否则会报错:

|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class Employee { private int id; private String name; private String sex; public Employee() { super(); // TODO Auto-generated constructor stub } public Employee(int id, String name, String sex) { super(); this.id = id; this.name = name; this.sex = sex; }} |
构造方法注入二(通过索引):<constructor-arg index="" value=""></constructor-arg> 索引从0开始
|
1
2
3
4
5
|
<bean name="employee" class="com.zhiqi.entity.Employee"> <constructor-arg index="0" value="10010"></constructor-arg> <constructor-arg index="1" value="小萝莉"></constructor-arg> <constructor-arg index="2" value="女"></constructor-arg> </bean> |
可以混合使用 类型+索引
|
1
2
3
4
5
|
<bean name="employee" class="com.zhiqi.entity.Employee"> <constructor-arg type="int" index="0" value="10010"></constructor-arg> <constructor-arg type="String" index="1" value="小萝莉"></constructor-arg> <constructor-arg type="String" index="2" value="女"></constructor-arg> </bean> |
通过工厂注入:<bean name="employee" factory-bean="" factory-method=""></bean>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package com.zhiqi.factory;import com.zhiqi.entity.Employee;public class EmployeeFactory { public Employee createEmployee(){ Employee employee=new Employee(); employee.setId(10080); employee.setName("小霸王"); employee.setSex("男"); return employee; }} |
|
1
2
3
4
5
6
7
8
9
10
11
12
|
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean name="dog" class="com.zhiqi.entity.Dog"></bean> <bean name="employeeFactory" class="com.zhiqi.factory.EmployeeFactory"></bean> <bean name="employee" factory-bean="employeeFactory" factory-method="createEmployee"></bean> </beans> |

通过静态工厂注入:


注入参数:
1、基本类型值
2、注入bean
3、内部bean
4、null值
5、级联属性
6、集合注入(List、Set、Map)
员工有一辆车
|
1
2
3
4
5
6
7
8
9
|
<bean id="employee" class="com.zhiqi.entity.Employee"> <property name="id" value="10060"></property> <property name="name" value="脑残粉"></property> <property name="sex" value="女"></property> <property name="car" ref="car"></property> </bean> <bean id="car" class="com.zhiqi.entity.Car"> <property name="name" value="别克"></property> </bean> |

一辆车只属于某员工,内部bean
|
1
2
3
4
5
6
7
8
9
10
|
<bean id="employee" class="com.zhiqi.entity.Employee"> <property name="id" value="10060"></property> <property name="name" value="脑残粉"></property> <property name="sex" value="女"></property> <property name="car"> <bean class="com.zhiqi.entity.Car"> <property name="name" value="雪佛兰"></property> </bean> </property> </bean> |

有一个员工没有车
|
1
2
3
4
5
6
7
8
|
<bean id="employee" class="com.zhiqi.entity.Employee"> <property name="id" value="10060"></property> <property name="name" value="脑残粉"></property> <property name="sex" value="女"></property> <property name="car"> <null></null> </property> </bean> |

级联
|
1
2
3
4
5
6
|
<bean id="employee" class="com.zhiqi.entity.Employee"> <property name="id" value="10060"></property> <property name="name" value="脑残粉"></property> <property name="sex" value="女"></property> <property name="car.name" value="好车"></property> </bean> |
此时在Car中new一个

一个员工有多个girlFriend
|
1
2
3
4
5
|
private int id; private String name; private String sex; private Car car; private List<String> girlFriend=new ArrayList<String>(); |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="employee" class="com.zhiqi.entity.Employee"> <property name="id" value="10060"></property> <property name="name" value="脑残粉"></property> <property name="sex" value="女"></property> <property name="car" value="宾利"></property> <property name="girlFriend"> <list> <value>琪琪</value> <value>丽丽</value> <value>小莫</value> </list> </property> </bean></beans> |

一个员工有多套房子
private Set<String> house=new HashSet<String>();
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="employee" class="com.zhiqi.entity.Employee"> <property name="id" value="10060"></property> <property name="name" value="脑残粉"></property> <property name="sex" value="女"></property> <property name="car" value="宾利"></property> <property name="girlFriend"> <list> <value>琪琪</value> <value>丽丽</value> <value>小莫</value> </list> </property> <property name="house"> <set> <value>房子1</value> <value>别墅2</value> </set> </property> </bean></beans> |
一个员工的工作
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="employee" class="com.zhiqi.entity.Employee"> <property name="id" value="10060"></property> <property name="name" value="脑残粉"></property> <property name="sex" value="女"></property> <property name="car" value="宾利"></property> <property name="girlFriend"> <list> <value>琪琪</value> <value>丽丽</value> <value>小莫</value> </list> </property> <property name="house"> <set> <value>房子1</value> <value>别墅2</value> </set> </property> <property name="works"> <map> <entry> <key><value>上午</value></key> <value>撸代码</value> </entry> <entry> <key><value>下午</value></key> <value>找BUG</value> </entry> </map> </property> </bean></beans> |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package com.zhiqi.test;import java.util.Iterator;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.zhiqi.entity.Employee;public class T { public static void main(String[] args) { ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml"); Employee employee=(Employee)ac.getBean("employee"); for(String str:employee.getHouse()){ System.out.println(str); } //entrySet()将map转为set,然后迭代器遍历 Iterator it=employee.getWorks().entrySet().iterator(); while(it.hasNext()){ System.out.println(it.next()); } }} |
Spring属性注入、构造方法注入、工厂注入以及注入参数(转)的更多相关文章
- (spring-第3回【IoC基础篇】)spring的依赖注入-属性、构造函数、工厂方法等的注入(基于XML)
Spring要把xml配置中bean的属性实例化为具体的bean,"依赖注入"是关卡.所谓的"依赖注入",就是把应用程序对bean的属性依赖都注入到spring ...
- Spring 属性注入(三)AbstractNestablePropertyAccessor
Spring 属性注入(三)AbstractNestablePropertyAccessor Spring 系列目录(https://www.cnblogs.com/binarylei/p/10117 ...
- Spring 属性注入(一)JavaBean 内省机制在 BeanWrapper 中的应用
Spring 属性注入(一)JavaBean 内省机制在 BeanWrapper 中的应用 Spring 系列目录(https://www.cnblogs.com/binarylei/p/101174 ...
- Spring 属性注入(二)BeanWrapper 结构
Spring 属性注入(二)BeanWrapper 结构 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) BeanWrap ...
- Spring 属性注入(四)属性键值对 - PropertyValue
Spring 属性注入(四)属性键值对 - PropertyValue Spring 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) P ...
- spring属性注入
1,set方法注入 (1)对于值类型的属性: 在对象中一定要有set方法 package com.songyan.demo1; import com.songyan.injection.Car; /* ...
- spring属性注入方式
一.使用有参构造注入属性 配置文件 constructor-arg标签是需注入属性的名字 User类 生成了User的有参构造函数 测试类 结果 打印出了name属性的值 二.使用set方法注入属性 ...
- Spring IOC源代码具体解释之容器依赖注入
Spring IOC源代码具体解释之容器依赖注入 上一篇博客中介绍了IOC容器的初始化.通过源代码分析大致了解了IOC容器初始化的一些知识.先简单回想下上篇的内容 加载bean定义文件的过程.这个过程 ...
- 三大框架 之 Spring(IOC控制反转、DI依赖注入)
目录 常用词汇 left join与left outer join的区别 Struts2的标签库导入 Spring Spring概述 什么是Spring spring特点 下载 IOC 什么IOC 传 ...
- Spring升级案例之IOC介绍和依赖注入
Spring升级案例之IOC介绍和依赖注入 一.IOC的概念和作用 1.什么是IOC 控制反转(Inversion of Control, IoC)是一种设计思想,在Java中就是将设计好的对象交给容 ...
随机推荐
- (转)java类到底是如何加载并初始化的?
Java虚拟机如何把编译好的.class文件加载到虚拟机里面?加载之后如何初始化类?静态类变量和实例类变量的初始化过程是否相同,分别是如何初始化的呢?这篇文章就 是解决上面3个问题的. 若有不正之处, ...
- APP数据埋点分类方式
1.数据埋点的重要性 在现实工作中,数据的整体流程为:数据生产-数据采集-数据处理-数据分析和挖掘-数据可视化,其中,数据采集是很重要的一个环节,数据采集得全不全.对不对,直接决定数据广度和质 ...
- xlrd,xlwt操作Excel实例
把有合并单元格的信息读取出来,输出所在层数与位置 我要操作的Excel是这样的 要的到的是这样的效果 # -*- coding: utf-8 -*- import xlrd import xlwt r ...
- xpath(待补充)
from lxml import etree html=""" <div> <ul> <li>1</li> <li ...
- springmvc自定义视图
自定义视图 可以整合jfreechart.excel @RequestMapping("/testView") public String testView(){ System.o ...
- python之路 面向对象进阶篇
一.字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类 class Province: # 静态字段 countr ...
- 与进程相关的命令ps、kill
一.概述 Ubuntu中主要有如下操作进程的命令 二.进程查看命令 ps 2.1 ps –l PPID:父进程的 PID PID:进程的PID S:进程状态,S:是指sleep睡眠状态:T:是挂起状态 ...
- cf100989b
http://codeforces.com/gym/100989/my B. LCS (B) time limit per test 0.25 seconds memory limit per tes ...
- application/x-www-form-urlencoded和multipart/form-data
我们在提交表单的时候,form表单参数中会有一个enctype的参数. EncType表明提交数据的格式,用 Enctype 属性指定将数据发到服务器时浏览器使用的编码类型. enctype指定了H ...
- Python3.x: pyodbc+FreeTDS+UinxODBC连接sybase数据库(Linux系统)
Python3.x: pyodbc+FreeTDS+UinxODBC连接sybase数据库(Linux系统) 一.安装UinxODBC以及依赖包 yum -y install gcc gcc-c++ ...
