Spring DI使用详解

一、介绍

  • DI的定义:依赖注入,为类里面的属性设值。例如,我们之前的setName方法就是在为name属性设值。
  • IOC与DI的关系:IOC进行对象的创建,DI进行值的注入。二者共同管理JavaBean,但DI是在IOC的基础上存在的,它不能单独存在。

二、代码演示

DI依赖注入也有两种方式,即配置文件注入和注解注入

一、配置文件注入

属性须知:

  • type:用于指定要注入的数据的数据类型,该数据类型也是构造函数中某个或某些参数的类型
  • index:用于指定要注入的数据给构造函数中指定索引位置的参数赋值,索引的位置从 0 开始
  • name:用于指定给构造函数中指定名称的参数赋值(一般用这个)
  • value:用于提供基本类型和String类型的数据
  • ref:用于指定其他的bean类型数据,即bean的id

前期代码准备:

//Dao.Class文件
public class Dao {
private String testDI;
public Dao(String testDI){
this.testDI=testDI;
}
}
//Service.Class文件
public class Service {
private Dao dao;
private String test;
private Map<String,String> map;
private Properties properties; public void setProperties(Properties properties) {
this.properties = properties;
} public void setMap(Map<String, String> map) {
this.map = map;
}
public void setDao(Dao dao) {
this.dao = dao;
}
public void setDao(Dao dao) {
this.dao = dao;
}
private String[] args;
private List<String> list; public void setArgs(String[] args) {
this.args = args;
}
public void setList(List<String> list) {
this.list = list;
}
}

applicationContext.xml配置文件

<?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/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> </beans>

