spring 构造方法注入和setter方法注入的XML表达

1.构造方法注入

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
 3 <beans>
 4     <bean id="person" class="com.thief.demo.Person">
 5         <constructor-arg value="1"/>
 6         <constructor-arg value="Tom"/>
 7         <constructor-arg ref="friend"/>
 8     </bean>
 9
10     <bean id="friend" class="com.thief.demo.Friend">
11         <constructor-arg value="Jack"/>
12     </bean>
13 </beans>

2.setter方法注入

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
<beans>
    <bean id="person" class="com.thief.demo.Person">
        <property name="id" value="1"/>
        <property name="name" value="Tom"/>
        <property name="friend" ref="friend"/>
    </bean>

    <bean id="friend" class="com.thief.demo.Friend">
        <property name="name" value="Jack"/>
    </bean>
</beans>

3.<property>和<constructor-arg>中可用的配置项。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
 3 <beans>
 4     <!-- <value>:为对象注入String类型、基本数据类型和它们的包装器类型的数据 -->
 5     <!-- 示例一 -->
 6     <bean id="person" class="com.thief.demo.Person">
 7         <constructor-arg>
 8             <value>11111</value>
 9         </constructor-arg>
10         <property name="id">
11             <value>11111</value>
12         </property>
13     </bean>
14     <!-- 示例二 -->
15     <bean id="person2" class="com.thief.demo.Person">
16         <constructor-arg value="11111"/>
17         <property name="id" value="11111"/>
18     </bean>
19
20
21     <!-- <ref>:引用容器中其他的对象实例 -->
22     <bean id="person2" class="com.thief.demo.Person">
23         <constructor-arg ref="friend"/>
24         <property name="friend" ref="friend"/>
25     </bean>
26     <bean id="friend" class="com.thief.demo.Friend">
27         <property name="name" value="Jack"/>
28     </bean>
29
30
31     <!-- 内部<bean>:如果所依赖的对象只有当前一个对象引用,或者某个对象定义不想其他对象通过<ref>引用到它,这时候就可以使用内部<bean> -->
32     <bean id="person3" class="com.thief.demo.Person">
33         <constructor-arg>
34             <bean class="com.thief.demo.Friend"/>
35         </constructor-arg>
36     </bean>
37
38
39     <!-- <list>:<list>对应注入对象类型为java.util.List及其子类或者数组类型的依赖对象 -->
40     <bean id="person4" class="com.thief.demo.Person">
41         <property name="list">
42             <list>
43                 <value>11111</value>
44                 <ref bean="friend"/>
45                 <bean class="com.thief.demo.Friend"/>
46             </list>
47         </property>
48     </bean>
49
50
51     <!-- <set>:<set>对应注入Java Collection中类型为java.util.Set或者其子类的依赖对象 -->
52     <bean id="person5" class="com.thief.demo.Person">
53         <property name="set">
54             <set>
55                 <value>11111</value>
56                 <ref bean="friend"/>
57                 <bean class="com.thief.demo.Friend"/>
58             </set>
59         </property>
60     </bean>
61
62
63     <!-- <map>:<map>对应注入对象类型为java.util.Map或者其子类类型的依赖对象 -->
64     <bean id="person6" class="com.thief.demo.Person">
65         <property name="map">
66             <map>
67                 <entry key="id">
68                     <value>11111</value>
69                 </entry>
70                 <entry key="friend">
71                     <ref bean="friend"/>
72                 </entry>
73             </map>
74         </property>
75     </bean>
76
77
78     <!-- <props>: <props>对应配置类型为java.util.Properties的对象依赖 -->
79     <bean id="person7" class="com.thief.demo.Person">
80         <property name="props">
81             <props>
82                 <prop key="id">11111</prop>
83                 <prop key="name">Tom</prop>
84             </props>
85         </property>
86     </bean>
87 </beans>

4.autowire

除了可以通过配置明确指定bean之间的依赖关系,Spring还提供了根据bean定义的某些特点将相互依赖的某些bean直接自动绑定的功能。通过bean的autowire属性,可以指定当前bean定义采用某种类型的自动绑定模式。这样就无需手工明确指定该bean定义相关的依赖关系,从而也可免去一些手工输入的工作量。

Spring提供了5种自动绑定模式,即no,byName,byType,constructor和autodetect。

• no

容器默认的自动绑定模式,也就是不采用任何形式的自动绑定,完全依赖手工明确配置各个bean之间的依赖关系。

