加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

属性依赖注入

发布时间:2020-12-14 01:35:52 所属栏目:百科 来源:网络整理
导读:基于xml装配: 构造方法注入 1目标类 package com.itheima.f_xml.a_construct;public class User {private Integer uid ;private String username ;private Integer age ;public User(Integer uid,String username) {super();this.uid = uid;this.username =

基于xml装配:

构造方法注入

1目标类
package com.itheima.f_xml.a_construct;

public class User {
	private Integer uid ;
	private String username ;
	private Integer age ;
	

	public User(Integer uid,String username) {
		super();
		this.uid = uid;
		this.username = username;
	}
	
	public User(String username,Integer age) {
		super();
		this.username = username;
		this.age = age;
	}

	public Integer getUid() {
		return uid;
	}
	public void setUid(Integer uid) {
		this.uid = uid;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	@Override
	public String toString() {
		return "User [uid=" + uid + ",username=" + username + ",age=" + age
				+ "]";
	}
	
	
	
	

}
2spring配置
	<!-- 配置service 
		<bean> 配置需要创建的对象
			id :用于之后从spring容器获得实例时使用的
			class :需要创建实例的全限定类名
			
			构造方法注入:
			<consturctor-arg> 用于配置构造方法中一个参数argument
			index:参数的索引号,从0开始,如果只有索引,匹配到多个构造方法时,默认使用第一个。
			type : 确定参数类型 
	-->
	<bean id="userId" class="com.itheima.f_xml.a_construct.User">
	    <constructor-arg index="0" type="java.lang.String" value="1"></constructor-arg>
	    <constructor-arg index="1"  type="java.lang.Integer" value="2"></constructor-arg>
	</bean>

3测试
package com.itheima.f_xml.a_construct;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestCon {
	@Test
	public void demo02(){
		String xmlPath = "com/itheima/f_xml/a_construct/beans.xml";
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
		User user= (User) applicationContext.getBean("userId");
		System.out.println(user);
	}

}


setter方法注入

1目标类

package com.itheima.f_xml.b_setter;


public class Person {
	private String name ;
	private Integer age ;
	
	private Address homeaddr ;
	private Address companyaddr ;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public Address getHomeaddr() {
		return homeaddr;
	}
	public void setHomeaddr(Address homeaddr) {
		this.homeaddr = homeaddr;
	}
	public Address getCompanyaddr() {
		return companyaddr;
	}
	public void setCompanyaddr(Address companyaddr) {
		this.companyaddr = companyaddr;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ",age=" + age + ",homeaddr="
				+ homeaddr + ",companyaddr=" + companyaddr + "]";
	}	
}

package com.itheima.f_xml.b_setter;

public class Address {
	private String addr ;
	private String tel ;
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
	@Override
	public String toString() {
		return "Address [addr=" + addr + ",tel=" + tel + "]";
	}
	
	
}


2配置
<!-- setter方法注入     property   -->
<bean id = "personid" class="com.itheima.f_xml.b_setter.Person">
    <property name="name" value = "**"></property>
	<property name="age" value="27"></property>
	<property name="homeaddr" ref="homeAddrId"></property>
	<property name="companyaddr" ref="companyAddrId"></property>
</bean>


<bean id = "homeAddrId" class="com.itheima.f_xml.b_setter.Address">
    <property name="addr" value="湖北"></property>
    <property name="tel" value="158"></property>
</bean>
<bean id="companyAddrId" class="com.itheima.f_xml.b_setter.Address">
    <property name="addr" value="上海"></property>
    <property name="tel" value="159"></property>
</bean>
3测试


p命令空间方法注入

该方法是对setter方法进行简化,替换<property>,而是在<bean p:属性名= “普通数据” p:属性名-ref = "引用数据">
<bean id = "personid"  class="com.itheima.f_xml.b_setter.Person" 
    p:name = "zn" p:age="27" 
    p:homeaddr-ref="homeAddrId"
    p:companyaddr-ref= "companyAddrId">
</bean>
<bean id = "homeAddrId" class="com.itheima.f_xml.b_setter.Address"
    p:addr = "湖北" p:tel = "111">
</bean>
<bean id="companyAddrId" class="com.itheima.f_xml.b_setter.Address"
    p:addr = "sh" p:tel = "123">
</bean>


SpEL注入


对<property>进行统一编程,所有的内容都使用value

<!-- 
	<property name="name" value="#{'jack'}"></property>
	    <property name="name" value="#{personId.name.toUpperCase()}"></property>
	    通过另一个bean,获得属性,调用方法
	    <property name="name" value="#{personId.name?.toUpperCase()}"></property>
	    ?.如果对象不为null,将调用方法
	     <property name="pi" value="#{T(java.lang.Math).PI}"></property>
	           静态类的字段
	
 -->
<bean id="personId" class = "com.itheima.f_xml.c_spEL.Person" >
    
    <property name="name" value="#{personId.name?.toUpperCase()}"></property>
    <property name="pi" value="#{T(java.lang.Math).PI}"></property>
</bean>

集合注入

    
    <!-- 集合的注入都是给<property>添加子标签
           数组:标签<array>
    List: <list>
    Set:<set>
    Map:<map> map存k/v键值对,用entry
    Properties: <props> <prop key="">value</prop>
    普通数据: 标签<value>
    引用数据:<ref>
    
    
     -->
<bean id="personId" class = "com.itheima.f_xml.c_spEL.Person" >
	<property name="arrayData">
	    <array>
	        <value>dd</value>
	        <value>dd1</value>
	        <value>dd2</value>
	        <value>dd3</value>
	    </array>
	</property>
	<property name="listData">
	    <list>
	        <value>list1</value>
	        <value>list2</value>
	        <value>list3</value>
	        <value>list4</value>
	        
	    </list>
	</property>
	<property name="setData">
	    <set>
	        <value>set1</value>
	        <value>set2</value>      
	    </set>
	</property>
	
	<property name="mapData">
	    <map>
	        <entry key="map" value="地图"></entry>
	         <entry key="jack" value="捷克"></entry>
	        
	    </map>
	</property>
	<property name="propsData">
	    <props>
	        <prop key="高富帅">洋</prop>
	        <prop key="白富美">美</prop>
	        <prop key="屌丝">周</prop>
	    </props>
	</property>
</bean>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读