1.概念介绍:这些概念可以参考开发参考手册,可以访问:http://doc.javanb.com/spring-framework-reference-zh-2-0-5/ch03s03.html#beans-factory-autowire
Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系。因此,如果可能的话,可以自动让Spring通过检查BeanFactory中的内容,来替我们指定bean的协作者(其他被依赖的bean)。由于autowire可以针对单个bean进行设置,因此可以让有些bean使用 autowire,有些bean不采用。autowire的方便之处在减少或者消除属性或构造器参数的设置,这样可以给我们的配置文件减减肥! 在xml配置文件中,autowire一共有五种类型,可以在<bean/>元素中使用autowire属性指定:
a.no
不使用自动装配。必须通过ref元素指定依赖,这是默认设置。由于显式指定协作者可以使配置更灵活、更清晰,因此对于较大的部署配置,推荐采用该设置。而且在某种程度上,它也是系统架构的一种文档形式。
b.byName
根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。例如,在bean定义中将autowire设置为by name,而该bean包含master属性(同时提供setMaster(..)方法),Spring就会查找名为master的bean定义,并用它来装配给master属性。
c.byType
如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。如果你不希望这样,那么可以通过设置dependency-check="objects"让Spring抛出异常。
d.constructor
与byType的方式类似,不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。
e.autodetect
通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式。
2.举例:
这里一个Shape 类依赖一个Circle 类,模拟bean之间的依赖关系,并通过设定autowire属性来自动绑定协助者。
a. Shape.java
package com.cn.autowiring;
public class Shape {
private Circle circle;
public Shape() {
}
public Shape(Circle circle) {
this.circle = circle;
}
public void setCircle(Circle circle) {
this.circle = circle;
}
public Circle getCircle() {
return circle;
}
}
b.Circle.java
package com.cn.autowiring;
public class Circle {
private String center;
private int radio;
public String getCenter() {
return center;
}
public void setCenter(String center) {
this.center = center;
}
public int getRadio() {
return radio;
}
public void setRadio(int radio) {
this.radio = radio;
}
}
c.shape-beans.xml
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="noAutoWiring" class="com.cn.autowiring.Shape"
autowire="no">
<property name="circle" ref="circle"></property>
</bean>
<bean id="getCircleByName" class="com.cn.autowiring.Shape"
autowire="byName">
</bean>
<bean id="getCircleByType" class="com.cn.autowiring.Shape"
autowire="byType">
</bean>
<bean id="getCircleCst" class="com.cn.autowiring.Shape"
autowire="constructor">
</bean>
<bean id="getCircleAdt" class="com.cn.autowiring.Shape"
autowire="autodetect">
</bean>
<bean id="circle" class="com.cn.autowiring.Circle">
<property name="center" value="center"></property>
<property name="radio" value="10"></property>
</bean>
</beans>
d.测试
package com.cn.autowiring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestAutoWiring {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"shape-beans.xml");
Shape shape = (Shape) ctx.getBean("noAutoWiring");
System.out.println("noAutoWiring : " + shape.getCircle().getCenter()
+ " " + shape.getCircle().getRadio());
Shape shape1 = (Shape) ctx.getBean("getCircleByName");
System.out.println("getCircleByName: " + shape1.getCircle().getCenter()
+ " " + shape1.getCircle().getRadio());
Shape shape2 = (Shape) ctx.getBean("getCircleByType");
System.out.println("getCircleByType: " + shape2.getCircle().getCenter()
+ " " + shape2.getCircle().getRadio());
Shape shape3 = (Shape) ctx.getBean("getCircleCst");
System.out.println("getCircleCst: " + shape3.getCircle().getCenter()
+ " " + shape3.getCircle().getRadio());
Shape shape4 = (Shape) ctx.getBean("getCircleAdt");
System.out.println("getCircleAdt: " + shape4.getCircle().getCenter()
+ " " + shape4.getCircle().getRadio());
}
}
e.运行结果:
引用
noAutoWiring : center 10
getCircleByName: center 10
getCircleByType: center 10
getCircleCst: center 10
getCircleAdt: center 10
分享到:
相关推荐
Spring框架基础总结 一、Spring框架概述 Spring框架是一个开源的控制反转(IoC)和面向切面(AOP)的容器框架,旨在简化企业级Java应用的开发工作。Spring框架的核心价值在于其分层架构设计,使得开发者可以根据...
Spring Boot的核心理念是“约定优于配置”,它通过默认配置和自动配置,使得开发者可以快速搭建一个可运行的应用。它内置了Tomcat服务器,支持Java或Groovy编写应用,并且提供了大量的起步依赖(Starters),如数据...
总结,Spring 4.0与Maven的结合为我们提供了强大的企业级应用开发能力。通过深入理解并实践这个Demo,开发者可以更好地掌握Spring 4.0的核心特性和Maven的构建流程,为实际项目开发打下坚实基础。
14. **数据绑定**:Spring MVC 自动将请求参数绑定到 Controller 方法的参数上,支持复杂类型的绑定。 15. **验证**:Spring 提供了 Hibernate Validator,可以在 Controller 方法上进行数据验证。 16. **异步处理...
这些标签包括、、等,它们与Spring的BindingResult和ModelAttribute机制相结合,实现了模型数据与表单元素的自动绑定和错误处理。 **4. Form Tag常用标签** - `<form:form>`: 创建一个HTML表单,它可以自动绑定到...
【Spring Boot 技术培训】 ...总结:Spring Boot以其强大的自动化配置和便捷的开发流程,大大提高了开发效率,成为现代互联网开发的首选框架。通过理解其核心概念和实践,开发者能快速构建健壮且易于维护的Spring应用。
2. 数据绑定:自动将请求参数绑定到控制器方法的参数上,支持基本类型、自定义对象和集合类型的绑定。 3. 验证:Spring MVC提供了Bean Validation支持,可以对模型数据进行验证。 4. 文件上传下载:支持文件的上传和...
Spring的JdbcTemplate或NamedParameterJdbcTemplate可以自动处理参数绑定,避免直接拼接SQL字符串,从而减少SQL注入的风险。此外,我们还可以使用Spring Security来保护后端接口,限制未经授权的访问。 在实际开发...
14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.6.2.1. 文档视图定义 14.6.2.2. Controller 代码 14.6.2.3. Excel视图子类 14.6.2.4. PDF视图子类 14.7. JasperReports 14.7.1. 依赖...
通过构造函数或setter方法,将依赖对象注入到需要它们的地方,由Spring自动绑定这些实例化的依赖关系。XML配置文件中定义的DI逻辑,会在项目运行时自动执行。 2. AOP(面向切面编程) AOP是Spring提供的另一种重要...
### Spring 2.0 技术手册核心知识点详解 #### 一、Spring 框架简介 Spring 是一个开源框架,最初由 Rod Johnson 创建,它为简化企业级应用开发提供了全面的基础架构支持。Spring 2.0 版本在原有基础上进行了大幅度...
在Spring MVC方面,Spring4.0引入了ModelAndView对象的自动类型转换,减少了手动转换的繁琐工作。同时,它优化了HTTP消息转换器,更好地支持RESTful服务,包括对JSON和XML的处理。Spring4.0还支持了HTTP/2协议,提高...
在Spring 2.0中,Spring MVC引入了模型绑定,可以自动将HTTP请求参数绑定到处理方法的参数上,简化了Web应用的开发。 SSH(Struts、Hibernate、Spring)是经典的Java Web开发框架组合,其中Spring负责业务层的管理...
1.8 小结 第2章 快速入门 2.1 实例功能概述 2.1.1 比Hello World更适用的实例 2.1.2 实例功能简介 2.2 环境准备 2.2.1 创建库表 2.2.2 建立工程 2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 ...
【SpringBoot核心特性】 SpringBoot是Spring框架的一个扩展,它旨在简化Spring应用程序的开发过程,...这份学习笔记涵盖了SpringBoot的基础特性和SpringCloud的负载均衡实践,对于深入理解这两个技术有极大的帮助。
Spring MVC提供了强大的数据绑定功能,可以自动将HTTP请求参数绑定到控制器方法的参数上。同时,`@Valid`注解可以启用JSR-303/JSR-349验证,确保输入数据的有效性。 8. **拦截器(Interceptors)** 拦截器允许在...
Spring MVC提供了数据绑定功能,可以自动将HTTP请求参数映射到Controller方法的参数上。同时,利用@Valid注解和Hibernate Validator可以实现表单数据的验证。 八、拦截器(Interceptor) 拦截器在请求处理前后执行...
- AOP编程部分:包括核心概念、指定代理、自动代理、AspectJ、使用注解、知识小结等章节。 8. 学习态度与习惯 在教程中,强调了学无止境、追求技术进步的理念,并鼓励学习者将学习作为一种习惯。教程还传递了知识...