spring @Configuration和@Configurable的区别
@Configuration
- 1.使用 @Configration 注解将该类声明为一个配置类。
- 2.在 hello() 方法上添加 @Bean 注解则会往 Spring 容器中添加一个名为 hello 的 Bean,该 Bean 即为方法的返回值。
|
1
2
3
4
5
6
7
8
9
10
11
12
|
package com.example.demo.component;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class MyConfigration { @Bean public String hello() { return "welcome to hangge.com"; }} |
(2)下面我们在一个 Controller 中获取并使用这个 Bean,代码如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package com.example.demo.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class HelloController { @Autowired String hello; @GetMapping("/test") public String test() { return hello; }} |
转载请保留原文链接:https://www.hangge.com/blog/cache/detail_2506.html
@Configurable
现在假设,我们想在非Spring管理的类中使用依赖注入;
比如:手动new出来的对象,正常情况下,Spring是无法依赖注入的,这个时候可以使用@Configurable注解;
现在假设我们有如下代码:
-
public class CarSalon {
-
//...
-
public void testDrive() {
-
Car car = new Car();
-
car.startCar();
-
}
-
}
-
-
-
public class Car {
-
-
private Engine engine;
-
-
private Transmission transmission;
-
-
public void startCar() {
-
transmission.setGear(1);
-
engine.engineOn();
-
System.out.println("Car started");
-
}
-
}
-
-
-
public class Engine {
-
//...
-
}
-
-
-
public class Transmission {
-
//...
-
}
代码运行时,会把Null异常。因为正常情况下,Spring无法对new出来的对象进行依赖注入;
在此基础上,我们使用@Configurable注解进行修改,如下:
-
-
-
public class Car {
-
-
-
private Engine engine;
-
-
private Transmission transmission;
-
-
public void startCar() {
-
transmission.setGear(1);
-
engine.engineOn();
-
-
System.out.println("Car started");
-
}
-
}
讲解:
@Configurable(preConstruction = true) 这个注解的作用是:
告诉Spring在构造函数运行之前将依赖注入到对象中。

浙公网安备 33010602011771号