Spring Bean 的加载

主要介绍内容:

  1. Spring 对于加载Bean的优化发展历程
  2. 常用的Spring Bean装载方式
  3. 动态装配Bean:@Enable***模块驱动模式
  4. 外部Bean装配:SPI机制
  5. 条件装配Bean:Condition

Spring Bean装载发展阶段

纵观Spring发展历程,关于Bean的装载,Spring一直在去XML化、简单化。

Spring 发展阶段 Bean 装载发展变化
Spring 1.x阶段 Spring 1.2.0是个分水岭,当时Java 5刚刚发布,业界正兴起使用Annotation的技术风格
Spring自然也提供了支持,比如:@Transactional等注解,但是是当时候,还是以XML配置方式为主
Spring 2.x阶段 在Annotation中添加了@Required@Repository以及AOP相关的@Aspect等注解
同时也提升了XML配置能力,也就是可扩展的XML,比如:Dubbo等开源框架就是基于Spring XML的扩展集成Spring,从而降低了Dubbo使用的门槛。
Spring 2.5版本是个分水岭, 它引入了一些很核心的Annotation
1、@Autowired依赖注入
2、@Qualifier 依赖查找
3、@Component@Service 组件声明
4、@Controller@RequestMappring等spring mvc的注解
尽管Spring 2.x时代提供了不少注解,但仍然没有脱离XML配置驱动,比如<context:annotation-config context:componet-scan/>
Spring 3.x阶段 Spring Framework3.0是个里程碑时代,在功能特性出现非常大的扩展,比如:全面拥抱Java5、以及Spring Annotation。
大量增加注解,实现去XML配置,例如
1、@Configuration@Bean
2、@Component-Scan@Service@Repository@Controller
3、 @Import
4、 @Enable模块驱动功能
5、 同时还引入了Spring SPI机制,加载第三方组件
Spring 4.x阶段 引入@Conditional条件装配
Spring 5.x阶段 引入@Indexed注解

Spring Bean装配方式

基本的Bean装配方式

早期使用Spring我们多是通过XML配置文件方式去装载Bean

<bean id="user" class="com.study.mypriject.model.User">
    <property name="id" value="1"/>
    <property name="userName" value="张三"/>
    <property name="age" value="18"/>
</bean>

从Spring 3.x开始,注解是编程方式逐渐兴起,对于Bean的装载,也逐渐实现去XML化,到现在我们则是使用一些特殊注解的+配置Bean的方式去声明我们需要托管给Spring IOC的Bean:

@Configuration
public class Config {
   
    
  @Bean(name="user")
  public StudentService studentService(){
   
    User user = new User();
    user.setId(1);
    user.setUserName("张三");
    user.setAge(18);
    return user;
  }
}

一些常用的注解:@Component@Controller@Service@Mapper@Repository、@Import…….等等

动态装配Bean:@Enable模式

以上这里几种方式是我们使用Spring时最常用的声明Bean的方式。除此之外,Spring提供了一系列以@Enable开头的注解,就是@Enable**模式,例如:@EnableCaching@EnableAsyne@EnableScheduling@EnableAspectJAutoProxy等等。这些注解本质上是激活Spring的某些管理功能。

@Enable**注解里都包含一个@Import注解,**@Import注解:表示要导入的一个或多个配置类。**提供与Spring XML中的元素等效的功能,它允许导入的对象有:

  • @Configuration类
  • ImportSelector接口的实现
  • ImportBeanDefinitionRegistrar接口的实现
  • 以及常规组件类。

@Import在4.2之前只支持导入配置类,在4.2以后@Import支持导入普通java类并将其声明成一个bean。

@Configuration类

这种方式和我们自定义一个@Configuration配置类的使用方式一样,例如:@EnableScheduling就是声明导入配置类SchedulingConfiguration

指定导入配置类:SchedulingConfiguration.class


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值