commit 9620307996bd784fd1467a7d99e62a93ee0e7065 Author: xuchengsheng Date: Fri Sep 15 14:44:51 2023 +0800 init 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..f983d4d --- /dev/null +++ b/pom.xml @@ -0,0 +1,65 @@ + + + + 4.0.0 + pom + com.xcs.spring + spring-reading + 0.0.1-SNAPSHOT + spring-reading + spring-reading + + + 11 + 11 + 11 + 5.3.10 + + + + spring-interface-beanFactoryPostProcessor + spring-interface-beanPostProcessor + spring-interface-environment + spring-interface-applicationListener + spring-interface-importSelector + spring-interface-importBeanDefinitionRegistrar + spring-interface-resource + spring-interface-embeddedValueResolver + spring-interface-factoryBean + spring-annotation-configuration + spring-annotation-bean + spring-annotation-import + spring-annotation-propertySource + spring-annotation-componentScan + + + + + org.springframework + spring-context + ${spring.version} + + + org.springframework + spring-aspects + ${spring.version} + + + org.springframework + spring-aop + ${spring.version} + + + org.springframework + spring-tx + ${spring.version} + + + org.springframework + spring-webmvc + ${spring.version} + + + + diff --git a/spring-annotation-bean/pom.xml b/spring-annotation-bean/pom.xml new file mode 100644 index 0000000..d6eec43 --- /dev/null +++ b/spring-annotation-bean/pom.xml @@ -0,0 +1,14 @@ + + + + spring-reading + com.xcs.spring + 0.0.1-SNAPSHOT + + + 4.0.0 + spring-annotation-bean + + \ No newline at end of file diff --git a/spring-annotation-bean/src/main/java/com/xcs/spring/BeanApplication.java b/spring-annotation-bean/src/main/java/com/xcs/spring/BeanApplication.java new file mode 100644 index 0000000..9e2f98a --- /dev/null +++ b/spring-annotation-bean/src/main/java/com/xcs/spring/BeanApplication.java @@ -0,0 +1,19 @@ +package com.xcs.spring; + +import com.xcs.spring.config.MyBeanConfig; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +/** + * @author xcs + * @date 2023年08月07日 16时21分 + **/ +public class BeanApplication { + + public static void main(String[] args) { + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyBeanConfig.class); + for (String beanDefinitionName : context.getBeanDefinitionNames()) { + System.out.println("beanName = " + beanDefinitionName); + } + context.close(); + } +} diff --git a/spring-annotation-bean/src/main/java/com/xcs/spring/bean/A.java b/spring-annotation-bean/src/main/java/com/xcs/spring/bean/A.java new file mode 100644 index 0000000..32d132d --- /dev/null +++ b/spring-annotation-bean/src/main/java/com/xcs/spring/bean/A.java @@ -0,0 +1,9 @@ +package com.xcs.spring.bean; + +/** + * @author 林雷 + * @date 2023年08月23日 15时30分 + **/ +public class A { + +} diff --git a/spring-annotation-bean/src/main/java/com/xcs/spring/bean/B.java b/spring-annotation-bean/src/main/java/com/xcs/spring/bean/B.java new file mode 100644 index 0000000..896f265 --- /dev/null +++ b/spring-annotation-bean/src/main/java/com/xcs/spring/bean/B.java @@ -0,0 +1,14 @@ +package com.xcs.spring.bean; + +/** + * @author 林雷 + * @date 2023年08月23日 15时30分 + **/ +public class B { + + private A a; + + public B(A a) { + this.a = a; + } +} diff --git a/spring-annotation-bean/src/main/java/com/xcs/spring/bean/MyBean.java b/spring-annotation-bean/src/main/java/com/xcs/spring/bean/MyBean.java new file mode 100644 index 0000000..34a97c3 --- /dev/null +++ b/spring-annotation-bean/src/main/java/com/xcs/spring/bean/MyBean.java @@ -0,0 +1,22 @@ +package com.xcs.spring.bean; + +/** + * @author 林雷 + * @date 2023年08月25日 10时22分 + **/ +public class MyBean { + + private String name; + + public MyBean(String name) { + this.name = name; + } + + public void init(){ + System.out.println("MyBean.init"); + } + + public void destroy(){ + System.out.println("MyBean.destroy"); + } +} diff --git a/spring-annotation-bean/src/main/java/com/xcs/spring/config/MyBeanConfig.java b/spring-annotation-bean/src/main/java/com/xcs/spring/config/MyBeanConfig.java new file mode 100644 index 0000000..a8ba171 --- /dev/null +++ b/spring-annotation-bean/src/main/java/com/xcs/spring/config/MyBeanConfig.java @@ -0,0 +1,30 @@ +package com.xcs.spring.config; + +import com.xcs.spring.bean.A; +import com.xcs.spring.bean.B; +import com.xcs.spring.bean.MyBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author xcs + * @date 2023年08月07日 16时25分 + **/ +@Configuration +public class MyBeanConfig { + + @Bean + public A a(){ + return new A(); + } + + @Bean + public B b(){ + return new B(a()); + } + + @Bean(initMethod = "init",destroyMethod = "destroy") + public MyBean myBean(){ + return new MyBean("xcs"); + } +} \ No newline at end of file diff --git a/spring-annotation-bean/src/main/java/com/xcs/spring/service/MyService1.java b/spring-annotation-bean/src/main/java/com/xcs/spring/service/MyService1.java new file mode 100644 index 0000000..7c45e8b --- /dev/null +++ b/spring-annotation-bean/src/main/java/com/xcs/spring/service/MyService1.java @@ -0,0 +1,11 @@ +package com.xcs.spring.service; + +import org.springframework.stereotype.Service; + +/** + * @author 林雷 + * @date 2023年08月14日 17时14分 + **/ +@Service +public class MyService1 { +} diff --git a/spring-annotation-bean/src/main/java/com/xcs/spring/service/MyService2.java b/spring-annotation-bean/src/main/java/com/xcs/spring/service/MyService2.java new file mode 100644 index 0000000..299cf49 --- /dev/null +++ b/spring-annotation-bean/src/main/java/com/xcs/spring/service/MyService2.java @@ -0,0 +1,12 @@ +package com.xcs.spring.service; + +import org.springframework.stereotype.Service; + +/** + * @author 林雷 + * @date 2023年08月14日 17时14分 + **/ +@Service +public class MyService2 { + +} diff --git a/spring-annotation-componentScan/pom.xml b/spring-annotation-componentScan/pom.xml new file mode 100644 index 0000000..5009752 --- /dev/null +++ b/spring-annotation-componentScan/pom.xml @@ -0,0 +1,15 @@ + + + + spring-reading + com.xcs.spring + 0.0.1-SNAPSHOT + + + 4.0.0 + + spring-annotation-componentScan + + \ No newline at end of file diff --git a/spring-annotation-componentScan/src/main/java/com/xcs/spring/ComponentScanApplication.java b/spring-annotation-componentScan/src/main/java/com/xcs/spring/ComponentScanApplication.java new file mode 100644 index 0000000..afc12ef --- /dev/null +++ b/spring-annotation-componentScan/src/main/java/com/xcs/spring/ComponentScanApplication.java @@ -0,0 +1,18 @@ +package com.xcs.spring; + +import com.xcs.spring.config.MyComponentScanConfig; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +/** + * @author xcs + * @date 2023年08月07日 16时21分 + **/ +public class ComponentScanApplication { + + public static void main(String[] args) { + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyComponentScanConfig.class); + for (String beanDefinitionName : context.getBeanDefinitionNames()) { + System.out.println("beanName = " + beanDefinitionName); + } + } +} diff --git a/spring-annotation-componentScan/src/main/java/com/xcs/spring/MyPackageMarker.java b/spring-annotation-componentScan/src/main/java/com/xcs/spring/MyPackageMarker.java new file mode 100644 index 0000000..23f451f --- /dev/null +++ b/spring-annotation-componentScan/src/main/java/com/xcs/spring/MyPackageMarker.java @@ -0,0 +1,8 @@ +package com.xcs.spring; + +/** + * @author 林雷 + * @date 2023年08月14日 15时06分 + **/ +public class MyPackageMarker { +} diff --git a/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyAnnotation.java b/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyAnnotation.java new file mode 100644 index 0000000..4127661 --- /dev/null +++ b/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyAnnotation.java @@ -0,0 +1,12 @@ +package com.xcs.spring.component; + +import org.springframework.stereotype.Component; + +import java.lang.annotation.*; + +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Component +public @interface MyAnnotation { +} diff --git a/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyComponent.java b/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyComponent.java new file mode 100644 index 0000000..f9602a1 --- /dev/null +++ b/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyComponent.java @@ -0,0 +1,12 @@ +package com.xcs.spring.component; + +import org.springframework.stereotype.Component; + +/** + * @author 林雷 + * @date 2023年08月15日 14时13分 + **/ +@Component +public class MyComponent implements MyInterface { + +} diff --git a/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyComponentAnnotation.java b/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyComponentAnnotation.java new file mode 100644 index 0000000..b112333 --- /dev/null +++ b/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyComponentAnnotation.java @@ -0,0 +1,9 @@ +package com.xcs.spring.component; + +/** + * @author 林雷 + * @date 2023年08月16日 15时46分 + **/ +@MyAnnotation +public class MyComponentAnnotation { +} diff --git a/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyComponentAspectJ.java b/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyComponentAspectJ.java new file mode 100644 index 0000000..0ac1aff --- /dev/null +++ b/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyComponentAspectJ.java @@ -0,0 +1,12 @@ +package com.xcs.spring.component; + +import org.springframework.stereotype.Component; + +/** + * @author 林雷 + * @date 2023年08月15日 15时04分 + **/ +@Component +public class MyComponentAspectJ { + +} diff --git a/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyComponentCustom.java b/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyComponentCustom.java new file mode 100644 index 0000000..f46eeb7 --- /dev/null +++ b/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyComponentCustom.java @@ -0,0 +1,12 @@ +package com.xcs.spring.component; + +import org.springframework.stereotype.Component; + +/** + * @author 林雷 + * @date 2023年08月15日 14时15分 + **/ +@Component +public class MyComponentCustom { + +} diff --git a/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyComponentRegex.java b/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyComponentRegex.java new file mode 100644 index 0000000..da85a38 --- /dev/null +++ b/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyComponentRegex.java @@ -0,0 +1,11 @@ +package com.xcs.spring.component; + +import org.springframework.stereotype.Component; + +/** + * @author 林雷 + * @date 2023年08月15日 14时59分 + **/ +@Component +public class MyComponentRegex { +} diff --git a/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyInterface.java b/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyInterface.java new file mode 100644 index 0000000..bc0e6c9 --- /dev/null +++ b/spring-annotation-componentScan/src/main/java/com/xcs/spring/component/MyInterface.java @@ -0,0 +1,8 @@ +package com.xcs.spring.component; + +/** + * @author 林雷 + * @date 2023年08月15日 14时12分 + **/ +public interface MyInterface { +} diff --git a/spring-annotation-componentScan/src/main/java/com/xcs/spring/config/MyComponentScanConfig.java b/spring-annotation-componentScan/src/main/java/com/xcs/spring/config/MyComponentScanConfig.java new file mode 100644 index 0000000..ee620a2 --- /dev/null +++ b/spring-annotation-componentScan/src/main/java/com/xcs/spring/config/MyComponentScanConfig.java @@ -0,0 +1,43 @@ +package com.xcs.spring.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +/** + * @author xcs + * @date 2023年08月07日 16时25分 + **/ +@Configuration +@ComponentScan(basePackages = "com.xcs.spring") +// includeFilters 基于ANNOTATION过滤 +// @ComponentScan(includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Service.class), useDefaultFilters = false) + +// includeFilters 基于ASSIGNABLE_TYPE过滤 +// @ComponentScan(includeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = MyInterface.class), useDefaultFilters = false) + +// includeFilters 基于CUSTOM过滤 +// @ComponentScan(includeFilters = @ComponentScan.Filter(type = FilterType.CUSTOM, classes = MyCustomTypeFilter.class), useDefaultFilters = false) + +// includeFilters 基于REGEX过滤 +// @ComponentScan(includeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = ".*ComponentRegex"), useDefaultFilters = false) + +// includeFilters 基于AspectJ过滤 +// @ComponentScan(includeFilters = @ComponentScan.Filter(type = FilterType.ASPECTJ, pattern = "*..*AspectJ"), useDefaultFilters = false) + +// excludeFilters 基于ANNOTATION过滤 +// @ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Service.class)) + +// excludeFilters 基于ASSIGNABLE_TYPE过滤 +// @ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = MyInterface.class)) + +// excludeFilters 基于CUSTOM过滤 +// @ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.CUSTOM, classes = MyCustomTypeFilter.class)) + +// excludeFilters 基于REGEX过滤 +// @ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = ".*ComponentRegex")) + +// excludeFilters 基于AspectJ过滤 +// @ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ASPECTJ, pattern = "*..*AspectJ")) +public class MyComponentScanConfig { + +} diff --git a/spring-annotation-componentScan/src/main/java/com/xcs/spring/config/MyCustomBeanNameGenerator.java b/spring-annotation-componentScan/src/main/java/com/xcs/spring/config/MyCustomBeanNameGenerator.java new file mode 100644 index 0000000..ec2febb --- /dev/null +++ b/spring-annotation-componentScan/src/main/java/com/xcs/spring/config/MyCustomBeanNameGenerator.java @@ -0,0 +1,24 @@ +package com.xcs.spring.config; + +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.beans.factory.support.BeanNameGenerator; + +/** + * @author 林雷 + * @date 2023年08月14日 15时38分 + **/ +public class MyCustomBeanNameGenerator implements BeanNameGenerator { + + @Override + public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) { + // 此处只是一个示例,我们可以根据自己的实际情况生成Bean名称 + String originalName = definition.getBeanClassName(); + if (originalName != null) { + return "_这是我自定义Bean名称的前缀_" + originalName; + } else { + // 你可以选择其他的逻辑处理或者抛出异常 + throw new IllegalArgumentException("Bean class name is null"); + } + } +} diff --git a/spring-annotation-componentScan/src/main/java/com/xcs/spring/config/MyCustomScopeMetadataResolver.java b/spring-annotation-componentScan/src/main/java/com/xcs/spring/config/MyCustomScopeMetadataResolver.java new file mode 100644 index 0000000..82809ce --- /dev/null +++ b/spring-annotation-componentScan/src/main/java/com/xcs/spring/config/MyCustomScopeMetadataResolver.java @@ -0,0 +1,31 @@ +package com.xcs.spring.config; + +import com.xcs.spring.service.MyService1; +import com.xcs.spring.service.MyService2; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.AnnotationScopeMetadataResolver; +import org.springframework.context.annotation.ScopeMetadata; +import org.springframework.context.annotation.ScopeMetadataResolver; + +/** + * @author 林雷 + * @date 2023年08月14日 17时07分 + **/ +public class MyCustomScopeMetadataResolver implements ScopeMetadataResolver { + + private AnnotationScopeMetadataResolver resolver = new AnnotationScopeMetadataResolver(); + + @Override + public ScopeMetadata resolveScopeMetadata(BeanDefinition definition) { + ScopeMetadata scopeMetadata = new ScopeMetadata(); + + // 检查Bean的名称是否为'MyService1'或'MyService2',并据此设置相应的作用域。 + if (MyService1.class.getName().equals(definition.getBeanClassName()) || + MyService2.class.getName().equals(definition.getBeanClassName())) { + scopeMetadata.setScopeName(BeanDefinition.SCOPE_PROTOTYPE); + return scopeMetadata; + } + // 再次交由AnnotationScopeMetadataResolver解析否则会导致@Scope失效 + return resolver.resolveScopeMetadata(definition); + } +} diff --git a/spring-annotation-componentScan/src/main/java/com/xcs/spring/controller/MyController1.java b/spring-annotation-componentScan/src/main/java/com/xcs/spring/controller/MyController1.java new file mode 100644 index 0000000..962dee4 --- /dev/null +++ b/spring-annotation-componentScan/src/main/java/com/xcs/spring/controller/MyController1.java @@ -0,0 +1,11 @@ +package com.xcs.spring.controller; + +import org.springframework.stereotype.Controller; + +/** + * @author 林雷 + * @date 2023年08月14日 17时14分 + **/ +@Controller +public class MyController1 { +} diff --git a/spring-annotation-componentScan/src/main/java/com/xcs/spring/controller/MyController2.java b/spring-annotation-componentScan/src/main/java/com/xcs/spring/controller/MyController2.java new file mode 100644 index 0000000..1cd89e2 --- /dev/null +++ b/spring-annotation-componentScan/src/main/java/com/xcs/spring/controller/MyController2.java @@ -0,0 +1,11 @@ +package com.xcs.spring.controller; + +import org.springframework.stereotype.Controller; + +/** + * @author 林雷 + * @date 2023年08月14日 17时14分 + **/ +@Controller +public class MyController2 { +} diff --git a/spring-annotation-componentScan/src/main/java/com/xcs/spring/filter/MyCustomTypeFilter.java b/spring-annotation-componentScan/src/main/java/com/xcs/spring/filter/MyCustomTypeFilter.java new file mode 100644 index 0000000..82c5f2c --- /dev/null +++ b/spring-annotation-componentScan/src/main/java/com/xcs/spring/filter/MyCustomTypeFilter.java @@ -0,0 +1,18 @@ +package com.xcs.spring.filter; + +import org.springframework.core.type.classreading.MetadataReader; +import org.springframework.core.type.classreading.MetadataReaderFactory; +import org.springframework.core.type.filter.TypeFilter; + +import java.io.IOException; + +/** + * @author 林雷 + * @date 2023年08月15日 14时15分 + **/ +public class MyCustomTypeFilter implements TypeFilter { + @Override + public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException { + return metadataReader.getClassMetadata().getClassName().endsWith("Custom"); + } +} diff --git a/spring-annotation-componentScan/src/main/java/com/xcs/spring/service/MyService1.java b/spring-annotation-componentScan/src/main/java/com/xcs/spring/service/MyService1.java new file mode 100644 index 0000000..7c45e8b --- /dev/null +++ b/spring-annotation-componentScan/src/main/java/com/xcs/spring/service/MyService1.java @@ -0,0 +1,11 @@ +package com.xcs.spring.service; + +import org.springframework.stereotype.Service; + +/** + * @author 林雷 + * @date 2023年08月14日 17时14分 + **/ +@Service +public class MyService1 { +} diff --git a/spring-annotation-componentScan/src/main/java/com/xcs/spring/service/MyService2.java b/spring-annotation-componentScan/src/main/java/com/xcs/spring/service/MyService2.java new file mode 100644 index 0000000..4a756dc --- /dev/null +++ b/spring-annotation-componentScan/src/main/java/com/xcs/spring/service/MyService2.java @@ -0,0 +1,11 @@ +package com.xcs.spring.service; + +import org.springframework.stereotype.Service; + +/** + * @author 林雷 + * @date 2023年08月14日 17时14分 + **/ +@Service +public class MyService2 { +} diff --git a/spring-annotation-configuration/pom.xml b/spring-annotation-configuration/pom.xml new file mode 100644 index 0000000..0d09b70 --- /dev/null +++ b/spring-annotation-configuration/pom.xml @@ -0,0 +1,14 @@ + + + + spring-reading + com.xcs.spring + 0.0.1-SNAPSHOT + + + 4.0.0 + spring-annotation-configuration + + \ No newline at end of file diff --git a/spring-annotation-configuration/src/main/java/com/xcs/spring/ConfigurationApplication.java b/spring-annotation-configuration/src/main/java/com/xcs/spring/ConfigurationApplication.java new file mode 100644 index 0000000..e65e108 --- /dev/null +++ b/spring-annotation-configuration/src/main/java/com/xcs/spring/ConfigurationApplication.java @@ -0,0 +1,28 @@ +package com.xcs.spring; + +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import java.io.IOException; + +/** + * @author xcs + * @date 2023年08月07日 16时21分 + **/ +public class ConfigurationApplication { + + public static void main(String[] args) { + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfiguration.class); + MyConfiguration configuration = context.getBean(MyConfiguration.class); + + System.out.println(configuration.myBean()); + System.out.println(configuration.myBean()); + + System.out.println("MyConfiguration = " + configuration.getClass().getName()); + + try { + System.in.read(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/spring-annotation-configuration/src/main/java/com/xcs/spring/MyConfiguration.java b/spring-annotation-configuration/src/main/java/com/xcs/spring/MyConfiguration.java new file mode 100644 index 0000000..a191a57 --- /dev/null +++ b/spring-annotation-configuration/src/main/java/com/xcs/spring/MyConfiguration.java @@ -0,0 +1,18 @@ +package com.xcs.spring; + +import com.xcs.spring.bean.MyBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author xcs + * @date 2023年08月07日 16时25分 + **/ +@Configuration +public class MyConfiguration { + + @Bean + public MyBean myBean(){ + return new MyBean(); + } +} diff --git a/spring-annotation-configuration/src/main/java/com/xcs/spring/bean/MyBean.java b/spring-annotation-configuration/src/main/java/com/xcs/spring/bean/MyBean.java new file mode 100644 index 0000000..4585927 --- /dev/null +++ b/spring-annotation-configuration/src/main/java/com/xcs/spring/bean/MyBean.java @@ -0,0 +1,18 @@ +package com.xcs.spring.bean; + +/** + * @author xcs + * @date 2023年08月07日 16时26分 + **/ +public class MyBean { + + private String beanId; + + public String getBeanId() { + return beanId; + } + + public void setBeanId(String beanId) { + this.beanId = beanId; + } +} diff --git a/spring-annotation-import/pom.xml b/spring-annotation-import/pom.xml new file mode 100644 index 0000000..ee9173f --- /dev/null +++ b/spring-annotation-import/pom.xml @@ -0,0 +1,14 @@ + + + + spring-reading + com.xcs.spring + 0.0.1-SNAPSHOT + + + 4.0.0 + spring-annotation-import + + \ No newline at end of file diff --git a/spring-annotation-import/src/main/java/com/xcs/spring/ImportApplication.java b/spring-annotation-import/src/main/java/com/xcs/spring/ImportApplication.java new file mode 100644 index 0000000..903425d --- /dev/null +++ b/spring-annotation-import/src/main/java/com/xcs/spring/ImportApplication.java @@ -0,0 +1,18 @@ +package com.xcs.spring; + +import com.xcs.spring.config.MyConfig; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +/** + * @author xcs + * @date 2023年08月07日 16时21分 + **/ +public class ImportApplication { + + public static void main(String[] args) { + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class); + for (String beanDefinitionName : context.getBeanDefinitionNames()) { + System.out.println("beanName = " + beanDefinitionName); + } + } +} diff --git a/spring-annotation-import/src/main/java/com/xcs/spring/bean/MyBean.java b/spring-annotation-import/src/main/java/com/xcs/spring/bean/MyBean.java new file mode 100644 index 0000000..35dadb6 --- /dev/null +++ b/spring-annotation-import/src/main/java/com/xcs/spring/bean/MyBean.java @@ -0,0 +1,21 @@ +package com.xcs.spring.bean; + +/** + * @author 林雷 + * @date 2023年09月11日 11时13分 + **/ +public class MyBean { + + private String describe; + + public MyBean(String describe) { + this.describe = describe; + } + + @Override + public String toString() { + return "MyBean{" + + "describe='" + describe + '\'' + + '}'; + } +} diff --git a/spring-annotation-import/src/main/java/com/xcs/spring/bean/MyBeanA.java b/spring-annotation-import/src/main/java/com/xcs/spring/bean/MyBeanA.java new file mode 100644 index 0000000..cec752d --- /dev/null +++ b/spring-annotation-import/src/main/java/com/xcs/spring/bean/MyBeanA.java @@ -0,0 +1,8 @@ +package com.xcs.spring.bean; + +/** + * @author 林雷 + * @date 2023年08月28日 11时13分 + **/ +public class MyBeanA { +} diff --git a/spring-annotation-import/src/main/java/com/xcs/spring/bean/MyBeanB.java b/spring-annotation-import/src/main/java/com/xcs/spring/bean/MyBeanB.java new file mode 100644 index 0000000..373ba6f --- /dev/null +++ b/spring-annotation-import/src/main/java/com/xcs/spring/bean/MyBeanB.java @@ -0,0 +1,8 @@ +package com.xcs.spring.bean; + +/** + * @author 林雷 + * @date 2023年08月28日 11时13分 + **/ +public class MyBeanB { +} diff --git a/spring-annotation-import/src/main/java/com/xcs/spring/bean/MyBeanC.java b/spring-annotation-import/src/main/java/com/xcs/spring/bean/MyBeanC.java new file mode 100644 index 0000000..492bfde --- /dev/null +++ b/spring-annotation-import/src/main/java/com/xcs/spring/bean/MyBeanC.java @@ -0,0 +1,8 @@ +package com.xcs.spring.bean; + +/** + * @author 林雷 + * @date 2023年08月28日 11时13分 + **/ +public class MyBeanC { +} diff --git a/spring-annotation-import/src/main/java/com/xcs/spring/bean/MyBeanD.java b/spring-annotation-import/src/main/java/com/xcs/spring/bean/MyBeanD.java new file mode 100644 index 0000000..73faec0 --- /dev/null +++ b/spring-annotation-import/src/main/java/com/xcs/spring/bean/MyBeanD.java @@ -0,0 +1,8 @@ +package com.xcs.spring.bean; + +/** + * @author 林雷 + * @date 2023年08月28日 11时13分 + **/ +public class MyBeanD { +} diff --git a/spring-annotation-import/src/main/java/com/xcs/spring/bean/User.java b/spring-annotation-import/src/main/java/com/xcs/spring/bean/User.java new file mode 100644 index 0000000..1ffcdda --- /dev/null +++ b/spring-annotation-import/src/main/java/com/xcs/spring/bean/User.java @@ -0,0 +1,14 @@ +package com.xcs.spring.bean; + +/** + * @author 林雷 + * @date 2023年08月28日 10时48分 + **/ +public class User { + + private String name; + + public User(String name) { + this.name = name; + } +} diff --git a/spring-annotation-import/src/main/java/com/xcs/spring/config/CustomDeferredImportSelector.java b/spring-annotation-import/src/main/java/com/xcs/spring/config/CustomDeferredImportSelector.java new file mode 100644 index 0000000..54c1665 --- /dev/null +++ b/spring-annotation-import/src/main/java/com/xcs/spring/config/CustomDeferredImportSelector.java @@ -0,0 +1,18 @@ +package com.xcs.spring.config; + +import com.xcs.spring.bean.MyBeanA; +import com.xcs.spring.bean.MyBeanC; +import org.springframework.context.annotation.DeferredImportSelector; +import org.springframework.core.type.AnnotationMetadata; + +/** + * @author 林雷 + * @date 2023年08月29日 11时08分 + **/ +public class CustomDeferredImportSelector implements DeferredImportSelector { + + @Override + public String[] selectImports(AnnotationMetadata importingClassMetadata) { + return new String[]{MyBeanC.class.getName()}; + } +} diff --git a/spring-annotation-import/src/main/java/com/xcs/spring/config/CustomImportSelector.java b/spring-annotation-import/src/main/java/com/xcs/spring/config/CustomImportSelector.java new file mode 100644 index 0000000..c9fa087 --- /dev/null +++ b/spring-annotation-import/src/main/java/com/xcs/spring/config/CustomImportSelector.java @@ -0,0 +1,16 @@ +package com.xcs.spring.config; + +import com.xcs.spring.bean.MyBeanA; +import org.springframework.context.annotation.ImportSelector; +import org.springframework.core.type.AnnotationMetadata; + +/** + * @author 林雷 + * @date 2023年08月28日 11时12分 + **/ +public class CustomImportSelector implements ImportSelector { + @Override + public String[] selectImports(AnnotationMetadata importingClassMetadata) { + return new String[]{MyBeanA.class.getName()}; + } +} diff --git a/spring-annotation-import/src/main/java/com/xcs/spring/config/CustomRegistrar.java b/spring-annotation-import/src/main/java/com/xcs/spring/config/CustomRegistrar.java new file mode 100644 index 0000000..d99c893 --- /dev/null +++ b/spring-annotation-import/src/main/java/com/xcs/spring/config/CustomRegistrar.java @@ -0,0 +1,19 @@ +package com.xcs.spring.config; + +import com.xcs.spring.bean.MyBeanB; +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; + +/** + * @author 林雷 + * @date 2023年08月28日 11时17分 + **/ +public class CustomRegistrar implements ImportBeanDefinitionRegistrar { + @Override + public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { + RootBeanDefinition beanDefinition = new RootBeanDefinition(MyBeanB.class); + registry.registerBeanDefinition("myBeanB", beanDefinition); + } +} diff --git a/spring-annotation-import/src/main/java/com/xcs/spring/config/MyConfig.java b/spring-annotation-import/src/main/java/com/xcs/spring/config/MyConfig.java new file mode 100644 index 0000000..c6766b2 --- /dev/null +++ b/spring-annotation-import/src/main/java/com/xcs/spring/config/MyConfig.java @@ -0,0 +1,27 @@ +package com.xcs.spring.config; + +import com.xcs.spring.service.MyService; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +/** + * @author xcs + * @date 2023年08月07日 16时25分 + **/ +@Configuration +// 导入常规的 @Configuration 类 +// @Import(UserConfig.class) + +// 导入普通的组件类 +// @Import(MyService.class) + +// 使用ImportSelector +// @Import(CustomImportSelector.class) + +// 使用 ImportBeanDefinitionRegistrar +// @Import(CustomRegistrar.class) + +@Import({UserConfig.class, MyService.class, CustomImportSelector.class, CustomDeferredImportSelector.class, CustomRegistrar.class}) +public class MyConfig { + +} \ No newline at end of file diff --git a/spring-annotation-import/src/main/java/com/xcs/spring/config/UserConfig.java b/spring-annotation-import/src/main/java/com/xcs/spring/config/UserConfig.java new file mode 100644 index 0000000..23d89b1 --- /dev/null +++ b/spring-annotation-import/src/main/java/com/xcs/spring/config/UserConfig.java @@ -0,0 +1,18 @@ +package com.xcs.spring.config; + +import com.xcs.spring.bean.User; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author 林雷 + * @date 2023年08月28日 10时48分 + **/ +@Configuration +public class UserConfig { + + @Bean + public User user(){ + return new User("xcs"); + } +} diff --git a/spring-annotation-import/src/main/java/com/xcs/spring/service/MyService.java b/spring-annotation-import/src/main/java/com/xcs/spring/service/MyService.java new file mode 100644 index 0000000..c0dd7d7 --- /dev/null +++ b/spring-annotation-import/src/main/java/com/xcs/spring/service/MyService.java @@ -0,0 +1,20 @@ +package com.xcs.spring.service; + +import com.xcs.spring.bean.MyBeanD; +import org.springframework.context.annotation.Bean; + +/** + * @author 林雷 + * @date 2023年08月28日 11时00分 + **/ +public class MyService { + + @Bean + public MyBeanD myBeanD(){ + return new MyBeanD(); + } + + public String getInfo(){ + return "MyService info"; + } +} diff --git a/spring-annotation-propertySource/pom.xml b/spring-annotation-propertySource/pom.xml new file mode 100644 index 0000000..950c809 --- /dev/null +++ b/spring-annotation-propertySource/pom.xml @@ -0,0 +1,14 @@ + + + + spring-reading + com.xcs.spring + 0.0.1-SNAPSHOT + + + 4.0.0 + spring-annotation-propertySource + + \ No newline at end of file diff --git a/spring-annotation-propertySource/src/main/java/com/xcs/spring/PropertySourceApplication.java b/spring-annotation-propertySource/src/main/java/com/xcs/spring/PropertySourceApplication.java new file mode 100644 index 0000000..5993ab4 --- /dev/null +++ b/spring-annotation-propertySource/src/main/java/com/xcs/spring/PropertySourceApplication.java @@ -0,0 +1,17 @@ +package com.xcs.spring; + +import com.xcs.spring.config.MyBeanConfig; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +/** + * @author xcs + * @date 2023年08月07日 16时21分 + **/ +public class PropertySourceApplication { + + public static void main(String[] args) { + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyBeanConfig.class); + System.out.println("apiVersion = " + context.getEnvironment().getProperty("apiVersion")); + System.out.println("kind = " + context.getEnvironment().getProperty("kind")); + } +} diff --git a/spring-annotation-propertySource/src/main/java/com/xcs/spring/config/MyBeanConfig.java b/spring-annotation-propertySource/src/main/java/com/xcs/spring/config/MyBeanConfig.java new file mode 100644 index 0000000..73dd452 --- /dev/null +++ b/spring-annotation-propertySource/src/main/java/com/xcs/spring/config/MyBeanConfig.java @@ -0,0 +1,14 @@ +package com.xcs.spring.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +/** + * @author xcs + * @date 2023年08月07日 16时25分 + **/ +@Configuration +@PropertySource("classpath:my-application.yml") +public class MyBeanConfig { + +} \ No newline at end of file diff --git a/spring-annotation-propertySource/src/main/resources/my-application.yml b/spring-annotation-propertySource/src/main/resources/my-application.yml new file mode 100644 index 0000000..5736f44 --- /dev/null +++ b/spring-annotation-propertySource/src/main/resources/my-application.yml @@ -0,0 +1,2 @@ +apiVersion: v1 +kind: ConfigMap \ No newline at end of file diff --git a/spring-interface-applicationListener/pom.xml b/spring-interface-applicationListener/pom.xml new file mode 100644 index 0000000..a7f95c5 --- /dev/null +++ b/spring-interface-applicationListener/pom.xml @@ -0,0 +1,14 @@ + + + + spring-reading + com.xcs.spring + 0.0.1-SNAPSHOT + + + 4.0.0 + spring-interface-applicationListener + + \ No newline at end of file diff --git a/spring-interface-beanFactoryPostProcessor/pom.xml b/spring-interface-beanFactoryPostProcessor/pom.xml new file mode 100644 index 0000000..bdfc349 --- /dev/null +++ b/spring-interface-beanFactoryPostProcessor/pom.xml @@ -0,0 +1,14 @@ + + + + spring-reading + com.xcs.spring + 0.0.1-SNAPSHOT + + + 4.0.0 + spring-interface-beanFactoryPostProcessor + + \ No newline at end of file diff --git a/spring-interface-beanFactoryPostProcessor/src/main/java/com/xcs/spring/BeanFactoryPostProcessorApplication.java b/spring-interface-beanFactoryPostProcessor/src/main/java/com/xcs/spring/BeanFactoryPostProcessorApplication.java new file mode 100644 index 0000000..6eb8444 --- /dev/null +++ b/spring-interface-beanFactoryPostProcessor/src/main/java/com/xcs/spring/BeanFactoryPostProcessorApplication.java @@ -0,0 +1,22 @@ +package com.xcs.spring; + +import com.xcs.spring.config.MyConfiguration; +import com.xcs.spring.config.MySimpleBean; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +/** + * @author xcs + * @date 2023年08月07日 16时21分 + **/ +public class BeanFactoryPostProcessorApplication { + + public static void main(String[] args) { + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfiguration.class); + + MySimpleBean mySimpleBean1 = context.getBean(MySimpleBean.class); + MySimpleBean mySimpleBean2 = context.getBean(MySimpleBean.class); + + mySimpleBean1.show(); + mySimpleBean2.show(); + } +} diff --git a/spring-interface-beanFactoryPostProcessor/src/main/java/com/xcs/spring/config/MyBeanFactoryPostProcessor.java b/spring-interface-beanFactoryPostProcessor/src/main/java/com/xcs/spring/config/MyBeanFactoryPostProcessor.java new file mode 100644 index 0000000..2b0cff7 --- /dev/null +++ b/spring-interface-beanFactoryPostProcessor/src/main/java/com/xcs/spring/config/MyBeanFactoryPostProcessor.java @@ -0,0 +1,22 @@ +package com.xcs.spring.config; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; + +/** + * @author 林雷 + * @date 2023年09月14日 14时17分 + **/ +public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor { + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + System.out.println("修改bean的定义"); + BeanDefinition beanDefinition = beanFactory.getBeanDefinition("mySimpleBean"); + beanDefinition.setScope(BeanDefinition.SCOPE_PROTOTYPE); + System.out.println("将mySimpleBean从默认的单例修改成多例"); + System.out.println("修改bean的定义已完成"); + } +} diff --git a/spring-interface-beanFactoryPostProcessor/src/main/java/com/xcs/spring/config/MyConfiguration.java b/spring-interface-beanFactoryPostProcessor/src/main/java/com/xcs/spring/config/MyConfiguration.java new file mode 100644 index 0000000..e5a7912 --- /dev/null +++ b/spring-interface-beanFactoryPostProcessor/src/main/java/com/xcs/spring/config/MyConfiguration.java @@ -0,0 +1,23 @@ +package com.xcs.spring.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +/** + * @author xcs + * @date 2023年08月07日 16时25分 + **/ +@Configuration +public class MyConfiguration { + + @Bean + public MySimpleBean mySimpleBean(){ + return new MySimpleBean(); + } + + @Bean + public MyBeanFactoryPostProcessor myBeanFactoryPostProcessor(){ + return new MyBeanFactoryPostProcessor(); + } +} \ No newline at end of file diff --git a/spring-interface-beanFactoryPostProcessor/src/main/java/com/xcs/spring/config/MySimpleBean.java b/spring-interface-beanFactoryPostProcessor/src/main/java/com/xcs/spring/config/MySimpleBean.java new file mode 100644 index 0000000..cfd9576 --- /dev/null +++ b/spring-interface-beanFactoryPostProcessor/src/main/java/com/xcs/spring/config/MySimpleBean.java @@ -0,0 +1,12 @@ +package com.xcs.spring.config; + +/** + * @author 林雷 + * @date 2023年09月14日 16时05分 + **/ +public class MySimpleBean { + + public void show() { + System.out.println("MySimpleBean instance: " + this); + } +} diff --git a/spring-interface-beanPostProcessor/pom.xml b/spring-interface-beanPostProcessor/pom.xml new file mode 100644 index 0000000..d618a64 --- /dev/null +++ b/spring-interface-beanPostProcessor/pom.xml @@ -0,0 +1,14 @@ + + + + spring-reading + com.xcs.spring + 0.0.1-SNAPSHOT + + + 4.0.0 + spring-interface-beanPostProcessor + + \ No newline at end of file diff --git a/spring-interface-embeddedValueResolver/pom.xml b/spring-interface-embeddedValueResolver/pom.xml new file mode 100644 index 0000000..8c6fc14 --- /dev/null +++ b/spring-interface-embeddedValueResolver/pom.xml @@ -0,0 +1,14 @@ + + + + spring-reading + com.xcs.spring + 0.0.1-SNAPSHOT + + + 4.0.0 + spring-interface-embeddedValueResolver + + \ No newline at end of file diff --git a/spring-interface-environment/pom.xml b/spring-interface-environment/pom.xml new file mode 100644 index 0000000..3f74c8d --- /dev/null +++ b/spring-interface-environment/pom.xml @@ -0,0 +1,14 @@ + + + + spring-reading + com.xcs.spring + 0.0.1-SNAPSHOT + + + 4.0.0 + spring-interface-environment + + \ No newline at end of file diff --git a/spring-interface-factoryBean/pom.xml b/spring-interface-factoryBean/pom.xml new file mode 100644 index 0000000..ed85c9a --- /dev/null +++ b/spring-interface-factoryBean/pom.xml @@ -0,0 +1,14 @@ + + + + spring-reading + com.xcs.spring + 0.0.1-SNAPSHOT + + + 4.0.0 + spring-interface-factoryBean + + \ No newline at end of file diff --git a/spring-interface-importBeanDefinitionRegistrar/pom.xml b/spring-interface-importBeanDefinitionRegistrar/pom.xml new file mode 100644 index 0000000..19b2268 --- /dev/null +++ b/spring-interface-importBeanDefinitionRegistrar/pom.xml @@ -0,0 +1,14 @@ + + + + spring-reading + com.xcs.spring + 0.0.1-SNAPSHOT + + + 4.0.0 + spring-interface-importBeanDefinitionRegistrar + + \ No newline at end of file diff --git a/spring-interface-importSelector/pom.xml b/spring-interface-importSelector/pom.xml new file mode 100644 index 0000000..f740bd3 --- /dev/null +++ b/spring-interface-importSelector/pom.xml @@ -0,0 +1,14 @@ + + + + spring-reading + com.xcs.spring + 0.0.1-SNAPSHOT + + + 4.0.0 + spring-interface-importSelector + + \ No newline at end of file diff --git a/spring-interface-resource/pom.xml b/spring-interface-resource/pom.xml new file mode 100644 index 0000000..a3ffaf6 --- /dev/null +++ b/spring-interface-resource/pom.xml @@ -0,0 +1,14 @@ + + + + spring-reading + com.xcs.spring + 0.0.1-SNAPSHOT + + + 4.0.0 + spring-interface-resource + + \ No newline at end of file