配置文件注入又分三种 :

  1. 使用有参构造注入(以Dao类为例)

    <?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/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="dao" class="com.testWeb.dao.impl.Dao">
    <constructor-arg name="testDI" value="测试DI"></constructor-arg>
    </bean>
    </beans>
  2. 使用set方法注入(以Service类为例,注意: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"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="dao" class="com.testWeb.dao.impl.Dao">
    <constructor-arg name="testDI" value="测试DI"></constructor-arg>
    </bean>
    <bean id="service" class="com.testWeb.service.Service">
    <property name="dao" ref="dao"></property>
    </bean>
    </beans>
  3. P名称空间注入

    <?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/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <bean id="dao" class="com.testWeb.dao.impl.Dao">
    <constructor-arg name="testDI" value="测试DI"></constructor-arg>
    </bean>
    <bean id="service" class="com.testWeb.service.Service" p:dao-ref="dao" p:test="测试"></bean>
    </beans>

4.复杂属性的注入

这里复杂属性的注入其实属于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"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--
id:用于SpringIOC调用,可以为任意
class:类的全路径
-->
<bean id="user" class="com.testWeb.daomain.User"></bean> <!--开启注解扫描-->
<context:component-scan base-package="com.testWeb"></context:component-scan>
<bean id="dao" class="com.testWeb.dao.impl.Dao">
<constructor-arg name="testDI" value="测试DI"></constructor-arg>
</bean>
<bean id="service" class="com.testWeb.service.Service" p:dao-ref="dao" p:test="测试">
<!--数组-->
<property name="args">
<list>
<value>测试1</value>
<value>测试2</value>
<value>测试3</value>
</list>
</property>
<!-- List-->
<property name="list">
<list>
<value>测试1</value>
<value>测试2</value>
<value>测试3</value>
</list>
</property>
<!--Map-->
<property name="map">
<map>
<entry key="name" value="LiMing"></entry>
<entry key="class" value="Class1"></entry>
<entry key="hoby" value="PingPang"></entry>
</map>
</property>
<!--properties-->
<property name="properties">
<props>
<prop key="driverclass">com.mysql.jdbc.Driver</prop>
</props>
</property>
</bean>
</beans>

二、注解注入

第一步、开启注解包扫描

<?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/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--开启注解扫描-->
<context:component-scan base-package="com.testWeb"></context:component-scan>
</beans>

第二步、利用注解创建对象并注入属性

//Dao.class文件
@Service(value = "dao")
public class Dao { public void test(){
System.out.println("test");
}
}
//Service.class文件
@Service(value = "service")
public class Service {
//得到dao对象
//在dao属性上利用注解直接注入,使用注解不用set方法
@Autowired //自动装配
private Dao dao;
//name中注解创建对象的Value值
@Resource(name="dao")
private Dao dao1;
}

小节,一般在实际开发中,对JavaBean的管理一般是,配置文件进行对象的创建,注解进行属性的注入

Spring DI使用详解的更多相关文章

  1. (转)Spring JdbcTemplate 方法详解

    Spring JdbcTemplate方法详解 文章来源:http://blog.csdn.net/dyllove98/article/details/7772463 JdbcTemplate主要提供 ...

  2. Spring jar包详解

    Spring jar包详解 org.springframework.aop ——Spring的面向切面编程,提供AOP(面向切面编程)的实现 org.springframework.asm——spri ...

  3. Spring——jar包详解(转)

    Spring——jar包详解 org.springframework.aop ——Spring的面向切面编程,提供AOP(面向切面编程)的实现 org.springframework.asm——spr ...

  4. Spring Boot异常处理详解

    在Spring MVC异常处理详解中,介绍了Spring MVC的异常处理体系,本文将讲解在此基础上Spring Boot为我们做了哪些工作.下图列出了Spring Boot中跟MVC异常处理相关的类 ...

  5. spring事务配置详解

    一.前言 好几天没有在对spring进行学习了,由于这几天在赶项目,没有什么时间闲下来继续学习,导致spring核心架构详解没有继续下去,在接下来的时间里面,会继续对spring的核心架构在继续进行学 ...

  6. spring注入参数详解

    spring注入参数详解 在Spring配置文件中, 用户不但可以将String, int等字面值注入到Bean中, 还可以将集合, Map等类型的数据注入到Bean中, 此外还可以注入配置文件中定义 ...

  7. Spring的lazy-init详解

    1.Spring中lazy-init详解ApplicationContext实现的默认行为就是在启动服务器时将所有singleton bean提前进行实例化(也就是依赖注入).提前实例化意味着作为初始 ...

  8. Spring Security Filter详解

    Spring Security Filter详解 汇总 Filter 作用 DelegatingFilterProxy Spring Security基于这个Filter建立拦截机制 Abstract ...

  9. Spring Boot 配置文件详解

    Spring Boot配置文件详解 Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件.他们的作用都是修改Spring Boot自动配置的默认值.相对于prop ...

随机推荐

  1. F - Bone Collector

    Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like ...

  2. mapstruct使用详解

    我们都知道,随着一个工程的越来越成熟,模块划分会越来越细,其中实体类一般存于 domain 之中,但 domain 工程最好不要被其他工程依赖,所以其他工程想获取实体类数据时就需要在各自工程写 mod ...

  3. 类内部装饰器的使用:property、classmethod与staticmethod

    1.property property是一种特殊的属性,可实现把函数名变为属性名使用.它可以在不改变类接口的前提下使用存取方法 (即读值和取值) 来修改数据的属性,property类有3个方法gett ...

  4. xpath爬虫实战-爬取小说斗罗大陆第四部

    爬取思路 用到的第三方库文件 lxml,requests,fake_agent 用fake_agent里的UserAgent修饰爬虫 用requests进行基本的请求 用lxml进行html的分析 用 ...

  5. php 推荐密码加密的方法

    password_hash() 函数 password_hash() 函数用于创建密码的散列(hash) PASSWORD_DEFAULT - 使用 bcrypt 算法 (PHP 5.5.0 默认). ...

  6. PHP 构造方法 __construct()

    PHP 构造方法 __construct() PHP 构造方法 __construct() 允许在实例化一个类之前先执行构造方法. 构造方法 构造方法是类中的一个特殊方法.当使用 new 操作符创建一 ...

  7. Vue Cli 3 报错:router is not defined

    报错内容: 报错原因: 代码全部放在了路由配置的main.js文件里,router没有定义,使用的时候报undefined 解决方法: 把router.beforeEach放在main.js里面

  8. vue-cli3.0 gui初体验

    为什么80%的码农都做不了架构师?>>>   介绍 新版的vuecli3.0提供了一个vue ui这个命令,这个命令是做什么的呢,这里引用官网的一段介绍 vue ui 你可以通过 v ...

  9. 在for循环里面的++i与i++的区别

    ++i与i++在表面上没有什么区别 for(语句 1;语句 2;语句 3) 语句 1 在循环(代码块)开始前执行 语句 2 定义运行循环(代码块)的条件 语句 3 在循环(代码块)已被执行之后执行 ( ...

  10. HDU 3038 (向量图解)

    题意:\(有n个人坐在zjnu体育馆里面,然后给出m个他们之间的距离, A B X, 代表B的座位比A多X.\) \(然后求出这m个关系之间有多少个错误,所谓错误就是当前这个关系与之前的有冲突\) \ ...