简介
本文介绍Spring注册Bean的方法:@Import+@Bean。
注册Bean的方法我写了一个系列,见:Spring注册Bean(提供Bean)-方法大全 – 自学精灵
方法概述
- 写一个不加@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(); } }
结果
请先
!