博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Bean的装配(非XML文件方式)
阅读量:6987 次
发布时间:2019-06-27

本文共 2536 字,大约阅读时间需要 8 分钟。

hot3.png

Spring提供三种装配Bean的方法:

  • 自动化装配Bean
  • Java 代码中显式配置Bean
  • XML配置文件配置Bean

自动化装配Bean:

使用到的注解:

  • @Configuration:标记在class上,表示该类是一个配置类,配置类并不参与业务逻辑,只是告诉Spring该类里面是一些配置项,比如Spring默认不开启组件扫描,可以在该类里面配置开启组件扫描
  • @ComponentScan:该注解能够在Spring中开启组件扫描,标记在配置类上
  • @Component:标记在class上,表示该类是一个组件类,通知Spring要为这个类创建bean
  • @Autowired:标记在类的字段或者方法上,Spring会在满足依赖的情况下进行自动装配

@Configuration:

Spring自动扫描默认没有开启,所以我们需要配置开启组件扫描。当然可以通过XML文件配置,但新Spring支持Java配置。

要使用Java配置Spring需要一个配置类,这个类没有逻辑意义,只是用来配置Spring。创建配置类只需要简单的在类上使用@Configuration标记即可。

创建配置类代码:

@Configurationpublic class SpringConfig{}

@ComponentScan:

该标签可以配置在Spring中开启组件扫描。使用方法也很简单,在配置类上打上该标签即可。

@Configuration@ComponentScanpublic class SpringConfig{}

上面这种方式默认会以配置类所在的包作为基础包来扫描组件。如果想扫描不同的包或者多个包怎么办?那么就需要在注解中明确指定要扫描的包:

@ComponentScan(basePackages={"music","video"})

@Component:

我们在组件类上添加该标签通知Spring为该类创建Bean。比如我们有一个Login接口,该接口有一个LoginImpl实现,很明显,我们需要为LoginImpl配置一个Bean,使用自动装配的话只需要在LoginImpl类上添加@Component注解即可。

可能会有疑问Spring自动创建的Bean的id是什么?我应该如何获取这个Bean?Spring会将Bean的id设置为class的名字,但会将第一个字母变为小写。如下面例子,这个Bean的id则是 ”loginImpl“ 。

interface Login{    boolean isLogin();}@Componentpublic class LoginImpl implements Login{    @Override    public boolean isLogin(){}}

当然可以为Bean指定名字,通过在标签中添加id字符串即可。

@Component("myLogin")

@Autowired:

该注解会根据依赖关系自动将Bean装配到相应的地方。

public class test(){    @Autowired    Login login;    //其他操作}

总结:

只需要使用上面的四个注解,就可以实现Spring自动装配Bean。一般情况下尽可能使用自动装配的方法,因为在项目中显式的配置越少越好。

Java 代码中显式配置Bean:

使用到的注解:@Bean

@Bean:

简单声明Bean:

注意,该注解标记在方法上,告诉Spring该方法将返回一个对象,该对象要注册为Spring应用上下文中的Bean。方法体包含最终产生bean实例的逻辑。

//这里不需要@ComponentScan注解,因为不是自动装配@Configurationpublic class SpringConfig{    //这里手动配置LoginImpl的Bean    @Bean    public Login loginImpl(){        return new LoginImpl();    }}

默认情况下返回的Bean的id与带有@Bean注解的方法名是一样的,上面的例子Bean的id就是 “loginImpl"。如果想设置其他id,可以重命名这个方法名即可;另一种方法就是在@Bean中指定名字:

@Bean("loginImpl2")

实现注入:

上面的例子很简单,但如果一个Bean依赖与其他对象应该如何写?比如LoginImpl依赖Identity对象。

第一种方法:

如果Identity也像loginImpl()方法一样有一个方法identityImpl()声明了Bean,那么下面这种方法可以将Identity对象装配到LoginImpl中。

@Beanpublic Login loginImpl(){    return new LoginImpl(identityImpl());

第二种方法:

@Beanpublic Login loginImpl(Identity identity){    return new LoginImpl(identity);}

这种方法是最佳的选择,因为该方法不要求Identity在配置类中有显式声明Bean的方法,Identity可以是通过自动扫描或者XML文件配置出来的Bean。当Spring调用loginImpl创建loginImpl的bean时,会自动装配一个Identity Bean进来,不管这个Identity Bean是自动装配来的还是java或者XML显式配置来的。

注意:默认情况下Spring中的Bean都是单例模式,也就是说两个IoginImpl bean会得到相同的LoginImpl实例。

总结:

在必须显示配置Bean的时候,优先选择JavaConfig配置。因为Java配置Bean的类型安全检查更加强大。

XML配置文件配置Bean:

通过XML文件装配Bean有点麻烦,可以看一看这篇资料 ----。

转载于:https://my.oschina.net/HuoQibin/blog/2223118

你可能感兴趣的文章
IK中文分词_IK分词器配置文件讲解以及自定义词库
查看>>
One or more constraints have not been satisfied.
查看>>
redis慢查询日志,php安装redis扩展,redis存储session,redis主从配置
查看>>
RBAC扩展
查看>>
Java函数式编程和lambda表达式
查看>>
Android:Activity(八):Fragment的生命周期
查看>>
【视频】 安卓***课程收集整理
查看>>
按某一列里面同一类横向显示数据总数
查看>>
rsyslog 客户端监控
查看>>
用maven快速搭建spring mvc的web项目(配置到jackson 和 任务调度)
查看>>
Kotlin
查看>>
windows平台升级ORACLE11.2.0.1到11.2.0.4
查看>>
nginx日志分析
查看>>
eureka多注册中心
查看>>
spring 数据源动态切换 与dubbo服务
查看>>
linux系统批量修改root用户密码
查看>>
我的shell×××作
查看>>
天猫超市低调运营 马云尝试自营B2C模式
查看>>
选择Palo Alto 防火墙十大理由
查看>>
Linux下解压,压缩JAR包的简单方法
查看>>