Spring——多种方式实现依赖注入
在Spring的XML配置中,只有一种声明bean的方式:使用<bean>元素并指定class属性。Spring会从这里获取必要的信息来创建bean。
但是,在XML中声明DI时,会有多种可选的配置方式和风格,具体到setter方式、构造器方式和P命名空间方式。
一、使用setter进行注入
   
二、使用构造注入
- 为POJO类创建带参的构造方法
- 使用<constructor-arg>元素
给原先的实体类添加构造,记得带着无参构造,这个问题在这里不细说
  
Spring配置文件如下
<bean id="student" class="com.cmy.entity.StudentBean">
<!--constructor-arg:代表构造函数中的一个参数 索引从0开始-->
<constructor-arg type="java.lang.String" value="呵呵"></constructor-arg>
<constructor-arg type="int" value="16"></constructor-arg>
</bean>
注意:
1、一个<constructor-arg>元素表示构造方法的一个参数,且使用时不区分顺序。
2、通过<constructor-arg>元素的index 属性可以指定该参数的位置索引,位置 从0 开始。
3、<constructor-arg>元素还提供了type 属性用来指定参数的类型,避免字符串和基本数据类型的混淆。
三、使用P命名空间进行注入
<bean id="student" class="com.cmy.entity.studentBean" p:name="呵呵"
p:age="16">
</bean>
注意:
1、P命名空间注入的方式也是使用setter方式注入,所有POJO类中必须存在对应的set方法
2、 使用前需要在Spring的配置文件中引入p命名空间 xmlns:p="http://www.springframework.org/schema/p"
AOP也同样如此,不过在idea中可以使用ctrl+Enter自动引入 xmlns:aop="http://www.springframework.org/schema/aop"
四、注入不同的类型
  
这个关注第四点,POJO类如下:
public class Datetype {
    //数组
    private  String[]   arrays;
    //list
    private List<Integer> lists;
    //set
    private Set<Integer> sets;
    //map
    private Map<String,String> maps;
    //配置
    private Properties pros;
    public String[] getArrays() {
        return arrays;
    }
    public void setArrays(String[] arrays) {
        this.arrays = arrays;
    }
    public List<Integer> getLists() {
        return lists;
    }
    public void setLists(List<Integer> lists) {
        this.lists = lists;
    }
    public Set<Integer> getSets() {
        return sets;
    }
    public void setSets(Set<Integer> sets) {
        this.sets = sets;
    }
    public Map<String, String> getMaps() {
        return maps;
    }
    public void setMaps(Map<String, String> maps) {
        this.maps = maps;
    }
    public Properties getPros() {
        return pros;
    }
    public void setPros(Properties pros) {
        this.pros = pros;
    }
    @Override
    public String toString() {
        return "Datetype{" +
                "arrays=" + Arrays.toString(arrays) +
                ", lists=" + lists +
                ", sets=" + sets +
                ", maps=" + maps +
                ", pros=" + pros +
                '}';
    }
}
大配置文件:
<bean id="dateType" class="cn.spring.entity.Datetype">
        <property name="arrays">
            <array>
                <value>hehe</value>
                <value>haha</value>
            </array>
        </property>
        <property name="lists">
            <list>
                <value>1</value>
                <value>2</value>
            </list>
        </property>
        <property name="sets">
            <set>
                <value>3</value>
                <value>4</value>
            </set>
        </property>
        <property name="maps">
            <map>
                <entry key="c" value="才"></entry>
                <entry value="的" key="d"></entry>
            </map>
        </property>
        <property name="pros">
            <props>
                <prop key="a">啊</prop>
                <prop key="b">吧</prop>
            </props>
        </property>
    </bean>
测试类:
     
  
输出结果:
    
五、域属性的自动注入
在之前我们采用手动的域属性注入,即:
   
这里采用自动注入,自动注入有两种方式:
1.byName:保证域属性名字和bean的id一致
2.byType:保证域属性的类型和bean的类型一致,与其相兼容的类型也不可以
  
Spring——多种方式实现依赖注入的更多相关文章
- Spring多种方式实现依赖注入
		平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. Spring提出了依赖注入的思想,即依赖类不由 ... 
- IOC和AOP使用扩展   多种方式实现依赖注入
		多种方式实现依赖注入 1.Spring 使用setter访问器实现对属性的赋值, 2.Spring 构造constructor方法赋值, 3.接口注入 4.Spring P命名空间注入直接量 sett ... 
