Commit 158d3dd8 authored by zhaoaiqing's avatar zhaoaiqing

培训资料

parents
######################################################################
# Build Tools
.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar
target/
!.mvn/wrapper/maven-wrapper.jar
######################################################################
# IDE
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
nbproject/private/
build/*
nbbuild/
dist/
nbdist/
.nb-gradle/
######################################################################
# Others
*.log
*.xml.versionsBackup
*.txt
!*/build/*.java
!*/build/*.html
!*/build/*.xml
\ No newline at end of file
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.cesgroup</groupId>
<artifactId>SpringBootTraning</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>Traning</artifactId>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.cesgroup</groupId>
<artifactId>logger-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.cesgroup.boot;
import java.util.Arrays;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Import;
import org.springframework.stereotype.Repository;
import com.cesgroup.zw.importbean.ImportConfiguration;
@SpringBootApplication
@Import(ImportConfiguration.class)
public class Main {
public static void main(String[] args) {
ConfigurableApplicationContext context = new SpringApplicationBuilder(Main.class).web(WebApplicationType.NONE)
.run(args);
System.out.println("-----------------------");
print(context.getBeanDefinitionNames());
}
public static void print(String[] beanNames) {
Arrays.asList(beanNames).forEach(System.out::println);
}
}
package com.cesgroup.zw.componentscan.annotation;
import java.util.Arrays;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Repository;
@ComponentScan(value="com.cesgroup.zw.componentscan.annotation")
public class ComponentScanMain {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(ComponentScanMain.class);
System.out.println("-----------------------");
print(context.getBeanDefinitionNames());
}
public static void print(String[] beanNames) {
Arrays.asList(beanNames).forEach(System.out::println);
}
}
package com.cesgroup.zw.componentscan.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Repository;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repository
public @interface Dao {
@AliasFor(annotation = Repository.class)
String value() default "";
}
package com.cesgroup.zw.componentscan.annotation.controller;
import org.springframework.stereotype.Controller;
@Controller
public class UserController {
}
package com.cesgroup.zw.componentscan.annotation.dao;
import com.cesgroup.zw.componentscan.annotation.Dao;
@Dao
public class UserDao {
}
package com.cesgroup.zw.componentscan.annotation.domain;
import org.springframework.stereotype.Component;
@Component
public class User {
private String userId;
private String userName;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
package com.cesgroup.zw.componentscan.annotation.service;
import org.springframework.stereotype.Service;
@Service
public class UserService {
}
package com.cesgroup.zw.componentscan.annotation01;
import java.util.Arrays;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.FilterType;
@ComponentScan(value="com.cesgroup.zw.componentscan.annotation01",
useDefaultFilters=false,includeFilters= {
@Filter(type=FilterType.CUSTOM,value=CustomTypeFilter.class)
})
public class ComponentScanMain {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(ComponentScanMain.class);
System.out.println("-----------------------");
print(context.getBeanDefinitionNames());
}
public static void print(String[] beanNames) {
Arrays.asList(beanNames).forEach(System.out::println);
}
}
package com.cesgroup.zw.componentscan.annotation01;
import java.io.IOException;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.core.type.filter.TypeFilter;
public class CustomInterfaceTypeFilter implements TypeFilter{
@Override
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory)
throws IOException {
return false;
}
}
package com.cesgroup.zw.componentscan.annotation01;
import java.io.IOException;
import java.util.Arrays;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.core.type.filter.TypeFilter;
import com.cesgroup.zw.componentscan.annotation01.mapper.Dao;
public class CustomTypeFilter implements TypeFilter{
@Override
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory)
throws IOException {
System.out.println("call CustomTypeFilter "+ metadataReader.getClassMetadata().getClassName());
boolean result = Arrays.asList(metadataReader.getClassMetadata().getInterfaceNames()).contains(Dao.class.getName());
//System.out.println(result);
return result;
}
}
package com.cesgroup.zw.componentscan.annotation01;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Mapper {
}
package com.cesgroup.zw.componentscan.annotation01;
import org.springframework.stereotype.Component;
@Component
public class User {
private String userId;
private String userName;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
package com.cesgroup.zw.componentscan.annotation01.mapper;
public interface Dao {
}
package com.cesgroup.zw.componentscan.annotation01.mapper;
public class UserDaoImpl implements Dao{
}
package com.cesgroup.zw.componentscan.annotation01.mapper;
import com.cesgroup.zw.componentscan.annotation01.Mapper;
@Mapper
public class UserMapper {
}
package com.cesgroup.zw.componentscan.annotation02;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
@SuppressWarnings("rawtypes")
public class BeanProxy implements InvocationHandler{
private Class target;
public Object newInstance(Class target) {
this.target = target;
return Proxy.newProxyInstance(target.getClassLoader(),new Class[] {target}, this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("call BeanProxy ..........."+target.getName());
System.out.println("根据请求对象自己扩展代码");
return null;
}
}
package com.cesgroup.zw.componentscan.annotation02;
import java.util.Arrays;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.FilterType;
import com.cesgroup.zw.componentscan.annotation02.dao.StaffDao;
import com.cesgroup.zw.componentscan.annotation02.dao.UserDao;
@ComponentScan(value="com.cesgroup.zw.componentscan.annotation02.dao",
useDefaultFilters=false,includeFilters= {
@Filter(type=FilterType.CUSTOM,value=CustomTypeFilter.class)
})
public class ComponentScanMain {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(ComponentScanMain.class);
System.out.println("-----------------------");
print(context.getBeanDefinitionNames());
StaffDao staffDao = context.getBean(StaffDao.class);
System.out.println(staffDao.findAll());
UserDao userDao = context.getBean(UserDao.class);
System.out.println(userDao.findAll());
}
public static void print(String[] beanNames) {
Arrays.asList(beanNames).forEach(System.out::println);
}
}
package com.cesgroup.zw.componentscan.annotation02;
import java.io.IOException;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.core.type.filter.TypeFilter;
public class CustomTypeFilter implements TypeFilter{
@Override
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory)
throws IOException {
boolean result = metadataReader.getClassMetadata().isInterface();
if(result) {
CachingMetadataReaderFactory cachingMetadataReaderFactory = (CachingMetadataReaderFactory) metadataReaderFactory;
GenericApplicationContext context = (GenericApplicationContext) cachingMetadataReaderFactory.getResourceLoader();
RootBeanDefinition beanDefinition = new RootBeanDefinition();
try {
Class clz = Class.forName(metadataReader.getClassMetadata().getClassName());
beanDefinition.getConstructorArgumentValues().addGenericArgumentValue(clz);
beanDefinition.setBeanClass(DaoFactoryBean.class);
context.registerBeanDefinition(clz.getName(), beanDefinition);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return result;// 如果匹配成功就不扫描
}
}
package com.cesgroup.zw.componentscan.annotation02;
import org.springframework.beans.factory.FactoryBean;
@SuppressWarnings("rawtypes")
public class DaoFactoryBean implements FactoryBean{
private Class clazz;
private Object target;
public DaoFactoryBean(Class clz) {
this.clazz = clz;
BeanProxy beanProxy = new BeanProxy();
target= beanProxy.newInstance(clazz);
}
@Override
public Object getObject() throws Exception {
return target;
}
@Override
public Class getObjectType() {
return clazz;
}
}
package com.cesgroup.zw.componentscan.annotation02.dao;
import java.util.List;
public interface StaffDao {
List<Object> findAll();
}
package com.cesgroup.zw.componentscan.annotation02.dao;
import java.util.List;
public interface UserDao {
List<Object> findAll();
}
package com.cesgroup.zw.importbean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ImportConfiguration {
@Bean
public Stu stu() {
return new Stu();
}
public static class Stu{
}
}
package com.cesgroup.zw.t02.bean.annotation;
import java.util.Arrays;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.RootBeanDefinition;
import com.cesgroup.zw.t02.bean.annotation.beans.Car;
import com.cesgroup.zw.t02.bean.annotation.beans.Person;
public class Main {
public static void main(String[] args) {
DefaultListableBeanFactory context = new DefaultListableBeanFactory();
RootBeanDefinition definitions = new RootBeanDefinition(Car.class);
definitions.getConstructorArgumentValues().addIndexedArgumentValue(0,"BM");
context.registerBeanDefinition("car", definitions);
definitions = new RootBeanDefinition(Person.class);
definitions.getPropertyValues().add("car", new RuntimeBeanReference("car"));
context.registerBeanDefinition("person", definitions);
print(context.getBeanDefinitionNames());
Car car = context.getBean(Car.class);
System.out.println(car);
System.out.println(context.getBean(Person.class).getCarName());
}
public static void print(String[] beanDefinitions) {
Arrays.asList(beanDefinitions).forEach(System.out::println);
}
}
package com.cesgroup.zw.t02.bean.annotation;
import java.util.Arrays;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.beans.factory.support.SimpleBeanDefinitionRegistry;
import org.springframework.context.annotation.AnnotatedBeanDefinitionReader;
import org.springframework.context.annotation.ClassPathBeanDefinitionScanner;
import com.cesgroup.zw.t02.componentscan.annotation.conf.Config;
import com.cesgroup.zw.t02.componentscan.annotation.conf.User;
public class Main1 {
public static void main(String[] args) {
SimpleBeanDefinitionRegistry registry = new SimpleBeanDefinitionRegistry();
registry.registerBeanDefinition("user", new RootBeanDefinition(User.class));
print(registry.getBeanDefinitionNames());
AnnotatedBeanDefinitionReader reader = new AnnotatedBeanDefinitionReader(registry);
reader.register(Config.class);
print(registry.getBeanDefinitionNames());
ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(registry);
scanner.scan("com.cesgroup.zw.t02.componentscan");
print(registry.getBeanDefinitionNames());
}
public static void print(String[] beanDefinitions) {
Arrays.asList(beanDefinitions).forEach(System.out::println);
}
}
package com.cesgroup.zw.t02.bean.annotation.beans;
public class Car {
public Car(String name) {
this.name = name;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.cesgroup.zw.t02.bean.annotation.beans;
import org.springframework.beans.factory.annotation.Autowired;
public class Person {
private Car car;
public Person() {
}
public String getCarName() {
return car.getName();
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
}
package com.cesgroup.zw.t02.componentscan.annotation;
import java.util.Set;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.core.type.filter.AnnotationTypeFilter;
import org.springframework.stereotype.Component;
public class Main {
public static void main(String[] args) {
ClassPathScanningCandidateComponentProvider
provider = new ClassPathScanningCandidateComponentProvider(true);
//provider.addExcludeFilter(new AnnotationTypeFilter(Component.class));
provider.addIncludeFilter(new AnnotationTypeFilter(Component.class));
/*provider.addIncludeFilter((metadataReader,metadataReaderFactory) ->{
System.out.println(metadataReader.getClassMetadata().getClassName());
return true;
});*/
Set<BeanDefinition> beanDefinitions =
provider.findCandidateComponents("com.cesgroup.zw.t02.componentscan.annotation");
print(beanDefinitions);
}
public static void print(Set<BeanDefinition> beanDefinitions) {
beanDefinitions.forEach(System.out::println);
}
}
package com.cesgroup.zw.t02.componentscan.annotation.conf;
public class Car {
}
package com.cesgroup.zw.t02.componentscan.annotation.conf;
import org.springframework.context.annotation.Configuration;
@Configuration
public class Config {
}
package com.cesgroup.zw.t02.componentscan.annotation.conf;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class User {
}
package com.cesgroup.zw.t02.componentscan.annotation.dao;
import org.springframework.stereotype.Repository;
@Repository
public class UserDao {
}
package com.cesgroup.zw.t02.register.annotation.conditional;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.context.annotation.Conditional;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Conditional(OnBeanCondition.class)
public @interface ConditionalOnBean {
Class<?>[] value() ;
}
package com.cesgroup.zw.t02.register.annotation.conditional;
import java.util.Arrays;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan("com.cesgroup.zw.t02.register.annotation.conditional")
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext
context = new AnnotationConfigApplicationContext(Main.class);
print(context.getBeanDefinitionNames());
}
public static void print(String[] beanDefinitions) {
Arrays.asList(beanDefinitions).forEach(System.out::println);
}
}
package com.cesgroup.zw.t02.register.annotation.conditional;
import java.util.Map;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.annotation.AnnotationAttributes;
import org.springframework.core.type.AnnotatedTypeMetadata;
import com.cesgroup.zw.t02.register.annotation.import03.BeanScan;
public class OnBeanCondition implements Condition{
@Override
public boolean matches(ConditionContext context,
AnnotatedTypeMetadata metadata) {
Map<String, Object> map = metadata.getAnnotationAttributes(ConditionalOnBean.class.getName());
AnnotationAttributes annotationAttributes = AnnotationAttributes.fromMap(map);
Class<?>[] classes = annotationAttributes.getClassArray("value");
boolean isContain = false;
for(Class<?> clz: classes) {
isContain = context.getBeanFactory().containsBean(clz.getSimpleName().toLowerCase());
if(!isContain) {
break;
}
}
return isContain;
}
}
package com.cesgroup.zw.t02.register.annotation.conditional.conf;
import org.springframework.stereotype.Component;
@Component
public class Car {
}
package com.cesgroup.zw.t02.register.annotation.conditional.conf;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.cesgroup.zw.t02.register.annotation.conditional.ConditionalOnBean;
@Configuration
public class Config {
@Bean
@ConditionalOnBean(Car.class)
public Person person() {
return new Person();
}
}
package com.cesgroup.zw.t02.register.annotation.conditional.conf;
public class Person {
}
package com.cesgroup.zw.t02.register.annotation.import01;
import java.util.Arrays;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Import;
import com.cesgroup.zw.t02.register.annotation.import01.conf.Car;
import com.cesgroup.zw.t02.register.annotation.import01.conf.Config;
import com.cesgroup.zw.t02.register.annotation.import01.conf.Person;
@Import(Config.class)
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Main.class);
Car car = context.getBean(Car.class);
Car car1 = context.getBean(Person.class).getCar();
System.out.println(car == car1);
print(context.getBeanDefinitionNames());
}
public static void print(String[] beanDefinitions) {
Arrays.asList(beanDefinitions).forEach(System.out::println);
}
}
package com.cesgroup.zw.t02.register.annotation.import01.conf;
public class Car {
}
package com.cesgroup.zw.t02.register.annotation.import01.conf;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class Config {
@Bean
public Car car() {
System.out.println("------------------------car");
return new Car();
}
@Bean
public Person person1() {
return new Person(car());
}
}
package com.cesgroup.zw.t02.register.annotation.import01.conf;
public class Person {
private Car car;
public Person(Car car) {
this.car = car;
}
public Car getCar() {
return car;
}
}
package com.cesgroup.zw.t02.register.annotation.import02;
import java.util.Arrays;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Import;
import com.cesgroup.zw.t02.register.annotation.import02.conf.Config;
@Import(Config.class)
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Main.class);
print(context.getBeanDefinitionNames());
}
public static void print(String[] beanDefinitions) {
Arrays.asList(beanDefinitions).forEach(System.out::println);
}
}
package com.cesgroup.zw.t02.register.annotation.import02.conf;
public class Car {
}
package com.cesgroup.zw.t02.register.annotation.import02.conf;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;
public class Config implements ImportSelector{
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
// TODO Auto-generated method stub
return new String[] {Car.class.getName(),Person.class.getName()};
}
}
package com.cesgroup.zw.t02.register.annotation.import02.conf;
public class Person {
}
package com.cesgroup.zw.t02.register.annotation.import03;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.context.annotation.Import;
import org.springframework.core.annotation.AliasFor;
import com.cesgroup.zw.t02.register.annotation.import03.conf.Config;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(Config.class)
public @interface BeanScan {
@AliasFor("value")
String[] basePackage() default {};
@AliasFor("basePackage")
String[] value() default {};
}
package com.cesgroup.zw.t02.register.annotation.import03;
import java.util.Arrays;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@BeanScan("com.cesgroup.zw.t02.register.annotation.import03")
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext
context = new AnnotationConfigApplicationContext(Main.class);
print(context.getBeanDefinitionNames());
}
public static void print(String[] beanDefinitions) {
Arrays.asList(beanDefinitions).forEach(System.out::println);
}
}
package com.cesgroup.zw.t02.register.annotation.import03.conf;
public class Car {
}
package com.cesgroup.zw.t02.register.annotation.import03.conf;
import java.util.Map;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ClassPathBeanDefinitionScanner;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.annotation.AnnotationAttributes;
import org.springframework.core.type.AnnotationMetadata;
import com.cesgroup.zw.t02.register.annotation.import03.BeanScan;
public class Config implements ImportBeanDefinitionRegistrar{
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
Map<String, Object> map = importingClassMetadata.getAnnotationAttributes(BeanScan.class.getName(),true);
AnnotationAttributes annotationAttributes = AnnotationAttributes.fromMap(map);
String[] basePackages = annotationAttributes.getStringArray("basePackage");
ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(registry,false);
scanner.addIncludeFilter(( metadataReader, metadataReaderFactory)->{
return true;
});
scanner.scan(basePackages);
}
}
package com.cesgroup.zw.t02.register.annotation.import03.conf;
public class Person {
}
package com.cesgroup.zw.t03.factories;
public interface Animal {
void eat();
}
package com.cesgroup.zw.t03.factories;
public class Cat implements Animal{
@Override
public void eat() {
System.out.println("Сè");
}
}
package com.cesgroup.zw.t03.factories;
public class Dog implements Animal{
@Override
public void eat() {
System.out.println("СԹͷ");
}
}
package com.cesgroup.zw.t03.factories;
import java.util.Arrays;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Import;
import com.cesgroup.zw.t03.factories.conf.AnimalRegistrar;
@Import(AnimalRegistrar.class)
public class FactoriesImportMain {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(FactoriesImportMain.class);
System.out.println("-----------------------");
print(context.getBeanDefinitionNames());
}
public static void print(String[] beanNames) {
Arrays.asList(beanNames).forEach(System.out::println);
}
}
package com.cesgroup.zw.t03.factories;
import java.util.List;
import org.springframework.core.io.support.SpringFactoriesLoader;
public class Main {
public static void main(String[] args) {
List<String> beanNames = SpringFactoriesLoader.loadFactoryNames(Animal.class, Main.class.getClassLoader());
beanNames.forEach(System.out::println);
}
}
package com.cesgroup.zw.t03.factories.conf;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.io.support.SpringFactoriesLoader;
import org.springframework.core.type.AnnotationMetadata;
import com.cesgroup.zw.t03.factories.Animal;
public class AnimalRegistrar implements ImportSelector {
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return SpringFactoriesLoader.
loadFactoryNames(Animal.class, AnimalRegistrar.class.getClassLoader()).toArray(new String[] {});
}
}
package com.cesgroup.zw.t04;
import java.util.Arrays;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ApplicationContext;
import com.cesgroup.autoconfigure.logger.LogProperties;
@SpringBootApplication
public class Main {
public static void main(String[] args) {
ApplicationContext context = new SpringApplicationBuilder(Main.class).
web(WebApplicationType.NONE)
.run(args);
System.out.println("-----------------------");
print(context.getBeanDefinitionNames());
// ͨılogger.enable
LogProperties logProperties = context.getBean(LogProperties.class);
}
public static void print(String[] beanNames) {
Arrays.asList(beanNames).forEach(System.out::println);
}
}
com.cesgroup.zw.t03.factories.Animal=\
com.cesgroup.zw.t03.factories.Dog,\
com.cesgroup.zw.t03.factories.Cat
\ No newline at end of file
logger.enable=true
\ No newline at end of file
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.cesgroup</groupId>
<artifactId>SpringBootTraning</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>logger-spring-boot-starter</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.cesgroup.autoconfigure.logger;
import java.util.HashMap;
import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix= "logger")
public class LogProperties {
private String enable ;
private Map<String,String> pa = new HashMap<String,String>();
public String getEnable() {
return enable;
}
public void setEnable(String enable) {
this.enable = enable;
}
public Map<String, String> getPa() {
return pa;
}
public void setPa(Map<String, String> pa) {
this.pa = pa;
}
}
package com.cesgroup.autoconfigure.logger;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConditionalOnProperty(prefix="logger",name="enable",havingValue="true")
@EnableConfigurationProperties(LogProperties.class)
public class LoggerAutoConfiguration {
private final LogProperties logProperties;
public LoggerAutoConfiguration(LogProperties logProperties) {
this.logProperties = logProperties;
}
}
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.cesgroup.autoconfigure.logger.LoggerAutoConfiguration
\ No newline at end of file
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cesgroup</groupId>
<artifactId>SpringBootTraning</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<modules>
<module>Traning</module>
<module>logger-spring-boot-starter</module>
</modules>
</project>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment