好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

深入理解java的spring-ioc的使用

spring-ioc的使用

ioc容器在很多框架里都在使用,而在spring里它被应用的最大广泛,在框架层面上,很多功能都使用了ioc技术,下面我们看一下ioc的使用方法。

把服务注册到ioc容器 使用属性注入反射对应类型的实例 多态情况下,使用名称反射类型的实例

把服务注册到ioc容器

@bean注册组件
使用@bean注解进行类型的注册,默认你的ioc容器里类型为bean的返回值,名称为bean所有的方法名,与你的包名称没有直接关系,如果你的接口有多种实现,在注册时可以使用@bean("lind")这种方式来声明。

@component,@configuration,service,repository注册组件

这几个注解都是在类上面声明的,而@bean是声明在方法上的,这一点要注意,这几个注解一般是指对一个接口的实现,在实现类上加这些注解,例如,一个数据仓储接口userrepository,它可以有多种数据持久化的方式,如sqluserrepositoryimpl和mongouserrepositoryimpl,那么在注册时你需要为他们起一个别名,如@repository("sql-userrepositoryimpl) qluserrepositoryimpl,默认的名称是类名,但注意 类名首字母为小写 。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

public interface emaillogservice {

  void send(string email, string message);

}

 

@component ()

public class emaillogservicehttpimpl implements emaillogservice {

  private static final logger logger = loggerfactory.getlogger(emaillogservicehttpimpl. class );

 

  @override

  public void send(string email, string message) {

  assert .notnull(email, "email must not be null!" );

  logger.info( "send email:{},message:{}" , email, message);

  }

}

@component ( "email-socket" )

public class emaillogservicesocketimpl implements emaillogservice {

  private static final logger logger = loggerfactory.getlogger(emaillogservicesocketimpl. class );

 

  @override

  public void send(string email, string message) {

  assert .notnull(email, "email must not be null!" );

  logger.info( "send email2:{},message:{}" , email, message);

  }

}

// 看一下调用时的测试代码

  @resource (name = "email-socket" )

  emaillogservice socketemail;

  @autowired

  @qualifier ( "emaillogservicehttpimpl" )

  emaillogservice httpemail;

 

  @test

  public void testioc2() {

  socketemail.send( "ok" , "ok" );

  }

 

 

  @test

  public void testioc1() {

  httpemail.send( "ok" , "ok" );

  }

在程序中使用bean对象

1.使用resource装配bean对象
在通过 别名 调用bean时,你可以使用@resource注解来装配对象

2.使用@autowired装配bean对象
也可以使用 @autowired
@qualifier( "emaillogservicehttpimpl")两个注解去实现程序中的 多态 。

使用场景

在我们有些相同行为而实现方式不同的场景中,如版本1接口与版本2接口,在get方法实现有所不同,而这
两个版本都要同时保留,这时我们需要遵守开闭原则,扩展一个新的接口,而在业务上对代码进行重构,
提取两个版本相同的方法到基类,自己维护各自独有的方法,在为它们的bean起个名字,在装配时,通过
bean的名称进行装配即可。

写个伪代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

class api_version1(){

@autowired

@qualifier ( "print-version1" )

printservice printservice;

}

 

class api_version2(){

@autowired

@qualifier ( "print-version2" )

printservice printservice;

}

 

class baseprintservice{}

 

interface printservice{}

 

@service ( "print-version1" )

class printserviceimplversion1 extends baseprintservice implements printservice{}

 

@service ( "print-version2" )

class printserviceimplversion2 extends baseprintservice implements printservice{}

以上所述是小编给大家介绍的java的spring-ioc的使用详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

原文链接:https://HdhCmsTestcnblogs测试数据/lori/p/10512402.html

查看更多关于深入理解java的spring-ioc的使用的详细内容...

  阅读:10次