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个方法分析 ...
随机推荐
- redis注册成window服务
注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 开启服务 ...
- Angular v6 正式发布
Angular 6 正式发布 Angular 6 已经正式发布了!这个主要版本并不关注于底层的框架,更多地关注于工具链,以及使 Angular 在未来更容易快速推进. 作为发布的一部分,我们同步了主要 ...
- 80端口被NT kernel & System 占用
新年后正常上班的第一天,客户报告,虚拟机上的网站起不来了. 登录虚拟机的远程桌面,闪几下连接信息,后面就没了,不显示远程桌面.联系虚拟机管理,重启,远程桌面是连上了,网站还是起不来. 查看window ...
- java小知识点汇总
1.ConcurrentHashMap使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安 ...
- properties类是Hashtable的子类
properties类是Hashtable的子类 增加了将Hashtable对象中的关键字保存到文件和从文件中读取关键字和值到Hashtable对象中的方法 Properties.store方法存储P ...
- SQL 逻辑优化 case when 转为 union all
通常数据库的优化从硬件层面去考虑可分为4个方面: CPU:即降低计算复杂度,如减少sql各类聚合函数,窗口函数,case when等. IO :(较少查询结果集过程中对数据的访问量.数据优化很大程度从 ...
- springboot + mybatis 前后端分离项目的搭建 适合在学习中的大学生
人生如戏,戏子多半掉泪! 我是一名大四学生,刚进入一家软件件公司实习,虽说在大学中做过好多个实训项目,都是自己完成,没有组员的配合.但是在这一个月的实习中,我从以前别人教走到了现在的自学,成长很多. ...
- C++std函数之transform
/*//////////////////////////////// template < class InputIterator, class OutputIterator, class Un ...
- Cesium 云服务
前言 所有行业内都知道云是未来或者现在的趋势,但是真正的完完全全提供地理信息云服务的恐怕只有 Google 一家,然而今天我居然发现 Cesium 提供了云服务,你没有看错,就是曾经的开源 3D 渲染 ...
- 百度技术沙龙之2013-2&3
2013年2月2日技术沙龙 商业产品开发------谢马林 业务逻辑加大设计难度 集成难度大 降低学习成本 统一标准化开发模式 面向集成的架构平台 业务复杂,设计抽象的技术支撑不够 抽象6类数据流业务 ...