Spring 完成自动注入(autowire)
目录
两个测试类
package cn.ganlixin.pojo;
public class Major {
private String name;
private String category;
// 此处省略了无参构造方法、有参构造方法、getter和setter、toString方法
}
package cn.ganlixin.pojo;
public class Student {
private int id;
private String name;
private Major major; // 需要引用一个major对象
// 此处省略了无参构造方法、有参构造方法、getter和setter、toString方法
}
普通方式注入
上面的Student依赖于一个Major类型的对象,在创建Student这个类的对象(bean)的时候,对major属性进行注入时,需要引用一个Major类创建的bean,也就是下面这样:
<?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.xsd"> <bean id="major" class="cn.ganlixin.pojo.Major"></bean> <bean id="student" class="cn.ganlixin.pojo.Student">
<!-- 引用上面的major bean -->
<property name="major" ref="major"></property>
</bean> </beans>
普通方式注入的缺点
从上面的配置上来看,其实配置一个<property>好像并不困难,但是当项目稍微大一点,类中属性稍微复杂一点,那么配置利用<property>进行注入将是特别不便捷的,需要写很多的<property>,并且需要记住创建的bean的id,否则可能会引用错误。
另外,在修改配置的时候也不方便,当一个bean的id发生改变,引用他的bean中的<property>的ref属性也要进行修改,所以,真的不方便。
自动注入的介绍
依旧以上面这段配置为例:
<bean id="major" class="cn.ganlixin.pojo.Major"></bean> <bean id="student" class="cn.ganlixin.pojo.Student">
<!-- 引用上面的major bean -->
<property name="major" ref="major"></property>
</bean>
其实,我们发现,student这个bean中的<property>中的name和ref,值(字符串)都是一样的,如果能省略这一句,然后让student的major属性自动去找id为major的<bean>,就方便很多了。
<bean id="major" class="cn.ganlixin.pojo.Major"></bean> <bean id="student" class="cn.ganlixin.pojo.Student" autowire="byName"></bean>
<!-- major属性自动去Spring容器中寻找id为major的bean,自动引用 -->
其实这就是自动注入,只不过,我们还需要进行其他配置。
配置自动注入的方式
配置自动注入的方式有两种,一种是全局配置,另一种是局部单独配置。
全局配置:只配置一次,之后配置文件中的所有bean,都按照全局配置进行注入,全局配置是在<beans>标签中配置default-autowire="Xxx";
局部单独配置:对于每一个bean,单独设置注入方式,单独配置是在单独的<bean>标签中配置autowire="xxx"。
对于全局配置和局部单独配置,都有5个值可以选择:
1、no:当autowire设置为no的时候,Spring就不会进行自动注入,相当于不给引用属性赋值。
2、byName:在Spring容器中查找id与属性名相同的bean,并进行注入。
3、byType:在Spring容器中查找类型与属性名的类型相同的bean,并进行注入。
4、constructor:仍旧是使用byName方式,只不过注入的时候,使用构造方式进行注入。
5、default:全局配置的default相当于no,局部的default表示使用全局配置设置
配置全局自动注入
<?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.xsd"
default-autowire="byName"
>
<!-- 注意,<beans>标签中配置了全局自动注入方式 --> <bean id="major" class="cn.ganlixin.pojo.Major"></bean>
<bean id="student" class="cn.ganlixin.pojo.Student"></bean>
<!-- 默认使用全局配置,全局设置为byName,所以会按照byName方式自动注入, -->
</beans>
局部单独配置
使用局部单独配置就是在要创建的<bean>中设置autowire属性:
<?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.xsd"
default-autowire="no"
>
<!-- 注意,<beans>标签中配置了全局自动注入方式 --> <bean id="major" class="cn.ganlixin.pojo.Major"></bean>
<bean id="student" class="cn.ganlixin.pojo.Student" autowire="byName"></bean>
<!-- 局部进行配置后,会覆盖全局配置,局部设置为byName,所以会按照byName方式自动注入, -->
</beans>
使用注解实现自动注入
使用注解自动注入,可以参考:Spring 使用注解完成IoC与DI
主要使用的是@autowired和@Resource两个注解
Spring 完成自动注入(autowire)的更多相关文章
- SSM-Spring-06:Spring的自动注入autowire的byName和byType
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- di的注入上次讲了一些,这次主要阐述域属性的自动注入 先讲byType方式 看名字就知道是根据类型进行自动注入 ...
- 关于spring的自动注入
关于spring的自动注入 spring里面可以设置BeanDefinition自动注入类型,默认为AUTOWIRE_NO(不进行自动注入).mybatis里面的扫描接口生成MapperFactory ...
- spring bean自动注入
使用 @Repository.@Service.@Controller 和 @Component 将类标识为 Bean Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的 ...
- spring学习 十五 spring的自动注入
一 :在 Spring 配置文件中对象名和 ref=”id” ,id 名相同使用自动注入,可以不配置<property/>,对应的注解@Autowired的作用 二: 两种配置办法 (1 ...
- Spring -08 -自动注入 -byName/byType/constructor -全局使用default-autowire=” byName"
1.在Spring 配置文件中对象名和ref=”id”id 名相同使用自动注入,可以不配置<property/>2.两种配置办法 2.1在<bean>中通过 autowire= ...
- 关于spring boot自动注入出现Consider defining a bean of type 'xxx' in your configuration问题解决方案
搭建完spring boot的demo后自然要实现自动注入来体现spring ioc的便利了,但是我在实施过程中出现了这么一个问题,见下面,这里找到解决办法记录下来,供遇到同样的问题的同僚参考 Des ...
- 旷世奇坑!!!spring 不能自动注入
一入此坑,只想跳楼.我发誓应该不会有第二个人会进这种坑! 问题描述: 总是不能注入dao层,即@Resposity.always!always!always!(尝试了天下之因特网所有的注入方式,都不能 ...
- spring拦截器中使用spring的自动注入
需要在spring的拦截器中使用自定义的服务,这要就设计到将服务注入到拦截器中.网上看的情况有两种: 1. @Configuration public class OptPermissionHandl ...
- spring AutowireCapableBeanFactory 自动注入
文档:http://docs.spring.io/spring/docs/3.0.x/javadoc-api/org/springframework/beans/factory/config/Auto ...
随机推荐
- ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目
一.前言 这几年前端的发展速度就像坐上了火箭,各种的框架一个接一个的出现,需要学习的东西越来越多,分工也越来越细,作为一个 .NET Web 程序猿,多了解了解行业的发展,让自己扩展出新的技能树,对自 ...
- Vue父子组件传参新写法
以前我在写接受自定义事件是这么写的: 后来我在官网看到这样一种说法:可以用$event代替emit事件传入的参数,于是我写成了这样: 直到昨天Vetur更新,给我报了这么一个错误: 报错原因:事件不能 ...
- Win32对话框程序(1)
之前学C语言是一直都是在控制台下面操作的,面对的都是黑框框,严重的打击了学习的兴趣.后来在TC下进行C语言课程设计,做了图形界面编程,但都是点线面画的…… 中间隔了好长一段时间没有碰过C语言,最近才开 ...
- JAVA WEB快速入门之从编写一个基于SpringMVC框架的网站了解Maven、SpringMVC、SpringJDBC
接上篇<JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP.IOC)>,了解了Spring的核心(AOP.IOC)后,我们再来学习与实践Maven.Sp ...
- JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP、IOC)
接上篇<JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构.调试.部署>,通过一个简单的JSP WEB网站了解了JAVA WEB相关的知识,比如:Ser ...
- 【转载】java final 关键字的几种用法
原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...
- (摘)timeout Timeout时间已到.在操作完成之前超时时间已过或服务器未响应的几种情况
Timeout时间已到.在操作完成之前超时时间已过或服务器未响应 问题 在使用asp.net开发的应用程序查询数据的时候,遇到页面请求时间过长且返回"Timeout时间已到.在操作完成之间超 ...
- Struts2笔记_拦截器
A.拦截器是什么 --- Interceptor:拦截器,起到拦截Action的作用. ---Filter:过滤器,过滤从客户端向服务器发送的请求. ---Interceptor:拦截器,拦截是客户端 ...
- php 获取URL 各部分参数
URL处理几个关键的函数parse_url.parse_str与http_build_query parse_url() 该函数可以解析 URL,返回其组成部分.它的用法如下: array parse ...
- cesium 之三维漫游飞行效果实现篇(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...