From cb251c57e734642fa64d46b87e6e8d92ec1843d5 Mon Sep 17 00:00:00 2001 From: lisang <1186733841@qq.com> Date: Thu, 27 Jun 2024 21:37:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=8A=A8=E8=A3=85?= =?UTF-8?q?=E9=85=8D=E6=A0=B8=E5=BF=83=E6=B3=A8=E8=A7=A3Import=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 33 +++++++++ pom.xml | 72 +++++++++++++++++++ .../spring/ShockkidSpringApplication.java | 18 +++++ .../com/shockkid/spring/ioc/CacheService.java | 8 +++ .../shockkid/spring/ioc/EnableLsaDefine.java | 18 +++++ .../shockkid/spring/ioc/LoggerService.java | 8 +++ .../spring/ioc/LsaDefineImportSelector.java | 23 ++++++ .../ioc/LsaImportBeanDefineRegister.java | 19 +++++ .../java/com/shockkid/spring/ioc/LsaRun.java | 21 ++++++ .../ShockkidSpringApplicationTests.java | 13 ++++ 10 files changed, 233 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/com/shockkid/spring/ShockkidSpringApplication.java create mode 100644 src/main/java/com/shockkid/spring/ioc/CacheService.java create mode 100644 src/main/java/com/shockkid/spring/ioc/EnableLsaDefine.java create mode 100644 src/main/java/com/shockkid/spring/ioc/LoggerService.java create mode 100644 src/main/java/com/shockkid/spring/ioc/LsaDefineImportSelector.java create mode 100644 src/main/java/com/shockkid/spring/ioc/LsaImportBeanDefineRegister.java create mode 100644 src/main/java/com/shockkid/spring/ioc/LsaRun.java create mode 100644 src/test/java/com/shockkid/spring/ShockkidSpringApplicationTests.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..c3dbcd0 --- /dev/null +++ b/pom.xml @@ -0,0 +1,72 @@ + + + 4.0.0 + com.shockkid + spring + 0.0.1-SNAPSHOT + shockkid-spring + shockkid-spring + + 1.8 + UTF-8 + UTF-8 + 2.6.13 + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + com.shockkid.spring.ShockkidSpringApplication + true + + + + repackage + + repackage + + + + + + + + diff --git a/src/main/java/com/shockkid/spring/ShockkidSpringApplication.java b/src/main/java/com/shockkid/spring/ShockkidSpringApplication.java new file mode 100644 index 0000000..36a0400 --- /dev/null +++ b/src/main/java/com/shockkid/spring/ShockkidSpringApplication.java @@ -0,0 +1,18 @@ +package com.shockkid.spring; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ApplicationContext; + +@SpringBootApplication +public class ShockkidSpringApplication { + + public static void main(String[] args) { + ApplicationContext ac = SpringApplication.run(ShockkidSpringApplication.class, args); + String[] beanDefinitionNames = ac.getBeanDefinitionNames(); + for (String beanName : beanDefinitionNames) { + System.out.println(beanName); + } + } + +} diff --git a/src/main/java/com/shockkid/spring/ioc/CacheService.java b/src/main/java/com/shockkid/spring/ioc/CacheService.java new file mode 100644 index 0000000..4ea8345 --- /dev/null +++ b/src/main/java/com/shockkid/spring/ioc/CacheService.java @@ -0,0 +1,8 @@ +package com.shockkid.spring.ioc; + +/** + * @auther lisang + * @date 2024/6/24 22:39 + **/ +public class CacheService { +} diff --git a/src/main/java/com/shockkid/spring/ioc/EnableLsaDefine.java b/src/main/java/com/shockkid/spring/ioc/EnableLsaDefine.java new file mode 100644 index 0000000..afb5e34 --- /dev/null +++ b/src/main/java/com/shockkid/spring/ioc/EnableLsaDefine.java @@ -0,0 +1,18 @@ +package com.shockkid.spring.ioc; + +import org.springframework.context.annotation.Import; + +import java.lang.annotation.*; + +/** + * @auther lisang + * @date 2024/6/24 21:52 + **/ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +//@Import(LsaDefineImportSelector.class) +@Import(LsaImportBeanDefineRegister.class) +public @interface EnableLsaDefine { +} diff --git a/src/main/java/com/shockkid/spring/ioc/LoggerService.java b/src/main/java/com/shockkid/spring/ioc/LoggerService.java new file mode 100644 index 0000000..14a1b7d --- /dev/null +++ b/src/main/java/com/shockkid/spring/ioc/LoggerService.java @@ -0,0 +1,8 @@ +package com.shockkid.spring.ioc; + +/** + * @auther lisang + * @date 2024/6/24 22:39 + **/ +public class LoggerService { +} diff --git a/src/main/java/com/shockkid/spring/ioc/LsaDefineImportSelector.java b/src/main/java/com/shockkid/spring/ioc/LsaDefineImportSelector.java new file mode 100644 index 0000000..4bd1f4b --- /dev/null +++ b/src/main/java/com/shockkid/spring/ioc/LsaDefineImportSelector.java @@ -0,0 +1,23 @@ +package com.shockkid.spring.ioc; + +import org.springframework.context.annotation.ImportSelector; +import org.springframework.core.type.AnnotationMetadata; + +/** + * @auther lisang + * @date 2024/6/24 21:50 + **/ +public class LsaDefineImportSelector implements ImportSelector { + /** + * + * @param importingClassMetadata + * @return + * IoC要管理的Bean的路径数组 + */ + @Override + public String[] selectImports(AnnotationMetadata importingClassMetadata) { + // 添加对应的业务逻辑 + return new String[]{LoggerService.class.getName(),CacheService.class.getName()}; + //return new String[0]; + } +} diff --git a/src/main/java/com/shockkid/spring/ioc/LsaImportBeanDefineRegister.java b/src/main/java/com/shockkid/spring/ioc/LsaImportBeanDefineRegister.java new file mode 100644 index 0000000..ec1ee12 --- /dev/null +++ b/src/main/java/com/shockkid/spring/ioc/LsaImportBeanDefineRegister.java @@ -0,0 +1,19 @@ +package com.shockkid.spring.ioc; + +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.beans.factory.support.RootBeanDefinition; +import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; +import org.springframework.core.type.AnnotationMetadata; + +/** + * @auther lisang + * @date 2024/6/24 22:41 + **/ +public class LsaImportBeanDefineRegister implements ImportBeanDefinitionRegistrar { + @Override + public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { + // 先将要管理的Bean封装为一个RootBeanDefinition + RootBeanDefinition cache = new RootBeanDefinition(CacheService.class); + registry.registerBeanDefinition("myCache", cache); + } +} diff --git a/src/main/java/com/shockkid/spring/ioc/LsaRun.java b/src/main/java/com/shockkid/spring/ioc/LsaRun.java new file mode 100644 index 0000000..f508d56 --- /dev/null +++ b/src/main/java/com/shockkid/spring/ioc/LsaRun.java @@ -0,0 +1,21 @@ +package com.shockkid.spring.ioc; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.Configuration; + +/** + * @auther lisang + * @date 2024/6/24 21:54 + **/ +@EnableLsaDefine +@Configuration +public class LsaRun { + public static void main(String[] args) { + ApplicationContext ac = new AnnotationConfigApplicationContext(LsaRun.class); + String[] beanDefinitionNames = ac.getBeanDefinitionNames(); + for (String beanName : beanDefinitionNames) { + System.out.println(beanName); + } + } +} diff --git a/src/test/java/com/shockkid/spring/ShockkidSpringApplicationTests.java b/src/test/java/com/shockkid/spring/ShockkidSpringApplicationTests.java new file mode 100644 index 0000000..58c7899 --- /dev/null +++ b/src/test/java/com/shockkid/spring/ShockkidSpringApplicationTests.java @@ -0,0 +1,13 @@ +package com.shockkid.spring; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class ShockkidSpringApplicationTests { + + @Test + void contextLoads() { + } + +}