注入bean的方式
大约 1 分钟Spring全家桶SpringBoot精讲细讲
public class User {
private String name = "天动万象";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
注解
- @Configuration
- @Component
- @Service
- @Controller
- @Repository
配置类注入bean
@SpringBootApplication
public class Springboot01Application {
public static void main(String[] args) {
SpringApplication.run(Springboot01Application.class, args);
}
@Bean
public User user(){
return new User();
}
}
@Import注入bean
具体的类
@Import(User.class)
@SpringBootApplication
public class Springboot01Application {
public static void main(String[] args) {
SpringApplication.run(Springboot01Application.class, args);
}
}
配置类
@Import(UserConfig.class)
@SpringBootApplication
public class Springboot01Application {
public static void main(String[] args) {
SpringApplication.run(Springboot01Application.class, args);
}
}
UserConfig
public class UserConfig {
@Bean
public User user(Cat cat){
User user = new User();
user.setCat(cat);
return user;
}
@Bean
public Cat cat(){
return new Cat();
}
}
实现了ImportSelector接口的类
@Import(UserSelector.class)
@SpringBootApplication
public class Springboot01Application {
public static void main(String[] args) {
SpringApplication.run(Springboot01Application.class, args);
}
}
UserSelector
public class UserSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
// 全路径名称
return new String[] {"com.hejin.entity.User", "com.hejin.entity.Cat"};
}
}
实现了ImportSelector接口的类,这种方式注入bean。我们可以把类的全路径名称写在配置文件中,通过读取流的方式获得全路径名称数组,实现统一注入。
思考
SpringBoot默认扫描的是主启动类所在的包及其子包。
这些包是我们自己建的。假如这时候需要引入第三方的依赖,SpringBoot是扫描不到第三方依赖的包的。一般第三方都会提供一个Configuration,我们直接使用@Import
导入即可使用。