Spring装配bean方法实例总结

 更新时间:2020年04月20日 09:41:18   作者:知识追寻者  
这篇文章主要介绍了spring装配bean方法实例总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一 前言

在XML中进行显式配置。

在Java中进行显式配置。

隐式的bean发现机制和自动装配

关于xml配置不会在本篇说明,有兴趣的读者可以自行了解学习;

二 自动装配bean

自动装配Bean主要通过如下两个方式实现自动装备bean

  • 组件扫描(component scanning):Spring会自动扫描发现上下文中所创建的bean;对应java配置@ComponentScan注解,其会默认会扫描与配置类相同的包和其子包;如果是xml就是<context:component-scan>
  • 自动装配(autowiring):Spring自动化管理bean之间的依赖关系;java配置@Autowiring注解,相当于java规范中的@Inject注解;其可以使用在任何类的任何方法上;不建议将required属性设置为false,否则如果在bean未装配的情况下就会报空指针异常;
  • @Component注解:赋予spring上下文组件类一个ID;如果不指定value默认就是将类名的第一个字母变为小写形式;其相当于java规范中的@Name注解;

敲黑板了:

理下思路我们可以通过@Component注解使用在多个类上实现多个bean;然后通过@Autowiring使用在方法上实现bean之间的依赖注入;最后通过@ComponentScan将所有bean扫入spring应用上下文;当然里面还有许多使用的小细节,要不然很容易出错;

实现如下

2.1 棉被类

/**
 * @Author lsc
 * <p>棉被 </p>
 */
@Component
public class Quilt {

 // 质量
 private String quality;

 public void product(){
  System.out.println("生产与中国");
 }

// 省略set/get
}

2.2 被单类

/**
 * @Author lsc
 * <p> 被单</p>
 */
@Component//相当于@Component("sheet")
public class Sheet {

 // 颜色
 private String color;
 // 长度
 private String length;


 private Quilt quilt;
 // 使用构造器注入方式将Quilt注入到Sheet,你也可以使用set方式;原则上还可以其它方法
 public Sheet(Quilt quilt){
  this.quilt = quilt;
 }
// 省略set/get

}

2.3被单配置类

/**
 * @Author lsc
 * <p>被单配置类 </p>
 */
@Configuration//告诉spring这是一个配置类
@ComponentScan//这边的包是com.zszxz.auto 相当于@ComponentScan(basePackages = {"com.zszxz.auto"})
public class SheetConfig {
}

2.4 测试类

/**
 * @Author lsc
 * <p> </p>
 */
@RunWith(SpringJUnit4ClassRunner.class)//创建spring应用上下文
@ContextConfiguration(classes= SheetConfig.class)//加载配置类
public class SheetTest {

 @Autowired
 Sheet sheet;

 @Test
 public void sheetTest(){
  // 生产与中国
  sheet.getQuilt().product();
 }
}

三 java配置

java配置只需要通过如下注解即可完成,通常使用在引入第三方类时;

  • @Configuration注解:告诉spring这是一个配置类
  • @Bean注解:告诉spring这是一个bean,使用在方法上,默认bean的名称就是方法名也就是前面提到的bean的ID;

思路:@Configuration注解声明的配置类中使用注解@Bean,就实现了java配置;

3.1 棉类

/**
 * @Author lsc
 * <p>棉 </p>
 */
public class Cotton {

 // 质量
 private String quality;

 public void product(){
  System.out.println("cotton生产与中国");
 }
 // 省略set/get
}

3.2 毛毯

/**
 * @Author lsc
 * <p> 毛毯</p>
 */
public class Blanket {

 // 颜色
 private String color;
 // 长度
 private String length;

 // 构造器注入
 private Cotton cotton;
 @Autowired
 public Blanket(Cotton cotton){
  this.cotton = cotton;
 }
 // 省略set/get
} 

3.3 毛毯配置类

/**
 * @Author lsc
 * <p>毛毯配置类 </p>
 */
