SpringBoot---容器功能

SpringBoot---容器功能

1、组件添加

首先创建两个bean,一个叫User,一个叫Food。

以前在SSM中需要在配置文件中设置组件和属性注入。现在使用SpringBoot就可以用全代码方式实现整个过程。创建一个配置类,使用@Configuration注解标记,声明类为配置类。

/*
 声明这个类是一个配置类。在里面完成配置文件完成的事情。这样的话,配置类也是项目的一个组件
 经过输出发现他是一个动态代理CGLIB增强后的组件对象
 Configuration注释里面提供了一个方法proxyBeanMethods【代理组件方法】,它的默认值是true
 如果是true,那么在项目内通过调用配置类组件再调用配置方法获取到的对象都是同一个,就是代理对象调用方法
 SpringBoot总会检查容器中有没有这个组件,有就拿出来给你,所以一直都是一个。保持组件单实例         Full模式
 如果修改为false,那么通过配置类组件调用方法得到的对象不是同一个             Lite模式
 */
@Configuration(proxyBeanMethods = true)
public class MyConfig {
​
/*
    使用Bean标签标识配置类方法,返回值就是组件类型,方法名就是组件id,返回的具体内容就是组件在容器中保存的对象。
    想设置别的组件名可以在Bean注解里面设置value属性值就行
 */
    @Bean
    public User user01(){
        return new User("hanfu","woman","123456");
    }
​
    @Bean
    public Food beef(){
        return new Food("beef","99");
    }
​
}

然后来到主程序类MyApplication中,使用返回的run对象调用getBean方法获取IOC容器里面的组件。

经过输出查看,发现了注册的组件和配置组件。都是组件。并且验证了多次获取同一个组件id拿到的是不是同一个组件

在输出配置组件可以发现: com.boot.config.MyConfig$$EnhancerBySpringCGLIB$$7c4c3a02@7a26928a 是一个经过CGLIB增强的代理对象。

//        通过返回的IOC容器,调用方法获取组件
//        SpringBoot里面,IOC容器里面的组件默认是单例的,在其他地方默认调用多少次都是同一个
        User hanfu = run.getBean("user01", User.class);
        User user01 = run.getBean("user01", User.class);
        System.out.println(hanfu==user01);
​
        MyConfig myConfig = run.getBean("myConfig", MyConfig.class);
        System.out.println("myConfig = " + myConfig);

由于发现配置类也是组件,验证通过获取配置组件调用其中的方法得到的对象也是同一个。

Full模式【全配置】:每次调用组件都查看IOC容器有没有,启动的慢

Configuration注释里面提供了一个方法proxyBeanMethods【代理组件方法】,它的默认值是true 如果是true,那么在项目内通过调用配置类组件再调用配置方法获取到的对象都是同一个,就是代理对象调用方法 SpringBoot总会检查容器中有没有这个组件,有就拿出来给你,所以一直都是一个。保持组件单实例

现在user要吃饭,于是引入了food属性,构建了get、set。在配置类中user方法里调用了注册food的方法,user依赖了food。那么proxyBeanMethods值为true时,从容器中获取的组件food和使用user组件调用getfood方法得到的组件对象是同一个。值为false时,就不是同一个了

proxyBeanMethods值为true时就是full模式,在组件之间有依赖关系时,可以使用。能保证拿到的组件对象是同一个。

@Bean
public User user01(){
    User user = new User("hanfu", "woman", "123456");
    user.setFood(beef());
    return user;
}

@Bean
public Food beef(){
    return new Food("beef","99");
}

Lite模式【轻量级配置】:直接跳过查看步骤,启动的快

如果修改为false,那么通过配置类组件调用方法得到的对象不是同一个

proxyBeanMethods值为false是lite模式,如果只是注册组件,组件之间没有依赖关系,使用这个,SpringBoot启动的更快些

2、@Import导入组件

@Import注解使用时在声明后的组件上面,在里面需要的参数是一个class数组。在数组里面写上自己想导入容器的组件名.class。就是调用数组中类的无参构造构建一个对象作为组件,这个数组里面的类可以是自己写的也可以是依赖里面的,有需要加就加

使用

通过结果发现输出的组件是添加时类的全类名。

@Import({User.class, SimpleObjectIdResolver.class})
​
@Configuration(proxyBeanMethods = true)
public class MyConfig {
    
    
  结果
      --------------分割线-------------
s = xlw.com.boot.bean.User
s = user01
s = com.fasterxml.jackson.annotation.SimpleObjectIdResolver

3、@Conditional条件装配

根据注解需要的条件对组件进行操作。

根据注解的名字不难看出注解代表的功能,在SpringBoot底层用了很多这种注解,辅助完成自动装配,使用这些注解判断当前类或方法存在或不存在某个条件。实现组件的装配。

这个注解可以在类和方法上用,在类上面用就是满足条件,类里面的组件就会自动装配进IOC容器里,否则就不在方法上就跟类一样的效果

 

注解的参数可以根据类型或者组件名。添加条件实现效果。

 

使用

在这里使用的注解的作用是,IOC容器中有user这个组件时才会创建下面两个组件,很明显没有这个组件。

@ConditionalOnBean(name = "user")
@Configuration(proxyBeanMethods = true)
public class MyConfig {
​
/*
    使用Bean标签标识配置类方法,返回值就是组件类型,方法名就是组件id,返回的具体内容就是组件在容器中保存的对象。
    想设置别的组件名可以在Bean注解里面设置value属性值就行
 */
    @Bean
    public User user01(){
        User user = new User("hanfu", "woman", "123456");
        user.setFood(beef());
        return user;
    }
​
    @Bean
    public Food beef(){
        return new Food("beef","99");
    }
    
    
    
    主程序里
        //        判断是不是有当前参数名的组件存在
        boolean user01 = run.containsBean("user01");
        boolean beef = run.containsBean("beef");
        System.out.println("有没有组件user01" +user01);
        System.out.println("有没有组件beef " + beef);
    
    
    结果
        有没有组件user01false
        有没有组件beef false
        
        
        将注解更改为@ConditionalOnMissingBean(name = "user"),即IOC容器里面没有组件user就创建这两个组件。
        
        
        结果
        有没有组件user01true
        有没有组件beef true
        
        到这里就不难理解自动装配,如果引入场景就为你创建组件,没有就不加载组件

4、@ImportResource引入配置文件

在很多项目外部依赖里面,还是会有组件在xml配置文件中注册好的,因为很多,不可能自己用的时候重新再写一遍。就能用这个注解@ImportResource引入外部文件,这样配置文件中的组件,也添加到当前的IOC容器中了

使用

@ImportResource("classpath:beans.xml")

在配置文件中

<?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="niuniu" class="xlw.com.boot.bean.User">
    </bean>
​
    <bean id="huahua" class="xlw.com.boot.bean.User"></bean>
</beans>

结果

在当前的IOC里面存在这两个由配置文件注册的组件

      
​
  boolean niuniu = run.containsBean("niuniu");
        System.out.println("niuniu = " + niuniu);
        boolean huahua = run.containsBean("huahua");
        System.out.println("huahua = " + huahua);
        
