Bean的注入

Bean有两种注入方法:一是构造方法注入,使用<constructor-arg>,有几个参数,就注入几个。构造方法的优点:

  • 使用强依赖契约。
  • 依赖都通过构造函数设置了,减少使用set方法的代码。
  • 只能通过构造函数设置类的属性,保证了属性的不可变性。

构造方法的缺点:

  • 当Bean需要很多依赖时,构造函数的参数列表太长。
  • 当一个对象已经有很多种构造方法,很难再提出不同的构造函数。
  • 构造函数中有两个以上是想同类型的,很难确定每个参数的用途。
  • 构造方法不利于自身的继承。

二是使用set方法注入,使用<properety>。

注意:上面两种方法注入的bean通常都是被共享的,但有些bean不想被共享,这就需要Spring的另一个技术---内部bean

就是在其他bean的范围内所定义的bean。比如:

set注入:

1 <bean  id="kenny"
2             class="com.springinaction.springidol.Instrumentalist">
3             <property name="song"   value="Jingle Bells"/>
4             <property name="instrument">
5                   <bean class="com.springinaction.springidol.Saxphone"/>
6             </property>
7 </bean>

构造方法注入:

1 <bean id="duke"
2            class="com.springinaction.springidol.PoeticJuggler">
3            <constructor-arg value="15"/>
4            <constructor-arg>
5                  <bean class="com.springinaction.springidol.Sonnet29"/>
6            </constructor-arg>
7 </bean>

使用内部bean的最大缺点是:bean不能被复用,内部bean只能被用来注入,不能被其他Bean引用。

时间: 2024-08-26 04:54:33

Bean的注入的相关文章

Spring单例Bean中注入多例Bean

问题: 当在一个单例Bean中注入一个多例Bean的时候,是获取不到那个多例对象的,因为,单例在初始化的时候,就直接初始化,这个多例Bean啦, 一直获取的是第一次初始化的Bean 配置文件: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="htt

关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包

参考网址:http://blog.csdn.net/u014695188/article/details/52263903 问题描述:SpringBoot bean无法注入的问题(与文件包位置有关) 问题分析:SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描! 解决方案:@ComponentScan注解进行指定要扫描的包以及要扫描的类. @ComponentScan(basePackages={"cn.kfit","org.

开涛spring3(12.2) - 零配置 之 12.2 注解实现Bean依赖注入

12.2  注解实现Bean依赖注入 12.2.1  概述 注解实现Bean配置主要用来进行如依赖注入.生命周期回调方法定义等,不能消除XML文件中的Bean元数据定义,且基于XML配置中的依赖注入的数据将覆盖基于注解配置中的依赖注入的数据. Spring3的基于注解实现Bean依赖注入支持如下三种注解: Spring自带依赖注入注解: Spring自带的一套依赖注入注解: JSR-250注解:Java平台的公共注解,是Java EE 5规范之一,在JDK6中默认包含这些注解,从Spring2.

spring4.0.6最新稳定版新特性学习,注解自动扫描bean,自动注入bean(二)

Spring4.0的新特性我们在上一章已经介绍过了.包括它对jdk8的支持,Groovy Bean Definition DSL的支持,核心容器功能的改进,Web开发改进,测试框架改进等等.这张我们主要介绍spring4.0的自动扫描功能,以及对bean的过滤等特性进行学习. 好吧,废话少说,我们来看看代码吧. package com.herman.ss.test; import org.springframework.context.ApplicationContext; import org

spring中Bean的注入参数详解

字面值    一般指可用字符串表示的值,这些值可以通过<value>元素标签进行注入.在默认情况下,基本数据类型及其封装类.String等类型都可以采取字面值注入的方式,Spring容器在内部为字面值提供了编辑器,它可以将以字符串表示的字面值转换为内部变量的相应类型.    配置信息:    <bean id="car" class="com.luxl.domain.Car">        <property name="m

spring中Bean的注入类型

1.属性注入    即通过setXxx()方法注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入是实际应用中最常采用的注入方式.    属性注入要求Bean提供一个默认的构造参数,并为需要注入的属性提供对应的Setter方法.Spring先调用Bean的默认构造参数实例化Bean对象,然后通过反射的方式调用Setter方法注入属性值.    需要指出的是:Spring只会检查Bean中是否有对应的Setter方法,至于Bean中是否有对应的属性变量则不做要

SpringBoot拦截器中Bean无法注入(转)

这两天遇到SpringBoot拦截器中Bean无法注入问题.下面介绍我的思考过程和解决过程: 1.由于其他bean在service,controller层注入一点问题也没有,开始根本没意识到Bean无法注入是在拦截器中无效的问题,一直在查找注解指定的包在哪里配置的,然而却找不到配置,Springboot是用java类的形式加载配置的.在网络的某个角落看到这样的说法: SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!"Application类&

Spring之Bean的注入

Bean的配置中介绍的是Bean声明问题,在哪声明怎么声明的问题.Bean的注入是怎么实例化,怎么注入的问题.Bean注入的方式有两种,一种是在XML中配置,另一种则是使用注解的方式注入. 一.XML方式注入 XML方式注入一般有三种方式:属性注入.构造函数注入和工厂方法注入. 一.属性注入在传统的对象实例化时可以通过new class(),然后通过setXXX()方法设置对象的属性值或依赖对象,属性注入也是采用这种方式,只是Spring框架会在内部完成这些操作,它会先调用Bean的默认构造函数

springBoot 动态注入bean(bean的注入时机)

springBoot 动态注入bean(bean的注入时机) 参考博客:https://blog.csdn.net/xcy1193068639/article/details/81517456 原文地址:https://www.cnblogs.com/dw3306/p/11124039.html