核心:@Import 、自定义注解 @EnablePerson、@Configuration
先准备两个DTO
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Animal {
private Integer age;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
private String name;
@Override
public String toString() {
return " DTO 输出自定义格式 Person【" + "name='" + name + '\'' + '】';
}
}
自定义注解@interface类
@Target({ElementType.TYPE}) // 加载类注解
@Retention(RetentionPolicy.RUNTIME) // 运行时加载
@Documented // javadoc时生成对应注解信息
@Import({Person.class, Animal.class})
public @interface EnablePerson {
}
自定义注解配合@Configuration一起使用
// 1 优先级最高,里面注入了 Person Animal
@EnablePerson
@Configuration
public class PersonConfig {
@Autowired
private Person person;
@Bean
public void getCeShi() {
person.setName("测试");
}
@Bean
public Person getKaiFa() {
return new Person("开发");
}
@Override
public String toString() {
return getKaiFa().getName() + " -- " + person.toString();
}
}
测试demo:
public class TestDemo {
public static void main(String[] args) {
// 自定义注解 要和 @configuration 一起使用
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(PersonConfig.class);
// @Enable注入的
Map<String, Animal> beansOfType1 = applicationContext.getBeansOfType(Animal.class);
System.out.println(beansOfType1);
// @Enable注入的
Map<String, Person> beansOfType2 = applicationContext.getBeansOfType(Person.class);
System.out.println(beansOfType2);
// @configuration注入的
Map<String, PersonConfig> beansOfType = applicationContext.getBeansOfType(PersonConfig.class);
System.out.println(beansOfType);
}
}
控制台输出:
{com.lc.k1demo03.framework.Animal=Animal(age=null)}
{com.lc.k1demo03.framework.Person= DTO 输出自定义格式 Person【name='测试'】, getKaiFa= DTO 输出自定义格式 Person【name='开发'】}
{personConfig=开发 -- Person{name='测试'}}