spring框架应用系列一:annotation-config自动装配
annotation-config自动装配
本文系作者原创,转载请注明出处:http://www.cnblogs.com/further-further-further/p/7716678.html
解决问题
通过spring XML配置文件,实现类对象之间松耦合
前提条件
使用的bean必须在spring容器中已注册过
内容说明
1、 使用@Autowired注解自动装配时,需在XML配置文件中引入 <context:annotation-config/>;
2、 存在多个bean满足装配属性,需用@Qualifier指定唯一的bean,否则会报异常;
Guitar和Saxophone都实现了Instrument接口,Instrumentalist存在一个属性类型为Instrument,
所以Instrumentalist满足装配Instrument属性的bean就有 Guitar和Saxophone,所以必须指定唯一的bean;
3、 bean 的id不指定时,默认类名小写;
例如<bean class="com.spring.example.annotation.config.Guitar"/> 因为id没有指明,所以默认为guitar;
应用实例(包名:com.spring.example.annotation.config)
spring配置文件 annotation-config.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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--<!–使用基于注解自动装配 @Autowired @Inject @Resource–>-->
<context:annotation-config/> <!--限定歧义性的依赖,使用@Autowired注解自动装配,满足装配的多个bean,
可以通过@Qualifier指定来缩小范围 默认byType
Guitar和Saxophone都实现了Instrument,所以有多个bean满足Instrumentalist注入属性,
需要指定唯一bean,用@Qualifier("guitar")指定,否则会报异常
--> <bean id ="guitar" class="com.spring.example.annotation.config.Guitar"/>
<bean id ="saxophone" class="com.spring.example.annotation.config.Saxophone"/>
<bean id ="kenny"
class="com.spring.example.annotation.config.Instrumentalist">
<property name="song" value="Jingle Bells3" />
</bean> </beans>
Instrument接口代码
public interface Instrument {
void play();
}
Guitar实现接口Instrument代码
public class Guitar implements Instrument {
@Override
public void play() {
System.out.println("Guitar....");
}
}
Saxophone实现接口Instrument代码
public class Saxophone implements Instrument {
@Override
public void play() {
System.out.println("Saxophone ......");
}
}
Performer接口代码
public interface Performer { void perform();
}
Instrumentalist实现接口Performer代码
public class Instrumentalist implements Performer { public Instrumentalist(){}
@Value("Yesterday Once more !") //song 初始化值
private String song; // @Autowired 可以装配属性、方法、构造函数,只要类型相同(这里是Instrument类型)
@Autowired
@Qualifier("guitar") //spring容器中有多个bean满足要求,需要指定bean
private Instrument instrument; public void setSong(String song) {
this.song = song;
} public void setInstrument(Instrument instrument){
this.instrument = instrument ;
} @Override
public void perform() {
System.out.println("Playing "+ song + " : ");
instrument.play();
} }
测试代码
public class Driver extends Application { public static void main(String[] args) {
launch(args);
} @Override
public void start(Stage primaryStage) {
try { ApplicationContext ctx = new ClassPathXmlApplicationContext("spring/annotation-config.xml");
Performer performer = (Performer) ctx.getBean("kenny");
performer.perform(); }catch (Exception e){
e.printStackTrace();
}
}
}
运行结果
总结
annotation-config下@Autowired自动装配自然也有其优缺点:
优点:实现类对象之间松耦合,
缺点:需要在spring配置文件中需提前手动指明bean,增加XML文件繁琐冗余性;
在业务逻辑开发中不能将业务类自动注入spring容器,遇到业务类的更改,配置文件也不得不更改,增加出错概率;
component-scan能解决此问题,会在下节讲述;
应用场景
调用第三方接口,装配注入相应实例bean;
本文描述可能有不对或不全之处,欢迎大家吐槽!
不要让懒惰占据你的大脑,不要让妥协拖垮你的人生。青春就是一张票,能不能赶上时代的快车,你的步伐掌握在你的脚下。
spring框架应用系列一:annotation-config自动装配的更多相关文章
- Spring框架学习笔记(5)——自动装配
1.通过bean标签的autowire属性可以实现bean属性的自动装配. 创建一个新的Spring配置文件beans-autowire.xml,这里我们配置了3个bean,Address.Car.P ...
- 模仿 spring IOC Annotation版自动装配
spring 有两大核心 IOC和AOP. IOC (inversion of control) 译为 控制反转,也可以称为 依赖注入 ; AOP(Aspect Oriented Programmi ...
- 大厂面试官问你META-INF/spring.factories要怎么实现自动扫描、自动装配?
大厂面试官问你META-INF/spring.factories要怎么实现自动扫描.自动装配? 很多程序员想面试进互联网大厂,但是也有很多人不知道进入大厂需要具备哪些条件,以及面试官会问哪些问题, ...
- 使用spring框架,用xml方式进行bean装配出现“The fully qualified name of the bean's class, except if it serves...”
使用spring框架,用xml方式进行bean装配出现“The fully qualified name of the bean's class, except if it serves...”. 原 ...
- spring框架应用系列二:component-scan自动扫描注册装配
component-scan自动扫描注册装配 本文系作者原创,转载请注明出处:http://www.cnblogs.com/further-further-further/p/7717331.html ...
- Spring系列7:`autowire`自动装配怎么玩
回顾 前几篇我们介绍各种依赖依赖注入,都是显式指定的,配置明确但同时也有些繁杂和重复."很多发明的出发点,都是为了偷懒,懒人是推动社会进步的原动力".Spring 提供了自动注入依 ...
- 使用Spring的JavaConfig 和 @Autowired注解与自动装配
1 JavaConfig 配置方法 之前我们都是在xml文件中定义bean的,比如: 1 2 3 4 5 6 7 8 <beans xmlns="http://www.springf ...
- Spring学习记录(十一)---使用注解和自动装配
Spring支持用注解配置Bean,更简便. 上面的组件,是根据实际情况配的.比如写的一个类,是做业务处理的,那就用注解@Service表示服务层组件,以此类推.将整体分成不同部分. 要在xml加入c ...
- Spring 框架 详解 (四)------IOC装配Bean(注解方式)
Spring的注解装配Bean Spring2.5 引入使用注解去定义Bean @Component 描述Spring框架中Bean Spring的框架中提供了与@Component注解等效的三个注 ...
随机推荐
- 201521123101 《Java程序设计》第14周学习总结
1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 在自己建立的数据库上执行常见SQL语句(截图) 2 ...
- linux目录结构图
- Java:实现对象的比较 comparable接口和comparator接口
在实际应用中,我们往往有需要比较两个自定义对象大小的地方.而这些自定义对象的比较,就不像简单的整型数据那么简单,它们往往包含有许多的属性,我们一般都是根据这些属性对自定义对象进行比较的.所以Java中 ...
- WPF(C#) 矩阵拖动、矩阵动画、边缘展开动画处理。
最近在研发新的项目,遇到了一个桌面模式下的难点--展开动画.之前动画这方面没做过,也许很多人开始做的时候也会遇到相关问题,因此我把几个重点及实际效果图总结展示出来: 我的开发环境是在VS2017下进行 ...
- Java SpringMVC小白的成长(一)
如果你是一个小白,请跟着我走,我会让你少走弯路,如果你是大牛,那么多谢大牛可以给我提提建议. 说实话,来公司这么久,一直在做的是维护与修改bug.(我的语言是php,来公司才开始接触java). 要毕 ...
- hdu3037 Saving Beans
Saving Beans Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Pro ...
- centOS 7一个解决“network.service: control process exited, code=exited status=1”方法
今天早上2017-08-04,我打开虚拟机,使用远程工具xshell对虚拟机进行连接,我发现连接不上去,然后我ifconfig,发现找不到ens33了,就剩一个本地回环,看来是我的网络出现了问题,然后 ...
- Struts2-在js中使用struts2标签
1, 支行是下拉列表,自助银行也是下拉列表,它们是级联关系; <tr> <th width="17%"><span>*</span> ...
- JMeter基础之—录制脚本
Jmeter 是一个非常流行的性能测试工具,虽然与LoadRunner相比有很多不足,比如:它结果分析能力没有LoadRunner详细:很它的优点也有很多: l 开源,他是一款开源的免费软 ...
- Java9新特性之——JShell
java9已经在北京时间9月22日正式发布,开发者可以在oracle jdk官网上下载到最新的jdk9.jdk9和jdk8中的新特性不同:jdk8中的stream和lambda表达式能够让开发者非常快 ...