1. Spring 常用注解
1.1 自动装配
1.1.1 @Configuration
Spring 3.0
之后开始支持了一种更优的配置方式:基于 Java 类的配置方式。通过增加 @Configuration
注解表明这是一个配置类,其底层为 @Component
(即该类的bean对象也会被Spring容器接管)。
proxybeanMethods
属性作用:指定被@Bean注解修饰的方法是否被代理,true表示该方法被代理(底层cglib,即该方法不能为private、final修饰),每次对该方法进行调用将会直接获得容器中的bean对象,而非真正执行该方法;false表示该方法不被代理,每次调用时都将获得一个新的对象(对应 full 和 lite 模式)。
1.1.2 @Bean
配合 @Configuration
可以实现 XML 配置实现注入的功能,效果与
<beans>
<bean>...</bean>
<bean>...</bean>
</beans>
类似,在使用 @Bean
注解时,表示将该方法返回的对象加载进 Spring 容器,在使用 @Bean
修饰方法时需要注意:
- 方法带返回值,且返回类型为想要被管理的 bean 的类型;
- 方法名即为默认的 bean name ,可使用
@Bean
的name
属性自定义; - 方法可带参数,则此时传入的参数也必须是被 Spring 容器管理的 bean 。
1.1.3 @Value
该注解的作用是从配置文件中读取属性,如 application.yaml 中有个配置
server:
port: 8000
我们使用该注解修饰方法参数 public void test(@Value("${server.port}") address)
,则该属性 8000 会自动被注入到 address 变量中。
@Value 定位属性有两种方式:
-
${property: default_value}:读取配置文件(如 *.properties, *.yaml 中的值
-
#{obj.property?: default_value}
:读取容器中管理的 bean 对象的属性值。
假设有一个对象声明如下:
@Component
public class ServerProperty {
@Value("${server.url}")
private String url;
// getter and setter
// ...
}
@Component
public class Server {
@Value("#{serverProperty.url}")
private String url;
}
第一个 @Value
指代从配置文件中读取属性注入到名为 serverProperty 的 bean 对象中,而第二个 @Value 则是从名为 serverPro