Spring DI使用详解
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>
配置文件注入又分三种 :
使用有参构造注入(以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>
使用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>
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使用详解的更多相关文章
- (转)Spring JdbcTemplate 方法详解
Spring JdbcTemplate方法详解 文章来源:http://blog.csdn.net/dyllove98/article/details/7772463 JdbcTemplate主要提供 ...
- Spring jar包详解
Spring jar包详解 org.springframework.aop ——Spring的面向切面编程,提供AOP(面向切面编程)的实现 org.springframework.asm——spri ...
- Spring——jar包详解(转)
Spring——jar包详解 org.springframework.aop ——Spring的面向切面编程,提供AOP(面向切面编程)的实现 org.springframework.asm——spr ...
- Spring Boot异常处理详解
在Spring MVC异常处理详解中,介绍了Spring MVC的异常处理体系,本文将讲解在此基础上Spring Boot为我们做了哪些工作.下图列出了Spring Boot中跟MVC异常处理相关的类 ...
- spring事务配置详解
一.前言 好几天没有在对spring进行学习了,由于这几天在赶项目,没有什么时间闲下来继续学习,导致spring核心架构详解没有继续下去,在接下来的时间里面,会继续对spring的核心架构在继续进行学 ...
- spring注入参数详解
spring注入参数详解 在Spring配置文件中, 用户不但可以将String, int等字面值注入到Bean中, 还可以将集合, Map等类型的数据注入到Bean中, 此外还可以注入配置文件中定义 ...
- Spring的lazy-init详解
1.Spring中lazy-init详解ApplicationContext实现的默认行为就是在启动服务器时将所有singleton bean提前进行实例化(也就是依赖注入).提前实例化意味着作为初始 ...
- Spring Security Filter详解
Spring Security Filter详解 汇总 Filter 作用 DelegatingFilterProxy Spring Security基于这个Filter建立拦截机制 Abstract ...
- Spring Boot 配置文件详解
Spring Boot配置文件详解 Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件.他们的作用都是修改Spring Boot自动配置的默认值.相对于prop ...
随机推荐
- Daily Scrum 1/5/2015
Process: Zhaoyang: Fix some crash bugs and increase the program stability. Yangdong: Complete some b ...
- 6.表单提交,input键盘变搜索,有关自定义属性input操作
1.键盘变搜索 1.) 在form 上加action="#", 2.)input type=search, 3.)此时会提交到 #,需要再添加一个input display=non ...
- python 携程asyncio 实现高并发示例2
https://www.bilibili.com/video/BV1g7411k7MD?from=search&seid=13649975876676293013 import asyncio ...
- Spring Cloud 系列之 Sleuth 链路追踪(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Sleuth 链路追踪(一) 本篇文章讲解 Sleuth 基于 Zipkin 存储链路追踪数据至 MySQL,Elas ...
- Spring Cloud微服务技术概览
Spring Cloud 是一系列框架的有序集合.它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均衡.断路器.数据监控等,都 ...
- tp5--路由的使用(初级)
在配置文件夹下的route.php文件配置路由: 控制器: 运行结果:
- php 关于 & 引用赋值
$a = ; $b = ; echo $a . echo $b . $a = $b; echo $a . echo $b . $a = &$b; echo $a . echo $b . $a ...
- 20199326《Linux内核原理与分析》第十二周作业
Collabtive系统跨站请求伪造攻击实验 实验背景 CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/sessi ...
- 接近8000字的Spring/SpringBoot常用注解总结!安排!
0.前言 大家好,我是 Guide 哥!这是我的 221 篇优质原创文章.如需转载,请在文首注明地址,蟹蟹! 本文已经收录进我的 75K Star 的 Java 开源项目 JavaGuide:http ...
- Django 内置分页的简单使用
1, 文档 https://docs.djangoproject.com/en/1.11.1/topics/pagination/ 2,视图 from django.core.paginator im ...