        niuniu = true
        huahua = true

​

5、配置绑定

使用注解@ConfigurationProperties,能够把bean的属性和SpringBoot核心配置文件application.properties绑定在一起。用于设置属性值。

a)、已经注册为组件

首先要将类进行注册,然后是使用注解@ConfigurationProperties把组件和核心配置文件中指定的字段进行绑定

注解里面有不同的属性代表不同的绑定形式

@Component
@ConfigurationProperties(prefix = "children")
public class Children {
​
    private String name;
    private String age;
​
    public Children() {
    }
​
    public Children(String name, String age) {
        this.name = name;
        this.age = age;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public String getAge() {
        return age;
    }
​
    public void setAge(String age) {
        this.age = age;
    }
​
    @Override
    public String toString() {
        return "Children{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

application.properties中

children.name="haha"
children.age="12"

现在已经把组件和配置文件绑定起来了,在控制器中自动注入,将数据返回致页面

@Autowired
private Children children;
​
@RequestMapping("/children")
public Children test02(){
    return children;
}

最后拿到数据。

b)、没有注册为组件

有需要引入外部组件,将他和核心配置文件绑定。有的类并没有被注册为组件。就能 在配置类中 使用注解

@EnableConfigurationProperties(Children.class) 在参数中加入需要开启绑定功能的类

使用

现在bean并没有被注册为组件

@ConfigurationProperties(prefix = "children")
public class Children {
​
    private String name;
    private String age;
​
    public Children() {
    }
​
    public Children(String name, String age) {
        this.name = name;
        this.age = age;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public String getAge() {
        return age;
    }
​
    public void setAge(String age) {
        this.age = age;
    }
​
    @Override
    public String toString() {
        return "Children{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

在配置类中

在类上面加上这一条语句,注册参数类为组件,同时开启绑定功能

@EnableConfigurationProperties(Children.class)

后面一样能拿到这个绑定后的结果

### 回答1: idea-springboot-projectes是指使用IDEA开发工具构建Spring Boot项目的过程。Spring Boot是一个流行的开源框架,可以帮助Java开发者快速构建高效的微服务应用。IDEA则是一个以Java为基础的集成开发环境,可以提供代码编辑、调试、测试和部署等功能。 在构建Spring Boot项目时,IDEA可以通过自带的Spring Initializr工具或者通过手动配置的方式来进行。Spring Initializr可以自动生成项目基础框架,包括依赖库、项目结构、POM文件等。而手动配置则需要开发者自行添加所需要的依赖库和配置文件。 在项目开发过程中,IDEA可以提供强大的代码提示和自动补全功能,包括快捷键、代码重构、调试等。此外,IDEA还支持各种测试框架和部署方式,方便开发者快速进行测试和部署。 总的来说,使用IDEA开发Spring Boot项目可以提高开发效率和代码质量,并且可以使用各种插件和扩展来增强开发体验。这是一个非常流行的Java开发模式,适用于各种类型的应用程序和系统。 ### 回答2: Idea-SpringBoot-Project是一个使用了Spring Boot框架的项目,有助于Java开发者轻松构建Web应用程序。Spring Boot是一个流行的Java框架,它可以帮助开发者更快地构建更好的应用程序。使用Idea-SpringBoot-Project,开发者可以轻松创建具有高可用性和可扩展性的Java Web应用程序。 Idea-SpringBoot-Project引入了许多方便的功能,如Spring容器管理、数据访问和Web MVC框架等。通过使用Spring Boot,开发者可以在不需要手动配置的情况下快速构建应用程序。而使用Idea作为开发工具,则能帮助开发者更快地编写代码和进行调试。这个项目不仅可以在Windows和Linux平台上运行,还与许多其他大型Java库和框架兼容,如Spring Security和Hibernate等。 总之,Idea-SpringBoot-Project帮助开发者将更多的时间专注于应用程序逻辑和功能,而不是花费时间和精力去手动配置。通过这个项目,开发者可以构建出高性能、高度可用性和可扩展性的Java应用程序。 ### 回答3: idea-springboot-projectes是针对Spring Boot框架的项目管理功能的开发工具集成环境。它提供了一种方便快捷的方式来创建、维护和调试Spring Boot项目。 idea-springboot-projectes使开发人员能够在一个单一的界面中,管理不同的Spring Boot项目,包括应用程序、库和插件。它自动生成项目结构,提供依赖管理,支持代码重构、调试和测试等功能,同时也能够整合其他常用开发工具如Maven、Gradle等,进一步提升开发效率。 通过idea-springboot-projectes,开发人员可以快速创建Spring Boot应用程序。一旦项目创建完成,可以通过IDEA的自动配置机制,无需编写大量的代码即可完成基础设施的搭建和配置。同时,IDEA也提供了许多Spring Boot Starter库,这些库包含了大量常用的功能和组件,帮助开发人员轻松实现各种业务需求。 总之,idea-springboot-projectes是一款非常实用的开发工具,为Spring Boot开发提供了强大的项目管理和开发支持,同时提高了开发效率和代码质量,使得开发人员能够更专注于业务代码的编写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值