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. 详解JS闭包概念

    闭包理解 1.  如何产生闭包?    *当一个嵌套的内部(子)函数引用了嵌套的外部(父)函数的变量(函数)时,产生闭包 2.  闭包到底是什么?    * 使用Chrome调试查看    * 理解一 ...

  2. Acid靶机渗透

    Acid渗透靶机实战 攻击机:kali 192.168.41.147 靶机: acid 192.168.41.149 信息收集 ip发现 开启Acid靶机,通过nmap进行局域网存火主机扫描.![]( ...

  3. v&n赛 ML 第一步(python解决)

    题目链接 给了70组x,y,根据提示,是求拟合曲线,再通过x求y 知道MATLAB应该录入就能解决吧,但是没下这软件,试试用python解决 #coding:utf- from pwn import ...

  4. WGCLOUD如何监控数据库

    WGCLOUD默认是支持mysql,sqlserver,oracle,postgresql数据库监控,不用添加任何配置. DB2也是支持的,但是需要做一些小修改. 因为db2驱动包版本比较多,所以要自 ...

  5. MySQL的远程链接

    安装好我们的mMySQL,是不是也有种无从下手的感觉,不用怕,接下来我们可以使用远程连接来可视化我们的数据库的数据: 1. 打开我们的数据库,帐号是root,密码查看文件就行了 2.使用命令: mys ...

  6. php函数封装

    这是一些自定义封装的函数类,调用起来很方便,以后会有更多的封装函数更新! // 弹框跳转function alert($msg,$url=''){ echo "<script>& ...

  7. urlencode()和rawurlencode()区别

    urlencode和rawurlencode两个方法在处理字母数字,特殊符号,中文的时候结果都是一样的 ,唯一的不同是对空格的处理,   urlencode处理成“+”,    rawurlencod ...

  8. 关于XSS弹窗的小姿势

    最近快比赛了想刷刷题,做合天XSS进阶的时候遇到了过滤了alert然后还要弹窗效果的题目,这让我这个JS只学了一点点的菜鸡倍感无力.     在百度了其他资料后,发现confirm('xss')和pr ...

  9. 2019-2020-1 20199326《Linux内核原理与分析》第四周作业

    第四周学习内容 庖丁解牛Linux内核分析第三章:MenuOS的构造 Linux内核分析实验三 学到的一些知识 操作系统两大宝剑:1.中断上下文的切换--保存现场和恢复现场 2.进程上下文的切换 Li ...

  10. 2019-2020-1 20199329《Linux内核原理与分析》第十二周作业

    <Linux内核原理与分析>第十二周作业 一.本周内容概述: 通过编程理解 Set-UID 的运行机制与安全问题 完成实验楼上的<SET-UID程序漏洞实验> 二.本周学习内容 ...