Spring依赖注入方式和内容

目录

1、依赖注入的概念

2、依赖注入的方式和内容

1)使用构造函数注入

2)使用set方法注入(常用)

扩展:p空间注入

复杂类型注入


1、依赖注入的概念

所谓依赖注入,是指在程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建按被调用者,而是依赖外部注入。

 

2、依赖注入的方式和内容

Spring的依赖注入:
            只有3种:(先讲2种)
                1.通过构造函数注入
                2.通过set方法注入
            注入的内容:
                第一类:基本类和String类型
                第二类:其他的bean类型
                第三类:复杂类型(集合类型)

1)使用构造函数注入


             涉及的标签:
                 constructor-arg
                 该标签是在bean内部的子标签
             标签的属性:
                 type:指定要注入的参数在构造函数中的类型
                 index:指定要注入的参数在构造函数中的索引位置
                 name:指定参数在构造函数中的名称
                 value:指定注入的数据内容,它只能指定基本数据类型和String类型
                 ref:指定其他bean类型数据。写的是其他bean的id。其他bean指的是在Spring容器中的bean

注:constructor-arg数量要与构造函数的参数个数一致,否则会报错

bean.xml:

<bean id="accountService" class="yilai.AccountServiceImpl">
      	<constructor-arg name="name" value="Jack"></constructor-arg>
      	<constructor-arg name="age" value="18"></constructor-arg>
      	<constructor-arg name="date" ref="now"></constructor-arg>
      </bean>
      <!-- 定义一个日期对象 -->
      <bean id="now" class="java.util.Date"></bean>

Client:

package yilai;

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

//表现层
public class Client {

	//获取Spring的核心容器,并根据id获取对象
	public static void main(String[] args) throws ClassNotFoundException {
		//1.获取Spring的核心容器
		ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
		//2.根据id获取对象
		IAccountService as = (IAccountService) ac.getBean("accountService");

		as.save();

	}

}

AccountServiceImpl:

package yilai;

import java.util.Date;

//业务层实现类
public class AccountServiceImpl implements IAccountService{

	private String name;
	private int age;
	private Date date;
	
	public AccountServiceImpl(String name, int age, Date date) {
		super();
		this.name = name;
		this.age = age;
		this.date = date;
	}

	@Override
	public void save() {
		System.out.println("执行了。。。"+name+", "+age+", "+date);
		
	}

}

2)使用set方法注入(常用)

      涉及的标签:
                  property
              标签的属性:
                  name:指定set方法的名称,是set后面的部分
                  value:.......
                  ref:.......

bean.xml:

<bean id="accountService2" class="yilai.AccountServiceImpl2">
      	<property name="name" value="Jack"></property>
      	<property name="age" value="18"></property>
      	<property name="date" ref="now"></property>
      </bean>
package yilai;

import java.util.Date;

//业务层实现类
public class AccountServiceImpl2 implements IAccountService{

	private String name;
	private int age;
	private Date date;
	
	public void setName(String name) {
		this.name = name;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	@Override
	public void save() {
		System.out.println("执行了。。。"+name+", "+age+", "+date);
		
	}

}

扩展:p空间注入

它需要类中提供set方法,同时需要在配置文件中导入p空间

修改:

 <beans xmlns="http://www.springframework.org/schema/beans"
 	xmlns:p="http://www.springframework.org/schema/p"
    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="accountService3" class="yilai.AccountServiceImpl3" p:name="Jack"></bean>
package yilai;

import java.util.Date;

//业务层实现类
public class AccountServiceImpl3 implements IAccountService{

	private String name;
	private int age;
	private Date date;
	
	public void setName(String name) {
		this.name = name;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	@Override
	public void save() {
		System.out.println("执行了。。。"+name+", "+age+", "+date);
		
	}

}

复杂类型注入

注:结构相同的标签,数据内容互换,不会造成影响,(array,list,set)(map,properties)

<bean id="accountService4" class="yilai.AccountServiceImpl4">
       	
       	<!-- 数组注入 -->
      	<property name="s">
      		<array>
      			<value>aaa</value>
      			<value>bbb</value>
      			<value>bbb</value>
      		</array>
      	</property>
      	
      	<!-- list注入 -->
      	<property name="list">
      		<list>
      			<value>aaa</value>
      			<value>bbb</value>
      			<value>bbb</value>
      		</list>
      	</property>
      	
      	<!-- set注入 -->
      	<property name="set">
      		<set>
      			<value>aaa</value>
      			<value>bbb</value>
      			<value>bbb</value>
      		</set>
      	</property>
      	
      	<!-- map注入 -->
      	<property name="map">
      		<map>
      			<!-- 两种写法 -->
      			<entry key="a" value="A"></entry>
      			<entry key="b">
      				<value>B</value>
      			</entry>
      		</map>
      	</property>
      	
      	<!-- properties注入 -->
      	<property name="pro">
      		<props>
      			<prop key="c">C</prop>
      			<prop key="d">D</prop>
      		</props>
      	</property>
      </bean>
package yilai;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

//业务层实现类
public class AccountServiceImpl4 implements IAccountService{

	private String[] s;
	private List<String> list;
	private Set<String> set;
	private Map<String, String> map;
	private Properties pro;
		
	public void setS(String[] s) {
		this.s = s;
	}

	public void setList(List<String> list) {
		this.list = list;
	}

	public void setSet(Set<String> set) {
		this.set = set;
	}

	public void setMap(Map<String, String> map) {
		this.map = map;
	}

	public void setPro(Properties pro) {
		this.pro = pro;
	}

	@Override
	public void save() {
		System.out.println(Arrays.toString(s));
		System.out.println(list);
		System.out.println(set);
		System.out.println(map);
		System.out.println(pro);
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值