1.定义一个CompanyService.java
package cn.csdn.service;
public class CompanyService {
public CompanyService() {
System.out.println("------初始化companyService--------");
}
}
2.定义一个EmpService.java
package cn.csdn.service;
public class EmpService {
/*员工的名称*/
private String name;
/*公司对象*/
private CompanyService companyService;
public EmpService() {
System.out.println("-------初始化EmpService-----------");
}
public EmpService(String name, CompanyService companyService) {
super();
this.name = name;
this.companyService = companyService;
System.out.println(".......构造器完成的效果.....");
}
/* setXxx注入的方法 xxx简单类型*/
public void setName(String name) {
this.name = name;
System.out.println("-------set注入name成功!------");
}
/*setXxx注入的方式 xxx是一个bean对象 companyService*/
public void setCompanyService(CompanyService companyService) {
this.companyService = companyService;
System.out.println("----set注入companyService成功!-----");
}
/*setXxx xxx属性*/
}
/*
* 依赖检查:
* 在一个类中提供setXxx xxx属性,
* 此属性是否在在配置文件中进行配置的处理就称为:依赖检查
* none:不检查
* 就是如果一个类中有setXxx属性,xxx属性可以在配置文件的bean进行
* 配置,也可以不配置,程序无误。
* simple:执行的是对于原始类型及集合(除协作者外的一切东西)执行依赖检查
*
* objects:仅对协作者执行依赖检查
* 协作者 bean 与bean 关联系
*
* all:对协作者,原始类型及集合执行依赖检查
*
*/
3.配置文件 autowire.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-2.5.xsd"
default-dependency-check="none" default-autowire="no">
<!-- id=companyService -->
<!-- 员工的bean -->
<bean id="empService" class="cn.csdn.service.EmpService" scope="singleton"
dependency-check="objects" autowire="autodetect">
<property name="name" value="redarmy"/>
</bean>
<!-- 公司bean -->
<bean id="comService" class="cn.csdn.service.CompanyService"
scope="singleton"></bean>
</beans>
4.配置文件 applicationContext.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-2.5.xsd"
default-dependency-check="none" default-autowire="no">
<!-- 员工的bean -->
<bean id="empService" class="cn.csdn.service.EmpService" scope="singleton"
dependency-check="all">
<!--当dependency-check="simple" 必须为name加 property配置 -->
<property name="name" value="redarmy" />
<!-- 当dependency-check="objects" 必须为companyService加property配置 -->
<property name="companyService" ref="companyService"/>
</bean>
<!-- 公司bean -->
<bean id="companyService" class="cn.csdn.service.CompanyService"
scope="singleton"></bean>
</beans>
5.测试类 App.java
package cn.csdn.service;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
@Test
public void app() {
/* 初始化容器 */
ApplicationContext ac = new
ClassPathXmlApplicationContext("classpath:autowire.xml");
}
}
/*
* 初始化容器
* 搜索容器中scope="singleton"的bean,如果该bean没有实现延迟初始化,那么就
* 实例化该bean
* --------------执行-bean---构造器初始化bean
* --------------执行该bean中的属性注入的方法 set注入
* */
知识点讲解:
自动装配:Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系
针对的对象是:bean 是spring容器中配置的bean
对原始类型 String 不能够使用自动装配。
spring的配置文件中的beans标签中有一个 default-autowire 其默认值是"no"
在配置文件中的所有bean都默认采用此装配方式
no: 不自动装配、
采用ref="引入协作者"进行装配
byName:根据属性名自动装配。
此选项将检查容器并根据(xxx)名字查找与属性(setXxx xxx的名字)完全一致的bean,并将其与属性自动装配。
例如,在bean定义中将autowire设置为byName,而该bean包含master属性
(同时提供setMaster(..)方法),Spring就会查找名为master的bean定义,
并用它来装配给master属性。
byType:如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。
如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。
若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。
如果你不希望这样,那么可以通过设置dependency-check="objects"
让Spring抛出异常。
constructor:与byType的方式类似,不同之处在于它应用于构造器参数。
如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。
autodetect:通过bean类的自省机制(introspection)
来决定是使用constructor还是byType方式进行自动装配。
如果发现默认的构造器,那么将使用byType方式。
分享到:
相关推荐
这个文件可能包含了关于Spring自动装配的教程材料,例如代码示例、配置文件或者相关的讲解文档。 综上所述,Spring自动装配是Spring框架的重要特性,它通过控制反转原则实现了对Bean依赖的自动化管理。开发者可以...
描述中的链接指向了一篇CSDN博客文章,虽然具体内容无法在此直接引用,但根据标签和标题,我们可以推测文章可能讲解了如何使用Spring框架的自动装配功能来初始化和管理Servlet中的对象,以及如何利用SQL操作数据库,...
本篇将重点讲解Spring的@Autowired自动装配机制,包括XML配置版和注解版,并深入到源码层面进行解析。 @Autowired是Spring框架中的一个核心注解,用于实现自动装配bean的需求。当我们想要在类中注入某个依赖时,...
《UG自动装配技术详解——基于Visual C++的实现》 在现代工业设计中,计算机辅助设计(CAD)软件扮演着至关重要的角色,其中UG(Unigraphics NX)是一款广泛使用的三维建模工具,尤其在机械工程领域。UG的自动装配...
本教程将深入讲解如何使用注解进行组件扫描,以实现Spring应用中的对象自动装配。 首先,我们需要了解Spring的组件扫描(Component Scanning)。组件扫描是Spring的一项功能,它会自动发现应用上下文中定义的Bean。...
通过上述讲解,我们可以看出Spring Boot的自动装配机制是其简洁、高效的一大特点,它极大地降低了开发者的配置负担,让我们能更专注于业务逻辑。通过深入理解并灵活运用自动装配,我们可以更好地构建和维护Spring ...
本教程将深入讲解如何手动实现Spring Boot的自动装配类,以提升开发效率并确保应用的可维护性。 首先,了解Spring Boot自动装配的基本原理。自动装配是通过`@EnableAutoConfiguration`注解来开启的,这个注解会触发...
本文将深入讲解Spring中的注解场景,包括数据仓储模式、通用组件模式、服务模式、Web控制器模式以及配置类模式,并探讨如何通过这些注解走向自动装配。 首先,让我们来看看各个模式注解的用途: 1. **数据仓储模式...
本文将详细讲解Spring中自动装配Bean的三种主要方式:byName、byType以及constructor。这些方法帮助Spring的IoC容器自动识别并连接Bean的依赖,从而减少手动配置的工作量。 首先,我们来看第一种自动装配方式——`...
本文将对CATIA装配技巧进行详细的介绍,包括装配环境参数设置、在装配文件中利用装配关联关系来建立新零件方法、装配文件添加文件后第一步要使用固定命令、重复使用阵列命令、天讲解“毛衣去毛器”案例中“发布”...
通过以上讲解,我们可以看出“ProE产品装配与机构仿真”不仅涉及机械设计的基础知识,还涵盖了高级的仿真技术,这对于提升产品的质量和效率,减少实物原型测试的需求,具有重大意义。学习和掌握这些技能,对于工程师...
自动装配模块(Autoconfigure Module)是Spring Boot Starter的核心组件之一,自动装配Bean(Auto-Configuration Beans)是其主要功能之一。自动装配Bean是由标准Spring @Configuration实现,结合Spring 4的新特性...
autodetect:如果有默认的构造器,则通过 constructor 的方式进行自动装配,否则使用 byType 的方式进行自动装配。 描述 Spring 事务的只读、超时、回滚的原则。 1. Spring 事务的只读“只读事务”并不是一‘’个...
在大型装配体管理方面,教程详细讲解了如何使用组件实例(Component Instance)、组件引用(Component Reference)以及装配体级别的参数化控制。这些方法能有效减少设计数据的冗余,便于修改和更新整个装配结构。...
文件可能会讨论自动装配技术,如机器视觉引导装配、伺服驱动装配等,以及如何设计装配工作站以确保装配的精度和一致性。 5. 系统集成:在实际应用中,机器人、物料传送线、加工设备和装配工作站需要集成在一个协调...
本课程设计以液压缸为例,深入讲解ProE在零件设计、装配图构建以及工程图绘制中的应用技巧和步骤。 一、零件设计 1. 基础特征建模:液压缸主要由缸体、活塞杆、活塞等部件组成。在ProE中,我们首先通过基础特征如...
在本文中,作者周敬业针对技工学校自动化控制系统装配实训课程存在的问题,结合自身在珠海格力智能装备有限公司的实习经验,分析了传统实训教学中存在的不足,并提出了改革探索思路,详细阐述了实践案例,并分享了...
为了更具体地展示自动化技术的应用,本课程还会通过轿车换挡器半自动装配系统的设计实例,详细解读自动化技术在产品装配中的实际应用和实施步骤。 通过学习本课程,学员们将能够全面掌握机械制造自动化技术的各个...
在"三维产品设计ProE-创建装配图.pptx"中,重点讲解了如何创建和管理装配图。下面将详细阐述这些知识点: 1. **创建装配图**:装配图是ProE中的一种关键功能,它允许用户将多个零部件组合成一个完整的结构。在开始...