@Configuration注解的作用:声明一个类为配置类,用于取代bean.xml配置文件注册bean对象。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
@AliasFor(
annotation = Component.class
)
String value() default "";
boolean proxyBeanMethods() default true;
}
- 底层代码就两个属性,一个用于声明配置类的名称,一个用于声明是否是代理对象方法(重点)。
- 由于有@Component注解的加持,那么被声明的配置类本身也是一个组件!
基础使用
@Configuration注解常常一起搭配使用的注解有@Bean、@Scope、@Lazy三个比较常见:
@Bean:等价于Spring中的bean标签用于注册bean对象的,内部有一些初始化、销毁的属性…
@Scope:用于声明该bean的作用域,作用域有singleton、prototype、request、session。
@Lazy:标记该bean是否开启懒加载。
这里准备User和Dog两个类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name;
private int age;
private Dog dog;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dog {
private String name;
private int age;
}
2.1、@Bean注解
先来看看如何声明配置一个bean对象的注册
@Configuration
public class MyConfig {
@Bean("user")
public User getUser(){
System.out.println("User对象进行创建!");
return new User("用户", 22, getDog());
}
@Bean("dog")
public Dog getDog(){
System.out.println("Dog对象进行创建!");
return new Dog("金毛", 3);
}
}
- 这样就声明配置了两个bean,在Spring中相当于注册到xml配置文件中
- 默认情况下是以饿汉单例的形式进行创建,即IOC容器创建时立即创建这两个bean。