• byName

按照类中声明的实例变量的名称,与XML配置文件中声明的bean定义的beanName的值进行匹配,相匹配的bean定义将被自动绑定到当前实例变量上。

• byType

如果指定当前bean定义的autowire模式为byType,那么,容器会根据当前bean定义类型,分析其相应的依赖对象类型,然后到容器所管理的所有bean定义中寻找与依赖对象类型相同的bean定义,然后将找到的符合条件的bean自动绑定到当前bean定义。

如果找不到,则不做设置。但如果找到多个,容器无法解决“该选用哪一个”的问题,需要你对该问题进行修正。所以,byType只能保证,在容器中只存在一个符合条件的依赖对象的时候才会发挥最大的作用。

• constructor

byName和byType类型的自动绑定模式是针对property的自动绑定,而constructor类型则是针对构造方法参数的类型而进行的自动绑定,它同样是byType类型的绑定模式。不过,constructor是匹配构造方法的参数类型,而不是实例属性的类型。与byType模式类似,如果找到不止一个符合条件的bean定义,那么,容器会返回错误。

• autodetect

这中模式是byType和constructor的结合体,如果对象拥有默认无参数的构造方法,容器会优先考虑byType的自动绑定模式。否则,会使用constructor模式,当然,如果通过构造方法注入绑定后还有其他属性没有绑定,容器也会使用byType对剩余的对象属性进行绑定。

时间: 2024-10-08 20:50:26

spring 构造方法注入和setter方法注入的XML表达的相关文章

spring依赖注入之构造函数注入,set方法注入

<?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

p命名空间简化属性依赖注入之setter方法

 为了简化setter方法,之前通过<property>进行注入,p命名使用属性,<bean id="" class=""  p:属性名="普通值"  p:属性名-ref="引用值">.不过这种方法在企业级开发中用的比较少. 如图所示,在实现p命名空间之前,要做一点事情.前面p必选,后面p可以改成别的名字. 来两份Bean public class address { private String na

spring Setter方法注入

package entity; public class User { private String id; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = na

Spring.Net学习笔记(6)-方法注入

一.开发环境 系统:win10 编译器:VS2013 二.涉及程序集 Spring.Core.dll 1.3.1 Common.Logging.dll 三.开发过程 1.项目结构 2.编写Mobile.cs namespace SpringNetMethodDi { public abstract class Mobile { //可以是virtual public abstract SendTool GetSendTool(); } } 3.编写SendTool.cs namespace Sp

JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring? Spring是分层的JavaSE/EE full-stack(一站式)轻量级开源框架. 所谓分层: SUN提供的EE的三层结构:web层.业务层.数据访问层(也称持久层,集成层). Struts2是web层基于MVC设计模式框架. Hibernate是持久的一个ORM的框架. 所谓一站式:Spring框架有对三层的每层解决方案.

【Spring】JavaBean的2种注入方法深入浅出

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 在定义了 JavaBean 装载信息之后需要对其赋值.一个 JavaBean 的赋值可以通过构造方法完成初始化,或者通过 set()方法初始化和改变属性值.下面分别介绍如何在 XML 中配置 JavaBean 的属性为构造方法和 set()方法传递参数. 一.构造注入 在类被实例化的时候,它的构造方法被调用并且只能调用一次.所以它被用于类的初始化操作.<constructor-arg>是&

使用构造方法注入和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:context="http://www.springframework.org/sch

Spring使用Setter依赖注入

一个简单的Spring例子来展示如何通过setter方法注入依赖项,最常用DI方法注入bean. 1. IOutputGenerator 接口和实现类 1 package faj.test.javademo.set; 2 3 /** 4 * Created by JiaGao on 2016/7/30. 5 */ 6 public interface IOutputGenerator { 7 void generateOutput(); 8 } 1 package faj.test.javade

【Spring】IOC之方法注入

方法注入在我看来就是为了实现在单例类中取得不同的实例类对象. 当一个Bean依赖的Bean和自己生命周期不同的时候:如Bean A依赖Bean B,Bean A 是singleton,如果需要在Bean A每次用到Bean B的时候都用一个Bean B的新的实例(注意是新的),即使通过在配置文件设置Bean B的 property或者 contructor-arg是不能实现的.这时候只能在Bean A中用Bean B的时候动态得到. 或者可以这么说, 调用一个singleton类型bean A的