Spring的主要特性包括IOC和DI,其中DI是IOC的基础。在以前的Spring使用过程中大部分都是使用XML配置文件显式配置spring组件,导致大量的XML配置文件以及冗余的XML配置代码。阅读《Spring in Action》后总结Spring的DI功能的三种主要装配方式以及混合装配方式

根据注解自动装配
Spring中有非常丰富的注解,通过这些注解可以方便地配置Spring容器,使得Spring容器可以自动识别相关Bean并做自动注入装配。
使用注解
示例代码
这里使用一个最简单的例子来展示自动装配的配置,代码结构如图所示。
ActionConfig类用于做全局配置,我们知道,一名骑士一般都会有一匹马,所以这里Horse和Knight类作为Java Bean被Spring容器创建,并将Horse类的一个bean注入到Knight中。所以在Horse和Knight中必须使用@Component注解进行修饰。
Knight代码:
package entities;
import org.springframework.stereotype.Component;
/**
* Created by Administrator on 2017/8/3 0003.
*/
@Component
public class Knight {
private Horse horse;
Knight(Horse horse){
this.horse = horse;
}
public void ride(){
horse.bark();
}
}
Horse代码:
package entities;
import org.springframework.stereotype.Component;
/**
* Created by Administrator on 2017/8/3 0003.
*/
@Component
public class Horse {
void bark(){
System.out.println("Horse!!!!");
}
}
ActionConfig代码:
package config;
import entities.Knight;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* Created by Administrator on 2017/8/3 0003.
*/
@Configuration
@ComponentScan(basePackageClasses = {Knight.class})
public class ActionConfig {
}
这里的ComponentScan注解内的属性用以注明Knight类所在的包为扫描的基础包。凡是这个基础包及其子包内的标注了@Component的类都将被视为Java Bean,这些Bean被Spring容器创建和管理。
Java配置类装配
从自动装配的代码中,可以看出自动装配是非常简单方便的。Java配置类进行装配的方式是采用对配置类中的方法进行注解标注,实现bean的创建和管理。
还是采用以上的例子,现在我们将上面的自动装配改成Java配置类进行装配。
首先,删掉Knight和Horse中的@Component注解,删掉ActionConfig中的@ComponentScn注解,因为这些注解都是自动装配才需要的。
package entities;
/**
* Created by Administrator on 2017/8/3 0003.
*/
public class Knight {
private Horse horse;
public Knight(Horse horse){
this.horse = horse;
}
public void ride(){
horse.bark();
}
}
package entities;
/**
* Created by Administrator on 2017/8/3 0003.
*/
public class Horse {
void bark(){
System.out.println("Horse!!!!");
}
}
ActionConfig类:
package config;
import entities.Horse;
import entities.Knight;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Created by Administrator on 2017/8/3 0003.
*/
@Configuration
public class ActionConfig {
@Bean
public Knight getKnight(){
return new Knight(getHorse());
}
@Bean
public Horse getHorse(){
return new Horse();
}
}
通过@Bean注解对相关的方法进行修饰,Spring就可以知道调用这些方法来构建相应的bean,并注入到依赖的对象中。
XML配置文件装配
使用XML配置文件来装配组件是最为繁琐的,需要对各个bean做一一配置,特别是需要配置构造器或者setter的参数。
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context" xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
</beans>
以上是一个空的XML配置文件,看一下就知道,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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context" xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="knight" class="entities.Knight">
<constructor-arg ref="horse"></constructor-arg>
</bean>
<bean id="horse" class="entities.Horse"></bean>
</beans>
通过配置两个bean元素,并且通过constructor-arg元素来配置构造函数注入的bean,达到依赖注入的目的。
导入和混合配置
有时候单纯的XML配置或者Java配置不满足我们的需求怎么办呢?Spring支持混合配置的方式来管理bean,通过Java和XML配置的混合,达到你想要的效果。
Java配置中引用Java配置
在配置类中使用@Import注解进行引入另一个Java配置类。
package config;
import entities.Horse;
import entities.Knight;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
/**
* Created by Administrator on 2017/8/3 0003.
*/
@Configuration
@Import(BeautyConfig.class)
public class ActionConfig {
@Bean
public Knight getKnight(){
return new Knight(getHorse());
}
@Bean(name = "horse")
public Horse getHorse(){
return new Horse();
}
}
BeautyConfig代码:
package config;
import entities.Beauty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Created by Administrator on 2017/8/3 0003.
*/
@Configuration
public class BeautyConfig {
@Bean
Beauty getBeauty(){
return new Beauty();
}
}
在Main中,只需要通过ActionConfig就可以获取到所有的上下文对象。
package main;
import config.ActionConfig;
import entities.Beauty;
import entities.Knight;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* Created by Administrator on 2017/8/3 0003.
*/
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ActionConfig.class);
Knight knight = context.getBean(Knight.class);
knight.ride();
Beauty beauty = context.getBean(Beauty.class);
beauty.sleep();
}
}
这里简单使用Import引入了另一个配置的Java文件,就实现了将多个bean分别配置到多个Java配置类中。
Java配置中引入XML配置
在Java中引入xml配置的基本方法与引入Java代码配置类似,只需要将@Import改为@ImportResource,配上xml的文件地址即可。
@ImportResource("classpath:spring.xml")
以上,就是Java配置spring依赖注入的方法。
XML配置中引入XML配置
同理,在XML配置中引入XML也需要使用Import,但是在XML中是import标签,通过使用import标签导入另一个xml文件。
这里我新建了一个another.xml的文件,用以作为另一个配置文件示例。在原有的spring.xml中加入以下代码:
<import resource="another.xml"></import>
这样就简单导入了anoter.xml配置文件。
XML配置中引入Java配置
乍看之下,在XML中似乎没有标签可以导入Java配置类的,不过任何Java配置类都是一个bean,所以可以通过配置bean标签来导入Java配置类!
<bean class="config.BeautyConfig"></bean>
通过在XML中配置这个Java配置类的bean,就直接导入了在Java配置类中的所有bean,真是神奇!
以下是配置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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context" xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<import resource="another.xml"></import>
<bean class="config.BeautyConfig"></bean>
<bean id="knight" class="entities.Knight">
<constructor-arg ref="horse"></constructor-arg>
</bean>
<bean id="horse" class="entities.Horse"></bean>
</beans>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Spring依赖注入
# spring三种注入方式
# Spring依赖注入的三种方式实例详解
# Spring依赖注入的两种方式(根据实例详解)
# spring四种依赖注入方式的详细介绍
# 详析Spring中依赖注入的三种方式
# Spring依赖注入(DI)两种方式的示例详解
# 配置文件
# 都是
# 类中
# 多个
# 此类
# 就可以
# 是一个
# 有一
# 一名
# 中有
# 只需
# 可以通过
# 自动识别
# 并将
# 三种
# 都将
# 只需要
# 可以看出
# 要将
# 看一下
相关文章:
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
制作网站的基本流程,设计网站的软件是什么?
免费视频制作网站,更新又快又好的免费电影网站?
如何快速搭建FTP站点实现文件共享?
香港服务器WordPress建站指南:SEO优化与高效部署策略
山东网站制作公司有哪些,山东大源集团官网?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
定制建站是什么?如何实现个性化需求?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
孙琪峥织梦建站教程如何优化数据库安全?
如何用景安虚拟主机手机版绑定域名建站?
建站之星如何通过成品分离优化网站效率?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
如何快速完成中国万网建站详细流程?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
西安专业网站制作公司有哪些,陕西省建行官方网站?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
专业公司网站制作公司,用什么语言做企业网站比较好?
网页设计网站制作软件,microsoft office哪个可以创建网页?
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
如何在云虚拟主机上快速搭建个人网站?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
,怎么在广州志愿者网站注册?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
如何在宝塔面板中修改默认建站目录?
如何访问已购建站主机并解决登录问题?
早安海报制作网站推荐大全,企业早安海报怎么每天更换?
三星网站视频制作教程下载,三星w23网页如何全屏?
如何登录建站主机?访问步骤全解析
家庭服务器如何搭建个人网站?
建站之星如何快速生成多端适配网站?
定制建站价位费用解析与套餐推荐全攻略
网站制作免费,什么网站能看正片电影?
C#如何在一个XML文件中查找并替换文本内容
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
广平建站公司哪家专业可靠?如何选择?
网站制作软件有哪些,制图软件有哪些?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
宿州网站制作公司兴策,安徽省低保查询网站?
如何通过VPS建站无需域名直接访问?
已有域名如何免费搭建网站?
高性价比服务器租赁——企业级配置与24小时运维服务
股票网站制作软件,网上股票怎么开户?
如何在VPS电脑上快速搭建网站?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
定制建站流程解析:需求评估与SEO优化功能开发指南
如何挑选高效建站主机与优质域名?
如何通过商城自助建站源码实现零基础高效建站?
*请认真填写需求信息,我们会在24小时内与您取得联系。