/** * @author xushuai * @date 2023年04月29日 12:38 */ public class BeanTest { //1.@Bean @Bean public BeanTest beanTest(){ return new BeanTest(); } } //2. @Component不能等价于@controller ,因为他是无法被调用到的,只是一个普通的bean @Component class BeanTestComponent { } //3@Controller,@Service,@Repository,@RestController @Controller注解在SpringMvc中有特殊的作用 @Controller class BeanTestController { } //4.@ControllerAdvice,@RestControllerAdvice 底层实现不是用的SpringAop那一套 ,但是他本身想当于自动实现了aop的思想 //相当于对于controller的切面可以绑定PropertyEdit //例如实现ResponseBodyAdvice 相当于在响应体可以再做一层处理 @ControllerAdvice class BeanTestControllerAdvice implements ResponseBodyAdvice { @Override public boolean supports(MethodParameter returnType, Class converterType) { return false; } @Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { //在返回响应体之前做处理,做一些特殊的处理 return body; } } //5 @Configuration 主要标识是一个配置bean,利用这个可以对spring进行配置,比如扫描路径,定义其他的bean @Configuration class BeanTestConfiguration { //在里面可以用@bean去定义一些其他的bean } //6@Import将类倒入到Spring容器中,可以将BeanTest也变成一个bean @Import(BeanTest.class) class BeanTestImport { } //7@BeanDefinition 最后用@Import导入这个类 //@Import(BeanTestTwo.class) class BeanTestTwo implements ImportBeanDefinitionRegistrar { public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(); AbstractBeanDefinition beanDefinition = beanDefinitionBuilder.getBeanDefinition(); beanDefinition.setBeanClass(BeanDefinitionTest.class); registry.registerBeanDefinition("xushuai",beanDefinition); } } //8.bean标签 然后用@ImportResource("classpath:spring.xml)
Springboot中定义bean的八种方式
最新推荐文章于 2024-05-17 12:47:50 发布