开发者

SpringBoot自动装配之@Enable深入讲解

SpringBoot中提供了很多Enable开头的注解,这些注解都是用于动态启用某些功能的。而其底层原理是使用@Import注 解导入一些配置类,实现Bean的动态加载。

提问:SpringBoot 工程是否可以直接获取jar包中定义的Bean?

答:不可以

案例:

两个子模块

①子模块要得到

②子模块的User类的bean(这里用编号表示)

方法一:使用@ComponentScan扫描com.itheima.springbooyembal包

SpringBoot自动装配之@Enable深入讲解

package com.enable.entity;
public class User {
}
package com.enable.config;
import com.enable.entity.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class UserConfig {
    @Bean
    public User user(){
        return new User();
    }
}

SpringBoot自动装配之@Enable深入讲解

引入依赖:

        <dependency>
            <groupId>com.enable</groupId>
            <artifactId>springboot-enable-other</artifactId>
            &开发者_JAVA学习lt;version>0.0.1-SNAPSHOT</version>
        </dependency>

使用ComponentScan:

package com.example.demo;
import com.enable.config.EnableUser;
import com.enable.config.UserConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springfjavascriptramework.context.ConfigurableApplicationContelWUdext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Import;
@SpringBootApplication
@ComponentScan("com.enable.config")
pubwww.devze.comlic classelWUd SpringbootApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(SpringbootApplication.class, args);
        Object user = context.getBean("user");
        System.out.println(user);
    }
}

测试如下:

SpringBoot自动装配之@Enable深入讲解

方法二:可以使用@Import注解,加载类,这些类都会被Spring创建,并放入IOC容器。

SpringBoot自动装配之@Enable深入讲解

package com.enable.entity;
public class User {
}
package com.enable.config;
import com.enable.entity.User;
import org.springframework.context.annotation.Bean;
import org.编程springframework.context.annotation.Configuration;
@Configuration
public class UserConfig {
    @Bean
    public User user(){
        return new User();
    }
}

SpringBoot自动装配之@Enable深入讲解

引入依赖

        <dependency>
            <groupId>com.enable</groupId>
            <artifactId>springboot-enable-other</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

使用Import注解

package com.example.demo;
import com.enable.config.EnableUser;
import com.enable.config.UserConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Import;
@SpringBootApplication
@Import(UserConfig.class)
public class SpringbootApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(SpringbootApplication.class, args);
        Object user = context.getBean("user");
        System.out.println(user);
    }
}

测试如下:

SpringBoot自动装配之@Enable深入讲解

方法三:对@Import注解进行封装

SpringBoot自动装配之@Enable深入讲解

自定义@EnableUser注解

package com.enable.config;
import org.springframework.context.annotation.Import;
import Java.lang.annotation.*;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(UserConfig.class)
public @interface EnableUser {
}

自定义配置类

package com.enable.config;
import com.enable.entity.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class UserConfig {
    @Bean
    public User user(){
        return new User();
    }
}

新建实体类:

package com.enable.entity;
public class User {
}

SpringBoot自动装配之@Enable深入讲解

引入依赖

        <dependency>
            <groupId>com.enable</groupId>
            <artifactId>springboot-enable-other</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

使用自定义的注解

package com.example.demo;
import com.enable.config.EnableUser;
import com.enable.config.UserConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Import;
@SpringBootApplication
@EnableUser
public class SpringbootApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(SpringbootApplication.class, args);
        Object user = context.getBean("user");
        System.out.println(user);
    }
}

测试如下:

SpringBoot自动装配之@Enable深入讲解

到此这篇关于SpringBoot自动装配之@Enable深入讲解的文章就介绍到这了,更多相关SpringBoot @Enable内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