Spring IoC进阶

Bean的定义与获取

在Spring 中定义Bean的方式主要有三种:

1、基于XML配置文件的方式(了解):通常会在配置文件中使用<bean>标签来定义Bean,并设置Bean的属性、依赖关系等信息。

2、基于注解的方式:在Java代码中使用注解来标识Bean,并指定Bean的属性、依赖关系等信息。常用的注解有@Component、@Controller、@Service等。

  • @Component用于标识一个普通的 Bean 类,没有任何特殊的业务含义
  • @Controller 用于标识一个控制器类、@Service 用于标识一个服务类,通常用于业务处理层、@Repository 注解用于标识一个数据访问类
  • 除了这些区别,它们的使用方式是一样的,本质上都是将被注解的类交由 Spring 容器管理,供其他类去使用

3、基于Java Config的方式,在Java配置类中使用@Bean注解来定义Bean。当开发者想要使用的Bean是第三方组件时,不能在源码上标注@Component,可以使用@Bean注解的方式。

  • @Bean注解通常放在方法上,用于指示该方法返回的实例应该被注册为Spring容器中的一个Bean
  • 在方法上使用@Bean注解时,Spring框架会根据该方法的返回类型来自动创建并配置该Bean,同时也会根据方法的名称来为该Bean指定一个默认的名称
  • 可以通过为@Bean添加属性值的方式为Bean定义一个新的名称

总的来说,不同的方式适用于不同的场景。在实际使用过程中,我们可以根据业务需求来选择最适合的方式来定义Bean,也可以兼用多种方式来定义Bean,这些方式也是可以共存的。

并在其中使用@Bean注解方式声明Bean:

 
  1. import org.springframework.context.annotation.Bean;
  2. import org.springframework.context.annotation.ComponentScan;
  3. import org.springframework.context.annotation.Configuration;
  4. import java.util.ArrayList;
  5. @Configuration
  6. @ComponentScan("cn.highedu")
  7. public class BeanDefineConfig {
  8. /**
  9. * 使用@Bean 显示声明Java Bean 组件
  10. * Bean ID 为 names
  11. * @return 创建的JavaBean
  12. */
  13. @Bean
  14. public ArrayList<String> names(){
  15. ArrayList<String> names = new ArrayList<>();
  16. names.add("Tom");
  17. names.add("Jerry");
  18. return names;
  19. }
  20. /**
  21. * 使用 @Bean的属性设置BeanID
  22. * @return 编程语言列表
  23. */
  24. @Bean("languages")
  25. public ArrayList<String> list(){
  26. ArrayList<String> list = new ArrayList<>();
  27. list.add("Java");
  28. list.add("Java Script");
  29. return list;
  30. }
  31. /**
  32. * 使用@Bean 还可以在方法参数中引入其他的Bean
  33. * 本例中引入了名为languages的Bean
  34. * @param languages
  35. * @return
  36. */
  37. @Bean
  38. public ArrayList<String> moreLanguages(ArrayList<String> languages){
  39. ArrayList moreLanguages = new ArrayList(languages);
  40. moreLanguages.add("Python");
  41. moreLanguages.add("SQL");
  42. return moreLanguages;
  43. }
  44. }

然后,在Application类中测试Bean的创建效果:

 
  1. public class Application {
  2. public static void main(String[] args) {
  3. ApplicationContext context =
  4. new AnnotationConfigApplicationContext(BeanDefineConfig.class);
  5. // 通过Spring IOC容器对象获取Bean的对象
  6. ArrayList<String> names = (ArrayList<String>) context.getBean("names");
  7. names.forEach(System.out::println);
  8. System.out.println();
  9. // 通过Spring IOC容器对象获取Bean的对象
  10. ArrayList<String> moreCities = (ArrayList<String>) context.getBean("moreCities");
  11. moreCities.forEach(System.out::println);
  12. }
  13. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值