- Spring - lookup-method方式实现依赖注入
		引言 假设一个单例模式的bean A需要引用另外一个非单例模式的bean B,为了在我们每次引用的时候都能拿到最新的bean B,我们可以让bean A通过实现ApplicationContextWa ... 
- 多种方式实现依赖注入及使用注解定义bean
		构造注入 如何给构造方法中的参数注入方法呢如下 首先bean代码如下 package cn.pojo; public class Greeting { /** * 说的话 */ private Str ... 
- Ioc和Aop扩展--多种方式实现依赖注入(构造注入,p命名空间注入,集合类型注入,注入null和注入空值)
		构造注入 语法: <constructor-arg> <ref bean="bean的id"/> </constructor-arg> 1 ... 
- Spring源码剖析依赖注入实现
		Spring源码剖析——依赖注入实现原理 2016年08月06日 09:35:00 阅读数:31760 标签: spring源码bean依赖注入 更多 个人分类: Java 版权声明:本文为博主原 ... 
- (转)Spring读书笔记-----Spring核心机制:依赖注入
		Java应用(从applets的小范围到全套n层服务端企业应用)是一种典型的依赖型应用,它就是由一些互相适当地协作的对象构成的.因此,我们说这些对象间存在依赖关系.加入A组件调用了B组件的方法,我们就 ... 
- 回客科技 面试的 实现ioc 容器用到的技术,简述BeanFactory的实现原理,大搜车面试的 spring 怎么实现的依赖注入(DI)
		前言:这几天的面试,感觉自己对spring 的整个掌握还是很薄弱.所以需要继续加强. 这里说明一下spring的这几个面试题,但是实际的感觉还是不对的,这种问题我认为需要真正读了spring的源码后说 ... 
- ExpandoObject与DynamicObject的使用  RabbitMQ与.net core(一)安装  RabbitMQ与.net core(二)Producer与Exchange  ASP.NET Core 2.1 : 十五.图解路由(2.1 or earler)  .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了
		ExpandoObject与DynamicObject的使用 using ImpromptuInterface; using System; using System.Dynamic; names ... 
随机推荐
- Fiddler之常用操作(过滤器设置,代理设置,手机抓包设置,手机代理配置)
			记录下,工作中常用的一些设置和操作~ 1.过滤“脏”请求 两个下拉框的名词解释: A.内外网过滤 No Zone Filter:不分区域过滤(内网外网都显示) Show only Intranet H ... 
- X86逆向3:通过修改关键CALL破解
			软件逆向第一课中我们通过爆破的方式直接破解了程序的登录限制,但这一种方式很不合理,因为你只是破解了登录这一处的验证,如果程序内部还有其他的验证那么你需要再次爆破第二个验证,显然这种方式是很烦人的,如果 ... 
- nginx代理 tomcat获得真实用户IP
			nginx代理 tomcat获得真实用户IP 2017年04月08日 21:34:17 cf 阅读数 1825更多 分类专栏: nginx html/js/ajax 版权声明:本文为博主原创文章, ... 
- Flask:上下文管理
			1. werkzurg from werkzur.serving import run_simple def run(environ,start_response): reuturn [b'hello ... 
- 服务端相关知识学习(三)Zookeeper的配置
			前面两篇文章介绍了Zookeeper是什么和可以干什么,那么接下来我们就实际的接触一下Zookeeper这个东西,看看具体如何使用,有个大体的感受,后面再描述某些地方的时候也能在大脑中有具体的印象.本 ... 
- luogu题解P2486[SDOI2011]染色--树链剖分+trick
			题目链接 https://www.luogu.org/problemnew/show/P2486 分析 看上去又是一道强行把序列上问题搬运到树上的裸题,然而分析之后发现并不然... 首先我们考虑如何在 ... 
- luogu P5471 [NOI2019]弹跳
			luogu 因为是一个点向矩形区域连边,所以可以二维数据结构优化连边,但是会MLE.关于维护矩形的数据结构还有\(KD-Tree\),所以考虑\(KDT\)优化连边,空间复杂度\(m\sqrt n\) ... 
- 1 sql server 中merge的用法
			MERGE 要更新的表名 AS target USING ( 这里是用什么数据源来跟新 ) AS source ( 这里是数据源的所有列名 ) ON 这里是要更新的表和数据源的匹配条件 WHEN MA ... 
- powershell查看版本信息
			在终端输入$PSVersionTable 
- IDEA springboot maven 项目部署
