java应用中spring自动注入_Spring中,使用Java配置的方式进行依赖注入

之前用spring的时候,只知道使用xml的方式,和使用注解的方式,却一直不知道在spring中,还可以使用Java类的方式进行配置。使用Java类的方式,就可以取代xml和注解。使用Java配置是Spring4版本的推荐的配置方式,在spring boot中得到了很广泛的应用,也是spring boot推荐的配置方式。

今天大概学习了一下,怎么使用java配置的方式对spring进行配置来使用以来注入功能。

首先我们演示使用注解的方式配置spring,注解的一些功能全部以注释的形式展示。Spring容器类选用AnnotationConfigApplicationContext。 功能类1,FunctionService

packagesite.wangxin520.springstudy.dependency.injection;importorg.springframework.stereotype.Service;//使用@service注解声明当前的类,是spring管理的一个Bean//可以根据需要,选择@Component @Servie @Repository @Controller

@Servicepublic classFunctionService {/*** 返回一个字符串,在参数字符串前面加入hello,拼成一个新字符串

*@paramword

*@return

*/

publicString sayHallo(String word){return "hello "+word+" !";

}

}

功能类2,UseFunctionService

packagesite.wangxin520.springstudy.dependency.injection;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;

@Servicepublic classUserFuctionService {//@Autowired是自动注入的注解,将实例化好的FunctionService类注入到本类中的属性。

@Autowired

FunctionService functionService;publicString sayHello(String word){returnfunctionService.sayHallo(word);

}

}

配置类DiConfig

packagesite.wangxin520.springstudy.dependency.injection;importorg.springframework.context.annotation.ComponentScan;importorg.springframework.context.annotation.Configuration;/*** 配置类

*@authorwangXgnaw

**/@Configuration//声明当前类是一个配置类

@ComponentScan("site.wangxin520.springstudy")//相当于xml中配置到 扫描包

public classDiConfig {

}

Test测试类

packagesite.wangxin520.springstudy.dependency.injection;importorg.springframework.context.annotation.AnnotationConfigApplicationContext;public classTest {public static voidmain(String[] args) {

AnnotationConfigApplicationContext context= new AnnotationConfigApplicationContext(DiConfig.class);

UserFuctionService userFuctionService= context.getBean(UserFuctionService.class);

String sayHello= userFuctionService.sayHello("小帅哥,快来玩呀");

System.out.println(sayHello);

}

}

控制台输出为

7e946ad8f90b1fab105b26caac08ed05.png

完全可以运行,而本例子中,没有配置任何xml文件。

下面介绍另一种方式,不在类上面使用注解,而直接使用Java配置。

同样,还是上面的列子,不过在新例子中,去掉了@Service和@AutoWired注解

FunctionService功能类1

packagesite.wangxin520.springstudy.javaconf;public classFunctionService {publicString sayHallo(String word){return "hello "+word+" !";

}

}

UserFunctionService功能类2

packagesite.wangxin520.springstudy.javaconf;public classUserFuctionService {

FunctionService functionService;public voidsetFunctionService(FunctionService functionService) {this.functionService =functionService;

}publicString sayHello(String word) {returnfunctionService.sayHallo(word);

}

}

JavaConfig

packagesite.wangxin520.springstudy.javaconf;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;

@Configuration//这里注意的是,没有使用包扫描的注解

public classJavaConfig {

@Bean//使用Bean注解声明当前方法的返回值是一个Bean,名称就是方法名

publicFunctionService functionService(){return newFunctionService();

}

@BeanpublicUserFuctionService userFuctionService(){//当使用userFunctionService时候,就会调用这个里面的方法去获取bean

UserFuctionService userFuctionService=newUserFuctionService();

userFuctionService.setFunctionService(functionService());returnuserFuctionService;

}

@Bean//这是另外一种注入的方式,直接使用参数注入的方式

publicUserFuctionService userFuctionService(FunctionService functionService){

UserFuctionService userFuctionService=newUserFuctionService();

userFuctionService.setFunctionService(functionService());returnuserFuctionService;

}

}

Test

packagesite.wangxin520.springstudy.javaconf;importorg.springframework.context.annotation.AnnotationConfigApplicationContext;public classTest {public static voidmain(String[] args) {

AnnotationConfigApplicationContext context= new AnnotationConfigApplicationContext(JavaConfig.class);

UserFuctionService userFuctionService= context.getBean(UserFuctionService.class);

String sayHello= userFuctionService.sayHello("小帅哥,快来玩呀");

System.out.println(sayHello);

}

}

控制台输出

2afafc0798c0a8a2f8ccca27935e4406.png

表示,这个还没有xml方便,不喜欢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值