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() { + } + +}