增加自动装配核心注解Import相关代码

This commit is contained in:
lisang 2024-06-27 21:37:02 +08:00
parent 0511ecebd8
commit cb251c57e7
10 changed files with 233 additions and 0 deletions

33
.gitignore vendored Normal file
View File

@ -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/

72
pom.xml Normal file
View File

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.shockkid</groupId>
<artifactId>spring</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>shockkid-spring</name>
<description>shockkid-spring</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.6.13</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.shockkid.spring.ShockkidSpringApplication</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -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);
}
}
}

View File

@ -0,0 +1,8 @@
package com.shockkid.spring.ioc;
/**
* @auther lisang
* @date 2024/6/24 22:39
**/
public class CacheService {
}

View File

@ -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 {
}

View File

@ -0,0 +1,8 @@
package com.shockkid.spring.ioc;
/**
* @auther lisang
* @date 2024/6/24 22:39
**/
public class LoggerService {
}

View File

@ -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];
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}
}

View File

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