菜单

Spirng重视注入的三种艺术章

2019年10月4日 - 皇家赌场系统

Spring的主要特色富含IOC和DI,当中DI是IOC的基础。在原先的Spring使用进度中超过1/2都以利用XML配置文件显式配置spring组件,导致多量的XML配置文件以及冗余的XML配置代码。阅读《Spring
in Action》后总括Spring的DI成效的两种首要装配格局以及混合装配格局

Spring中有特别丰硕的疏解,通过这几个注明能够低价地配置Spring容器,使得Spring容器能够自动识别相关Bean并做活动注入装配。

应用注脚

  1. @Component评释:评释一个类,标志此类为三个Java Bean。
  2. @Configuration批注:标明三个类,标记此类为三个Java配置类
  3. @ComponentScan注解:标明二个类,用以配置扫描的包名称

亲自去做代码

此间运用一个最简单易行的例子来展现自行装配的布置,代码结构如图所示。

图片 1图片.png

ActionConfig类用于做全局配置,大家清楚,一名骑士常常都会有一匹马,所以这里Horse和Knight类作为Java
Bean被Spring容器创设,并将Horse类的四个bean注入到奈特中。所以在Horse和奈特中必得运用@Component表明实行修饰。

Knight代码:

package entities;import org.springframework.stereotype.Component;/** * Created by Administrator on 2017/8/3 0003. */@Componentpublic 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. */@Componentpublic 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配置类进行装配的法子是运用对配置类中的方法开展申明表明,实现bean的开创和管制。

抑或利用上述的例证,今后大家将地点的自发性装配改成Java配置类举办李装运配。

第一,删掉奈特和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. */@Configurationpublic class ActionConfig { @Bean public Knight getKnight(){ return new Knight(getHorse; } @Bean public Horse getHorse(){ return new Horse(); }}

经过@Bean阐明对相关的艺术开展修饰,Spring就足以领略调用那一个主意来营造相应的bean,并流入到依据的目的中。

利用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 > <constructor-arg ref="horse"></constructor-arg> </bean> <bean ></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. */@Configurationpublic 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 ></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 ></bean> <bean > <constructor-arg ref="horse"></constructor-arg> </bean> <bean ></bean></beans>

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图