springBoot容器功能

一、添加组件

1、@Configuration

        1.1基本使用

        新建一个MyConfig类 , 演示@Configuration + @Bean的作用 , 即相当于spring中的beanx.xml, @Bean 就是bean标签

        此方法,默认是单实例, 即获取多少次都是同一个对象 

        自定义名字, 可以@Bean("value")

@Configuration  //@Configuration 作用相当于spring中的beans.xml,表示当前类是一个配置类
public class MyConfig {
    @Bean     //@Bean 作用相当于xml中的bean,表示当前方法创建一个对象,并且放入spring容器
    public Pet pet() {  
    //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中
//实例
        return new Pet();
    }

    @Bean
    public User user() {
        return new User();
    }
}
// 声明Spring Boot应用的主类,springBoot从这里启动
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        // 启动Spring Boot应用
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
        String[] names = run.getBeanDefinitionNames();
        for(String name: names) {
            System.out.println(name);
        }
    }
}

          

1.2 Full模式与Lite模式

      • 配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断
      • 配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式

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

//@Configuration 作用相当于spring中的beans.xml,表示当前类是一个配置类
@Configuration(proxyBeanMethods =true)  //proxyBeanMethods 默认值为true
public class MyConfig {
    @Bean     //@Bean 作用相当于xml中的bean,表示当前方法创建一个对象,并且放入spring容器
    public Pet pet() {
        return new Pet("tomcat");
    }

    @Bean
    public User user01() {
        User user = new User(1,"詹姆思");
        user.setUserPet(pet());
        return new User();
    }
}
// 声明Spring Boot应用的主类,springBoot从这里启动
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        // 启动Spring Boot应用, 返回IOC容器
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);

//      proxyBeanMethods = true
        MyConfig myConfig = run.getBean(MyConfig.class);

        User user3 = myConfig.user01();
        User user4 = myConfig.user01();
        System.out.println(user3.hashCode());
        System.out.println(user4.hashCode());
        System.out.println("user3 等于 user4 吗"+(user3 == user4));
    }
}

 2、@Bean、@Component、@Controller、@Service、@Repository

这几个标签还是跟springMVC中,一样使用。如果返回的是jason 数据, 使用 @RestController

3、@import

 * 4、@Import({User.class, DBHelper.class})
 *      给容器中自动创建出这两个类型的组件、默认组件的名字就是全类名
 *
 *
 *
 */

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

意思是加载类到ioc容器(可以理解为该类在被需要使用的项目中,才被加载 )

4、@Conditional条件装配

        解释:@Conditional意思是在满足该注释的条件下,才被装配。 以下是常见条件

示例:一定要注意先声明user01, 后边在声明@ConditionalOnBean(name="user01") !!

这里有顺序的问题。  (麻蛋的,视频中讲的是错误的,坑了我一个钟)

@Configuration  //proxyBeanMethods 默认值为true
//@ImportResource("classpath:beans.xml")  //引入其他的配置类
public class MyConfig {
    @Bean("user01")
    public User user01() {
        return new User();
    }
    @ConditionalOnBean(name = "user01")  //在满足 user01被装配到ioc容器的 情况下,pet才被创建
    @Bean
    public Pet pet01() {
        return new Pet();
    }
}

5、 @ImportResource

在需要引入spring学习中使用的beans.xml时,使用这个注解。

(一般主要还是用@Configuration+@Bean的形式)

6、 @ConfigurationProperties 

属性配置绑定  , 如果是配置spring的类, ,那么使用@EnableConfigurationProperties+@ConfigurationProperties 

/**
 * 只有在容器中的组件,才会拥有SpringBoot提供的强大功能
 */
@Component
@ConfigurationProperties(prefix = "mycar")
public class Car {

    private String brand;
    private Integer price;

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public Integer getPrice() {
        return price;
    }

    public void setPrice(Integer price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Car{" +
                "brand='" + brand + '\'' +
                ", price=" + price +
                '}';
    }
}

 

相关推荐

  1. springBoot】统一功能处理

    2024-01-09 19:28:05       30 阅读
  2. springBoot】统一功能处理

    2024-01-09 19:28:05       21 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-09 19:28:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-09 19:28:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-09 19:28:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-09 19:28:05       18 阅读

热门阅读

  1. 【MySQL】ANY函数 的巧用(筛选字段 = ANY(语句))

    2024-01-09 19:28:05       39 阅读
  2. 逆流而上-摘抄句子

    2024-01-09 19:28:05       36 阅读
  3. Git命令 本地-远程 简洁步骤

    2024-01-09 19:28:05       31 阅读
  4. React-路由进阶

    2024-01-09 19:28:05       33 阅读