SpringBoot2.0---------------4、SpringBoot底层注解之添加组件

1. @Configuration注解(属于Spring中的注解)


@Configuration注解用于告诉Springboot这是一个配置类,从而取代了配置文件;在Spring中要需要通过配置文件将属性配置到Spring容器中。两者配置方式如下:

1)配置文件方式将User、Pet类注入到Spring容器中:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="user01" class="com.lyy.boot.bean.User">
        <property name="name" value="zhangsan"></property>
        <property name="age" value="18"></property>
    </bean>
    <bean id="cat" class="com.lyy.boot.bean.Pet">
        <property name="name" value="tomcat"></property>
    </bean>
</beans>

2)配置类方式将User、Pet类注入到Spring容器中:

/*
* 1、配置类中使用@Bean注解标注在方法上给容器注册组件,默认也是单实例的
* 2、配置类本身也是组件
* 3、proxyBeanMethods = true,代理bean的方法,该属性默认为true
*      Full(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
       Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】
       组件依赖(个组件之间有调用)必须使用Full模式默认。其他默认是否Lite模式
* */

@Configuration(proxyBeanMethods = true) //告诉springboot这是一个配置类==配置文件
public class Myconfig {
    /*
    * 外部对配置类中的这个组件注册方法调用多少次,获取的都是之前注册容器中的单实例对象
    * */
    @Bean //给容器中添加组件。以方法名作为组件的id,返回类型就是组件类型;返回的值,就是组件在容器中保存的实例
    public User user01(){
        User zhangsan = new User("zhangsan", 18);
        zhangsan.setPet(Tomcat());
        return zhangsan;
    }
    @Bean("tom")
    public Pet Tomcat(){
        return new Pet("luopeixi");
    }
}

@Configuration注解声明该类是一个配置类,注解标于类的上方;对类中的每个方法添加@Bean注解实现对方法的bean对象注册,将其添加到Spring的IOC容器中。

1)在@Configuration注解中:proxyBeanMethods属性用于代理bean的方法,默认值为true;
Full(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】
组件依赖(个组件之间有调用)必须使用Full模式默认;其他默认是否Lite模式。如配置类中的user01所示,该配置调用了配置类中的其他配置,构成了组件依赖,因此必须使用Full模式。

2)@Bean注解中,若不添加属性,则方法名对应bean标签中的id;若在注解后添加属性,所添加的属性为bean标签的id。


2. @Component、@Controller、@Service、@Repository、@Import注解

@Component、@Controller、@Service、@Repository、@Import、@Bean注解的功能都是给容器中注册组件

@Import注解:将制定类型的组件添加到IOC容器中
给容器中注册组件除了@bean,还有其他方法:
@Component代表一个普通组件;
@Controller代表一个控制器组件;
@Service代表一个业务逻辑组件;
@Repository代表一个数据库层组件
这四个组件功能是一致的,只是应用的层级不同。

@ComponentScan注解:根据注解中定义的路径,将符合扫描规则的类装配到Spring容器中

@Import注解:将制定类型的组件添加到IOC容器中

@Import({User.class, DBHelper.class})
@Configuration(proxyBeanMethods = true) //告诉springboot这是一个配置类==配置文件
public class Myconfig {
........
}

该代码中的@Import注解就是将User类、DBHelper类注册到IOC容器中


3. @Conditional注解,该注解下面有许许多多子注解用于各种判定

在这里插入图片描述

@Conditional注解作用:按照一定条件进行判定,将满足条件的组件注入到IOC容器中

@Import({User.class, DBHelper.class})
@ConditionalOnBean(name = "tom")
@Configuration(proxyBeanMethods = true) //告诉springboot这是一个配置类==配置文件
public class Myconfig {

    /*
    * 外部对配置类中的这个组件注册方法调用多少次,获取的都是之前注册容器中的单实例对象
    * */
    
    @Bean //给容器中添加组件。以方法名作为组件的id,返回类型就是组件类型;返回的值,就是组件在容器中保存的实例
    public User user01(){
        User zhangsan = new User("zhangsan", 18);
        zhangsan.setPet(Tomcat());
        return zhangsan;
    }
    @Bean("tom22")
    public Pet Tomcat(){
        return new Pet("luopeixi");
    }
}

以@ConditionalOnBean(name = “tom”)为例,注解放在类上表示容器中若没有tom组件,则该类不会注册到IOC容器中(user01和tom22都不会进行注入);若放在方法上面,表示若容器中没有该组件,则该方法不会注入到容器中

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值