spring创建bean及数据注入
通过spring的IoC可以实现由配置文件来创建类的对象,可以降低类鱼类之间的耦合,
通常我们都是在代码中控制对象的生成和属性注入,而使用IoC后,就可以将设计好的类交给IoC容器,让容器去控制对象的生成和属性的注入,称为控制反转。生成对象的过程就是将对象依赖的属性进行注入的过程,因此也称依赖注入。
1.实例化bean:通过无参构造;工厂静态方法;工厂非静态方法等
2.属性注入:set方法注入;构造器(构造方法)注入
各类属性的注入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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"> <!-- lazy-init="true" : true:需要用的时候才实例化bean,默认加载配置文件时候实例化bean -->
<!-- init-method="init" 初始化bean,调用init方法 -->
<!-- destroy-method="destroy" 销毁bean调用destroy方法 -->
<!-- scope="prototype" prototype:创建对象不是单例模式,默认singleton: 单例 -->
<bean id="user" class="ni.jun.yang.bean.User" lazy-init="true"
init-method="init" destroy-method="destroy" scope="prototype">
<!--构造赋值 -->
<constructor-arg name="card" ref="payCard"/>
<constructor-arg name="name" type="java.lang.String" value="zhangsan"/>
<constructor-arg name="age" type="int" value="123"/>
</bean> <bean id="user1" class="ni.jun.yang.bean.User" lazy-init="true" scope="prototype"> <!-- list集合注入值 -->
<property name="cards">
<list>
<ref bean="payCard"/>
<ref bean="payCard1"/>
<ref bean="payCard2"/>
</list>
</property> <!-- set集合注入值 -->
<property name="setCards"> <set>
<ref bean="payCard"/>
<ref bean="payCard1"/>
<ref bean="payCard2"/>
</set>
</property> <!-- map集合注入值 -->
<property name="mapCards">
<map>
<entry key="1" value-ref="payCard" ></entry>
<entry key="2" value-ref="payCard1"></entry>
<entry key="3" value-ref="payCard2"></entry>
</map>
</property> <!--Properties集合注入值 -->
<property name="proCards">
<props>
<prop key="1">中国银行</prop>
<prop key="2">农业银行</prop>
<prop key="3">建设银行</prop>
</props>
</property> </bean> <!--set方法赋值 -->
<bean id="payCard" class="ni.jun.yang.bean.PayCard">
<property name="id" value="98746546764"></property>
<property name="bankName" value="中国银行"></property>
</bean>
<bean id="payCard1" class="ni.jun.yang.bean.PayCard">
<property name="id" value="12365478932544"></property>
<property name="bankName" value="农业银行"></property>
</bean>
<bean id="payCard2" class="ni.jun.yang.bean.PayCard">
<property name="id" value="45678975456751"></property>
<property name="bankName" value="建设银行"></property>
</bean> </beans>
对象的获取:
ApplicationContext ctxt = new ClassPathXmlApplicationContext("user-bean.xml");//配置文件名字
User user = (User) ctxt.getBean("user"); //bean标签的id值
3.自动装配:autowire=byName(通过属性名字) autowire="byType" (通过类型) autowire="constructor"(通过构造器)
感觉不是很好用:
byName主要是根据set方法来进行自动注入值的,相对靠谱
byType 如果有多个值,就会出异常,它不知道到底该用哪个值去装配
constructor :与 byType 非常相似
感觉用自动装配,代码的可读性,不如手动装配注入,而且byType 这种方式容易出异常
spring创建bean及数据注入的更多相关文章
- Spring 创建bean的模式
在默认情况下,spring创建bean是单例模式 scope="singleton ",还有一种方式为多例模式[prototype] scope sing ...
- spring 创建Bean最全实现方法
创建bean方式,spring创建bean的方式包含:自动注入方式和人工注入方式.分别为:1)xml 配置化方式 2)@bean注解注入方式3)@Component方式 4)接口注入方式 5)imp ...
- spring创建bean的三种方式
spring创建bean的三种方式: 1通过构造方法创建bean(最常用) 1.1 spring默认会通过无参构造方法来创建bean,如果xml文件是这样配置,则实体类中必须要有无参构造方法,无参构造 ...
- spring创建bean模式singleton与prototype的区别
spring 创建bean有单例模式(singleton)和原始模型模式(prototype)这两种模式. 在默认的情况下,Spring中创建的bean都是单例模式的(注意Spring的单例模式与Go ...
- Spring创建Bean的顺序
一直对Spring创建bean的顺序很好奇,现在总算有时间写个代码测试一下.不想看过程的小伙伴可以直接看结论 目录结构: 其中:bean4.bean5包下的class没有注解@Component,测试 ...
- Spring核心——Bean的依赖注入
依赖注入在设计模式与IoC这篇文章中,介绍了Spring基础的三大支柱的两项内容——IoC.Bean.本篇将继续围绕着Bean的创建时的注入方式来介绍Spring的核心思想与设计模式. 天底下所有面向 ...
- spring中bean配置和注入场景分析
bean与spring容器的关系 Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载.实例化Bean,并 ...
- Spring 创建Bean的6种方式
前言 本文讲解了在Spring 应用中创建Bean的多种方式,包括自动创建,以及手动创建注入方式,实际开发中可以根据业务场景选择合适的方案. 方式1: 使用Spring XML方式配置,该方式用于在纯 ...
- Spring创建Bean的过程Debug
目录 Spring流程Debug 1.1 Spring测试环境搭建 1.2 Debug容器创建过程 1.3 AbstractApplicationContext的refresh()包含的13个方法分析 ...
随机推荐
- mybatis源码之MapperMethod
/** * @author Clinton Begin * @author Eduardo Macarron * @author Lasse Voss */ //这个类是整个代理机制的核心类,对Sql ...
- UML类图简介
概述 设计模式中常常使用UML来表示类与类,类与接口之间的关系,UML类图是设计模式入门必备的技能,感觉各种关系比较多,这里做一下总结. 类与接口的表示 类与接口通常是一个矩形框表示,一般分为3层,第 ...
- ubuntu14.04下安装rubinius测试原生线程
因为CRuby(MRI)本身不支持原生多线程,所以想试一下其他ruby解释器实现对原生多线程的支持.于是安装rubinius折腾一下:) 在rubinius官网下载2.4.1源代码,然后驾轻就熟首先b ...
- machine learning 之 Neural Network 3
整理自Andrew Ng的machine learning课程week6. 目录: Advice for applying machine learning (Decide what to do ne ...
- 途牛java实习面试(失败)
一进去让自己介绍.简单介绍了一下.然后让我自己说说框架.问题太大一紧张卡住了. 然后面试官开始问,让我介绍多线程,我就简单介绍了多线程.然后问我有没有做过多线程的项目,我说没有. 问了MySQL的锁和 ...
- 学习MQ(一) 感知
声明:我的文字里出现的MQ,如没有特殊指明,就是指的IBM的websphere MQ 以前对MQ一无所知! MQ是IBM websphere的系列产品之一,是很好的一个中间件产品.其实我对这列产品并不 ...
- java基础语法(二)--单列模式
java基础语法(二)--单列模式 /** * 功能:单列模式 * @author Administrator * */ public class SingletonTest { public sta ...
- java基础语法(一)
java基础语法(一) 1.类是一种抽象的概念,对象是类的一种具体表示形式,是具体的概念.先有类,然后由类来生成 对象(Object).对象又叫做实例(Instance). 2.类由两大部分构成:属性 ...
- unity零基础开始学习做游戏(二)让你的对象动起来
-------小基原创,转载请给我一个面子 小基认为电子游戏与电影最重要的区别就是交互,如果电子游戏没有让你输入的交互功能的话,全程都"只可远观,而不可鼓捣"的话,你可能是在看视频 ...
- HDU-1017
A Mathematical Curiosity Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...