原文网址:Spring注册Bean系列--方法3:@Import+@Bean_IT利刃出鞘的博客-CSDN博客
简介
本文介绍Spring注册Bean的方法:@Import+@Bean。
注册Bean的方法我写了一个系列,见:Spring注册Bean(提供Bean)系列--方法大全_IT利刃出鞘的博客-CSDN博客
方法概述
- 写一个不加@Configuration的配置类
- 里边有@Bean标记的方法,返回值为bean对应的类
- 在启动类上添加:@Import(上一步要导入到容器中的配置类)
- 也可以放在在其他@Configuration标记的类上
@Import是Spring的注解。
实例
注解类
package com.knife.annotation;
import com.knife.config.MyBeanConfiguration;
import org.springframework.context.annotation.Import;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import({MyBeanConfiguration.class})
public @interface EnableMyBean {
}
配置类(内部包含Bean)
无需加@Configuration
package com.knife.config;
import com.knife.entity.MyBean;
import org.springframework.context.annotation.Bean;
public class MyBeanConfiguration {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
导入配置
法1:启动类
启动类上加自定义的注解。
package com.knife;
import com.knife.annotation.EnableMyBean;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
@SpringBootApplication
@EnableMyBean
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
法2:@Configuration 标记的类
其实,只要是注册到Spring容器中的类就可以,但一般用@Configuration。
package com.knife.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.stereotype.Component;
@Configuration
@Import({MyBeanConfiguration.class})
public class MyBeanImportConfiguration {
}
测试
package com.knife.controller;
import com.knife.entity.MyBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Autowired
private MyBean myBean;
@GetMapping("/test")
public String test() {
return myBean.sayHello();
}
}
结果