@Configuration//告诉spring这是一个配置类,spring会扫描其所有配置纳入spring容器
public class BlanketConfig {

 // 将Cotton注入到spring应用上下文
 @Bean
 public Cotton cotton(){
  return new Cotton();
 }

 // 将 Cotton注入到Blanket注入到spring应用上下文
 @Bean
 public Blanket blanket(Cotton cotton){
  return new Blanket(cotton);
 }
}

3.4 测试类

/**
 * @Author lsc
 * <p> </p>
 */
@RunWith(SpringJUnit4ClassRunner.class)//创建spring应用上下文
@ContextConfiguration(classes= BlanketConfig.class)//加载配置类
public class BlanketTest {

 @Autowired
 Blanket blanket;

 @Test
 public void sheetTest(){
  // cotton生产与中国
  blanket.getCotton().product();
 }
}

四 配置结合

使用 @Import 注解能将一个配置类导入另一个配置类, 通常用来合并配置类,下面的示例使用方式更加优雅;

使用示例

/**
 * @Author lsc
 * <p> </p>
 */
@Configuration
@Import({SheetConfig.class, BlanketConfig.class})
public class MergeConfig {
}

测试示例

/**
 * @Author lsc
 * <p> </p>
 */

@RunWith(SpringJUnit4ClassRunner.class)//创建spring应用上下文
@ContextConfiguration(classes= MergeConfig.class)//加载配置类
public class MergeTest {
 @Autowired
 Blanket blanket;

 @Test
 public void sheetTest(){
  // cotton生产与中国
  blanket.getCotton().product();
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Spring基于@Conditional条件化装配bean

    Spring基于@Conditional条件化装配bean

    这篇文章主要介绍了Spring @Conditional条件化装配bean,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • java实现坦克大战游戏

    java实现坦克大战游戏

    这篇文章主要为大家详细介绍了java实现坦克大战游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • MyBatis在Spring环境下的事务管理

    MyBatis在Spring环境下的事务管理

    MyBatis的设计思想很简单,可以看做是对JDBC的一次封装,并提供强大的动态SQL映射功能。这篇文章主要介绍了MyBatis在Spring环境下的事务管理 ,需要的朋友可以参考下
    2019-07-07
  • Java8接口的默认方法

    Java8接口的默认方法

    这篇文章主要为大家介绍了Java8接口的默认方法,还为大家默认方法的多重继承,感兴趣的朋友可以参考一下
    2016-01-01
  • java图片格式转换的三段代码

    java图片格式转换的三段代码

    这篇文章主要分享了java图片格式转换的三段代码,小编查找资料整理了java图片格式转换的三段不同代码,推荐给大家。
    2015-11-11
  • Feign如何使用protobuf的类作为参数调用

    Feign如何使用protobuf的类作为参数调用

    这篇文章主要介绍了Feign如何使用protobuf的类作为参数调用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java中outer标签的用法实例代码

    Java中outer标签的用法实例代码

    这篇文章主要介绍了Java中outer标签的用法,在这里需要大家注意这里的outer并不是关键字,而仅仅是一个标签,本文结合实例代码给大家详细讲解,需要的朋友可以参考下
    2023-01-01
  • Java并发编程深入理解之Synchronized的使用及底层原理详解 上

    Java并发编程深入理解之Synchronized的使用及底层原理详解 上

    在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatile
    2021-09-09
  • SpringCloud引入feign失败或找不到@EnableFeignClients注解问题

    SpringCloud引入feign失败或找不到@EnableFeignClients注解问题

    这篇文章主要介绍了SpringCloud引入feign失败或找不到@EnableFeignClients注解问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java自定义一个变长数组的思路与代码

    Java自定义一个变长数组的思路与代码

    有时我们希望将把数据保存在单个连续的数组中,以便快速、便捷地访问数据,但这需要调整数组大小或者对其扩展,下面这篇文章主要给大家介绍了关于Java自定义一个变长数组的思路与代码,需要的朋友可以参考下
    2022-12-12

最新评论