<?xml version="1.0" encoding="UTF-8"?>
<!-- 使用Spring的命名空间p装配属性,配置p -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
default-autowire="byType">
<!-- 如上两行,为容器中所有的Bean设置初始化和销毁方法 -->
<!--
通过<context:annotation-config />告诉spring我们通过注解进行自动装配。
spring支持集中不同的用于自动装配的注解:
spring自带的@Autowired注解
JSR-330的@Inject注解
JSR-250的@Resource注解
@Autowired
对set方法使用该注解,spring尝试使用byType进行装配
该注解可以标注任意方法,包括构造器
当使用该注解直接标注属性时,即可删除setter方法,同时该注解不会受限于private关键字。
@Qualifier("guitar")指定名为guitar的注入
-->
<context:annotation-config />
<!--
<context:component-scan>除了具有 <context:annotation-config />一样的工作,还允许spring自动
检测Bean和定义Bean
base-package:扫描包
扫描情况下,如何知道是否应该注册为spring Bean呢?
@Component:通用的构造型注解,表示该类是spring组件,如果@Component("aa")标识,则代表bean的id为aa,否则默认类名首字母小写
@Controller:标识将该类定义为Spring MVC Controller
@Repository:标识将该类定义为数据仓库
@Service:标识将该类定义为服务
-->
<context:component-scan base-package="com.bean">
</context:component-scan>
<!--
在扫描获得bean时,通过为<context:component-scan>配置<context:include-filter>和/或者<context:exclude-filter>
-->
<context:component-scan base-package="com.bean">
<context:include-fileter type="assignable" expression="com.bean.Instrument"/>
</context:component-scan>
<!-- Bean declarations go here -->
<!--
自动装配(autowiring):有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让spring自动识别如何装配Bean的依赖关系。
自动检测(autodiscovery):比自动装配更进一步,让spring能够自动识别哪些类需要被装配成spring Bean,从而减少对<bean>元素的使用
4种类型的自动装配:
byName:把与Bean的属性具有相同名字(或者ID)的其他bean自动装配到Bean的对应属性中。如果没有跟属性的名字相匹配的Bean,则该属性不进行装配。
byType:把与Bean的属性具有相同类型的其他bean自动装配到Bean的对应属性中。如果没有跟属性的类型相匹配的Bean,则该属性不被装配。
constructor:把与Bean的构造器入参具有相同类型的其他Bean自动装配到Bean构造器的对应入参中
autodetect:首先尝试使用constructor进行自动装配。如果失败,再尝试使用byType进行自动装配。
byName限制:需要架设Bean的名字与其他Bean的属性的名字一样
byType限制:如果spring徐找到多个Bean,他们的类型与需要自动装配的属性的类型都相匹配,在这种场景下,spring不会猜测哪一个Bean更适合自动装配,而是选择抛出异常。
设置首选Bean,默认bean的primary属性都为true,相当于都是首选Bean,所以需要将不需要的都设置为false。
排除某些Bean,设置bean的autowire-candidate为false
constructor:局限性和byType相同,不会选择。
-->
<bean id="keyny" class="com.bean.Instrumentalist" autowire="byName">
<property name="song" value="Jingle Bells"/>
</bean>
<bean id="keyny2" class="com.bean.Instrumentalist" autowire="byType" primary="false" autowire-candidate="false">
<property name="song" value="Jingle Bells"/>
</bean>
<bean id="keyny3" class="com.bean.Instrumentalist" autowire="constructor">
<property name="song" value="Jingle Bells"/>
</bean>
<bean id="keyny4" class="com.bean.Instrumentalist" autowire="autodetect"/>
</beans>
相关推荐
SPRING DI注入例子 jar包没有包含
java Spring DI依赖注入.rar
Spring依赖注入(DI)的例子,包括接口注入、构造注入、set注入的简单类型和复杂类型注入的例子。
什么是spring,spring核心,spring优点,spring体系结构, 入门案例,DI基础,核心API,文档内附代码
Spring Ioc DI 时序图分享给大家,希望对大家看源码有所帮助,不足之处欢迎批评指正,可以在下方留言
spring di 的myeclipse完整代码
NULL 博文链接:https://zwhc.iteye.com/blog/665932
一步一步手绘spring DI运行时序图.rar
笔记整理
spring ioc di aop详解
Spring的DI注解配置.zip
DI(Dependency Injection)依赖注入:就是指对象是被动接受依赖类而不是自己主动去找,换句话说就是指对象不是从容器中查找它依赖的类,而是在容器实例化对象的时候主动将它依赖的类注入给它。
Spring依赖注入DI.zip
NULL 博文链接:https://bepatient.iteye.com/blog/1036402
文章Spring项目IOC入门案例、文章Spring项目DI入门案例的原代码。方便大家沟通学习。
SpringIOC,DI+dynamic proxy 实现盗版AOP的源代码
今天有空,写了基于C#使用Spring.Net的演示实例,希望能给有需要的人带来帮助,其中演示了配置下的IOC、AOP、属性注入、构造函数注入、通知过滤器、以及不使用配置直接代码硬编的AOP动态代码过程,另外还增加了...
基于XML的依赖注入测试程序,配合博客资源学习。是基于XML的依赖注入方法的测试程序!
帮助初学者理解spring框架,有助于提高代码能力java.sql.SQLException: Duplicate entry '2' for key 'PRIMARY' Query: insert into transaction values(?,?,?,?,?) Parameters: [2, 6212999999999, 转出, 6000000, ...
它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制...