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个方法分析 ...
随机推荐
- HBase缓存的使用
hbase中的缓存分了两层:memstore和blockcache. 其中memstore供写使用,写请求会先写入memstore,regionserver会给每个region提供一个memstore ...
- disable table 失败的处理
相信每一个维护hbase集群的运维人员一定碰到过disable失败,陷入无穷的"Region has been PENDING_CLOSE for too long..."状态,此 ...
- SharePoint 2007 列表页定制--4个默认页定制
以"简单的领导简介"为例,欢迎大家指正 背景:项目中需要有领导简介的模块,就开始制作领导简介,本来很简单,有一个列表就可以,然后在前台展示出来,但是客户看到我们的效果,尤其输入领导 ...
- SpringBoot2.0之一 新建项目helloWorld
SpringBoot 以简单快速很快获得了广大开发者的青睐,本套SpringBoot系列以最新的SpringBoot 2.0为基础,同时会提及不同版本下SpringBoot的修改和变化,如有理解不当的 ...
- valid palindrome(回文)
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...
- AbstractQueuedSynchronizer 原理分析 - Condition 实现原理
1. 简介 Condition是一个接口,AbstractQueuedSynchronizer 中的ConditionObject内部类实现了这个接口.Condition声明了一组等待/通知的方法,这 ...
- python---面向对象高级进阶
静态方法,调用静态方法后,该方法将无法访问类变量和实例变量 class Dog(object): def __init__(self,name): self.name = name def eat(s ...
- com.android.dex.DexException: Multiple dex files define Lcom/sina/sso/RemoteSSO;
错误原因:ShareSDK的包里面也包含微博SDK的代码,两个Jar包含重复. 解决方法:用Winrar到ShareSDK的Jar里面把sso目录删掉,编译即可成功
- Spring 下 MyBatis 的基本使用
参看代码 GitHub : pom.xml dbconfig.properties DbConfig.java MySqlBean.java User.java UserMapper.java Use ...
- C语言编对双精度数保留一位小数
/*第一题*/ #include<stdio.h> //输入1.2345 输出1.2000 //输入1.2547 输出1.3000 main(){ ; printf("请输入:\ ...