1 创建模块1
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 5 <modelVersion>4.0.0</modelVersion> 6 7 <parent> 8 <groupId>org.springframework.boot</groupId> 9 <artifactId>spring-boot-starter-parent</artifactId> 10 <version>2.5.3</version> 11 <relativePath/> <!-- lookup parent from repository --> 12 </parent> 13 14 <groupId>com.haifei</groupId> 15 <artifactId>springboot9-enable</artifactId> 16 <version>0.0.1-SNAPSHOT</version> 17 <name>springboot9-enable</name> 18 <description>Demo project for Spring Boot</description> 19 20 <properties> 21 <java.version>1.8</java.version> 22 </properties> 23 24 <dependencies> 25 <dependency> 26 <groupId>org.springframework.boot</groupId> 27 <artifactId>spring-boot-starter</artifactId> 28 </dependency> 29 <dependency> 30 <groupId>org.springframework.boot</groupId> 31 <artifactId>spring-boot-starter-test</artifactId> 32 <scope>test</scope> 33 </dependency> 34 </dependencies> 35 36 <build> 37 <plugins> 38 <plugin> 39 <groupId>org.springframework.boot</groupId> 40 <artifactId>spring-boot-maven-plugin</artifactId> 41 </plugin> 42 </plugins> 43 </build> 44 45 </project>
2 创建模块2
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 5 <modelVersion>4.0.0</modelVersion> 6 7 <parent> 8 <groupId>org.springframework.boot</groupId> 9 <artifactId>spring-boot-starter-parent</artifactId> 10 <version>2.5.3</version> 11 <relativePath/> <!-- lookup parent from repository --> 12 </parent> 13 14 <groupId>com.haifei</groupId> 15 <artifactId>springboot10-enable-other</artifactId> 16 <version>0.0.1-SNAPSHOT</version> 17 <name>springboot10-enable-other</name> 18 <description>Demo project for Spring Boot</description> 19 20 <properties> 21 <java.version>1.8</java.version> 22 </properties> 23 24 <dependencies> 25 <dependency> 26 <groupId>org.springframework.boot</groupId> 27 <artifactId>spring-boot-starter</artifactId> 28 </dependency> 29 </dependencies> 30 31 </project>
3 在模块2中创建Bean类及其配置类
1 package com.haifei.domain; 2 3 public class User { 4 }
1 package com.haifei.config; 2 3 import com.haifei.domain.User; 4 import org.springframework.context.annotation.Bean; 5 import org.springframework.context.annotation.Configuration; 6 7 @Configuration 8 public class UserConfig { 9 10 @Bean 11 public User user(){ 12 return new User(); 13 } 14 15 }
1 pom.xml 2 3 + 4 5 <dependency> 6 <groupId>com.haifei</groupId> 7 <artifactId>springboot10-enable-other</artifactId> 8 <version>0.0.1-SNAPSHOT</version> 9 </dependency>
1 package com.haifei.springboot9enable; 2 3 import com.haifei.config.EnableUser; 4 import com.haifei.config.UserConfig; 5 import com.haifei.domain.User; 6 import org.springframework.boot.SpringApplication; 7 import org.springframework.boot.autoconfigure.SpringBootApplication; 8 import org.springframework.context.ConfigurableApplicationContext; 9 import org.springframework.context.annotation.ComponentScan; 10 import org.springframework.context.annotation.Import; 11 12 import java.util.Map; 13 14 /** 15 * Enable*注解 16 */ 17 //@ComponentScan("com.haifei.config") 18 //@Import(UserConfig.class) 19 @EnableUser 20 21 @SpringBootApplication 22 public class Springboot9EnableApplication { 23 24 public static void main(String[] args) { 25 ConfigurableApplicationContext context = SpringApplication.run(Springboot9EnableApplication.class, args); 26 //获取Bean(由于该Bean是其他模块中的Bean,需要在pom中导入依赖坐标) 27 Object user = context.getBean("user"); 28 System.out.println(user); 29 30 /* 31 不能直接获取bean-user,NoSuchBeanDefinitionException: No bean named 'user' available 32 原因: 33 @SpringBootApplication的元注解@ComponentScan指定扫描范围仅为当前引导类所在包及其子包 34 而这个bean-user在springboot10-enable-other模块中的com.haifei.config包下 35 此类属于springboot9-enable模块中的com.haifei.springboot9enable包下 36 */ 37 38 /* 39 解决方法1:使用@ComponentScan扫描com.itheima.config包 40 在该类上加上注解@ComponentScan,并指定bean的配置类所在包 41 com.haifei.domain.User@517566b 42 */ 43 44 /* 45 解决方法2:可以使用@Import注解,加载类。这些类都会被Spring创建,并放入IOC容器 46 在该类上加上注解@Import,并指定bean的配置类.class 47 com.haifei.domain.User@e8df99a 48 */ 49 50 /* 51 解决方法3:可以对Import注解进行封装 52 在springboot10-enable-other模块中的com.haifei.config包下创建注解@EnableUser,并对其配置方法2中的@Import 53 在该类上加上注解@EnableUser即可 54 com.haifei.domain.User@2f40e5db 55 */ 56 } 57 58 }
5 模块2中自定义的@EnableUser注解
1 package com.haifei.config; 2 3 import org.springframework.context.annotation.Import; 4 5 import java.lang.annotation.*; 6 7 @Target({ElementType.TYPE}) 8 @Retention(RetentionPolicy.RUNTIME) 9 @Documented //以上三个为@Import注解的元注解 10 @Import(UserConfig.class) 11 public @interface EnableUser { 12 }