(Spring)依赖注入
文章目录
- 1. 概念
- 2. 构造器注入
- 3. Set注入
- 3.1 环境搭建
- 3.2 注入方式
- 4. p命名和c命名注入
- 5. Bean的作用域
- 5.1 singleton
- 5.2 prototype
- 5.3 其他作用域
1. 概念
依赖注入(Dependency Injection,DI)。
依赖 : 指Bean对象的创建依赖于容器 . Bean对象的依赖资源 .
注入 : 指Bean对象所依赖的资源 , 由容器来设置和装配 .
2. 构造器注入
上篇博客https://blog.csdn.net/qq_43601784/article/details/107301938中
3. Set注入
要求被注入的属性 , 必须有set方法 , set方法的方法名由set + 属性首字母大写 , 如果属性是boolean类型 , 没有set方法 , 是 is .
3.1 环境搭建
Address实体类
public class Address {private String address;public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}
}
Student实体类
public class Student {private String name;private Address address;private String[] books;private List<String> hobbies;private Map<String,String> card;private Set<String> games;private String wife;private Properties info;public String getName() {return name;}public Address getAddress() {return address;}public String[] getBooks() {return books;}public List<String> getHobbies() {return hobbies;}public Map<String, String> getCard() {return card;}public Set<String> getGames() {return games;}public String getWife() {return wife;}public Properties getInfo() {return info;}public void setName(String name) {this.name = name;}public void setAddress(Address address) {this.address = address;}public void setBooks(String[] books) {this.books = books;}public void setHobbys(List<String> hobbys) {this.hobbies = hobbys;}public void setCard(Map<String, String> card) {this.card = card;}public void setGames(Set<String> games) {this.games = games;}public void setWife(String wife) {this.wife = wife;}public void setInfo(Properties info) {this.info = info;}public void show(){System.out.println("name="+ name+ ",address="+ address.getAddress()+ ",books=");for (String book:books){System.out.print("<<"+book+">>\t");}System.out.println("\n爱好:"+hobbies);System.out.println("card:"+card);System.out.println("games:"+games);System.out.println("wife:"+wife);System.out.println("info:"+info);}
}
3.2 注入方式
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="address" class="com.zh.pojo.Address"><property name="address" value="皮尔特沃夫"/></bean><bean id="student" class="com.zh.pojo.Student"><!--常量注入--><property name="name" value="伊泽瑞尔"/><!--bean注入--><property name="address" ref="address"/><!--数组注入--><property name="books"><array><value>西游记</value><value>红楼梦</value><value>三国演义</value><value>水浒传</value></array></property><!--List注入--><property name="hobbys"><list><value>动漫</value><value>游戏</value></list></property><!--map注入--><property name="card"><map><entry key="身份证" value="123456"/><entry key="银行卡" value="1234564"/></map></property><!--Set注入--><property name="games"><set><value>LOL</value><value>DNF</value></set></property><!--NULL注入--><property name="wife"><null/></property><!--properties注入--><property name="info"><props><prop key="学号">13245</prop><prop key="性别">男</prop><prop key="姓名">伊泽瑞尔</prop></props></property></bean>
</beans>
测试
public class MyTest {@Testpublic void test1(){ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");Student student = (Student) context.getBean("student");student.show();}
}
4. p命名和c命名注入
p命名和c命名注入 分别对应set注入和构造器注入
测试类user
public class User {private String name;private int age;public User() {}public User(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
beans设置
<!--P(属性: properties)命名空间 , 属性依然要设置set方法--><bean id="user1" class="com.zh.pojo.User" p:name="伊泽瑞尔" p:age="18" /><!--C(构造: Constructor)命名空间 , 属性依然要设置set方法--><bean id="user2" class="com.zh.pojo.User" c:name="金克斯" c:age="18"/>
注意!
p和c注入不能直接使用,必须导入对应约束
xmlns:p="http://www.springframework.org/schema/p"xmlns:c="http://www.springframework.org/schema/c"
测试:
@Testpublic void test2(){ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");User user1 = context.getBean("user1", User.class);User user2 = context.getBean("user2", User.class);System.out.println("user1:"+user1);System.out.println("user2:"+user2);}
5. Bean的作用域
在Spring中,那些组成应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。简单地讲,bean就是由IoC容器初始化、装配及管理的对象 .
几种作用域中,request、session作用域仅在基于web的应用中使用(不必关心你所采用的是什么web应用框架),只能用在基于web的Spring ApplicationContext环境。
5.1 singleton
当一个bean的作用域为Singleton,那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。Singleton是单例类型,就是在创建起容器时就同时自动创建了一个bean的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。注意,Singleton作用域是Spring中的缺省作用域。要在XML中将bean定义成singleton,可以这样配置:
<bean id="user1" class="com.zh.pojo.User" p:name="伊泽瑞尔" p:age="18" scope="singleton "/>
5.2 prototype
当一个bean的作用域为Prototype,表示一个bean定义对应多个对象实例。Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。Prototype是原型类型,它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象。根据经验,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。在XML中将bean定义成prototype,可以这样配置:
<bean id="user1" class="com.zh.pojo.User" p:name="伊泽瑞尔" p:age="18" scope="prototype"/>
5.3 其他作用域
其他仅在基于web的应用中使用(不必关心你所采用的是什么web应用框架),只能用在基于web的Spring ApplicationContext环境。
(Spring)依赖注入相关推荐
- arg是什么函数_java后端开发三年!你还不了解Spring 依赖注入,凭什么给你涨薪...
前言 前两天和一个同学吃饭的时候同学跟我说了一件事,说他公司有个做了两年的人向他提出要涨薪资,他就顺口问了一个问题关于spring依赖注入的,那个要求涨薪的同学居然被问懵了...事后回家想了想这一块确 ...
- Java程序员进阶——Spring依赖注入原理分析
Spring依赖注入原理分析 下面谈谈Spring是如何实现反转模式IOC或依赖注入模式DI: 平时,我们需要生成一个对象,使用new语法,如一个类为A public class A{public v ...
- spring 依赖注入
Technorati 标记: spring,依赖注入,DI,ioc 平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的 ...
- java接口注入对象的意义_Java Web系列:Spring依赖注入基础
一.Spring简介 1.Spring简化Java开发 Spring Framework是一个应用框架,框架一般是半成品,我们在框架的基础上可以不用每个项目自己实现架构.基础设施和常用功能性组件,而是 ...
- spring依赖注入原理(转载)
关于spring依赖注入原理的文章在网络上已经有很多,我要写的这篇文章原文出自http://taeky.iteye.com/blog/563450,只所以再一次写下来只是为了一为自己收藏,方便以后的复 ...
- Spring依赖注入:注解注入总结
更多11 spring 依赖注入 注解 java 注解注入顾名思义就是通过注解来实现注入,Spring和注入相关的常见注解有Autowired.Resource.Qualifier.Service.C ...
- spring依赖注入_Spring源码阅读:Spring依赖注入容器
依赖注入 依赖注入是Spring框架最核心的能力,Spring框架提供的AOP,WebMVC等其它功能都是以依赖注入容器作为基础构建的,Spring依赖注入容器类似于一个用于组装对象的框架内核,任何应 ...
- diy实现spring依赖注入
[README] 本文diy代码实现了 spring 依赖注入,一定程度上揭示了依赖注入原理: [1]控制反转-Inversion of Control 是一种编码思想,简而言之就是 应用程序A可以使 ...
- spring依赖注入_Spring依赖注入
spring依赖注入 介绍: 在设计良好的Java应用程序中,这些类应尽可能独立. 这样的设计提高了组件的可重用性. 它还使对各个组件进行单元测试变得更加容易. 依赖注入的概念促进了Java对象之间的 ...
- spring依赖注入_Spring的依赖注入陷阱
spring依赖注入 Spring框架中有三种注入变量: 基于二传手的注射 基于构造函数的注入 基于现场的注入 这些机制中的每一种都有优点和缺点,并且不仅只有一种正确的方法. 例如现场注入: @Aut ...
最新文章
- Python量化(八)下影线选股法
- Java Web学习(三)数据加密方式详解
- css实现垂直居中(+水平居中)
- Why Ceph and how to use Ceph?
- 网络工程 IP地址与子网掩码
- 12.性能之巅 洞悉系统、企业与云计算 --- 基准测试
- C++11 实现defer功能(转载)
- Hibernate一对多双向关联
- ERP物料信息编码体系的研究与实践
- 微信公众号运营推广方案分享
- 特殊字符--百度百科
- python卷积神经网络训练,python卷积神经网络图像
- 我的世界服务器空岛删除怎么找回,我的世界-删除空岛指令 岛屿删除指令分享...
- mysql根据出生日期计算年龄并查询
- VS连接数据库运行后显示对象名无效
- Windows Server 2012 R2 更改系统语言
- 腾讯云服务器8核16G18M配置测评
- 使用大神U盘工具安装原版系统的操作方法
- 嵌入式在各个行业的应用
- 哈工大软件过程与工具复习1——第1-2讲 概论与核心思想