所有分类
  • 所有分类
  • 未分类

Spring注册Bean–方法3:@Import+@Bean

简介

本文介绍Spring注册Bean的方法:@Import+@Bean。

注册Bean的方法我写了一个系列,见:Spring注册Bean(提供Bean)-方法大全 – 自学精灵

方法概述

  1. 写一个不加@Configuration的配置类
    1. 里边有@Bean标记的方法,返回值为bean对应的类
  2. 在启动类上添加:@Import(上一步要导入到容器中的配置类)
    1. 也可以放在在其他@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();
    }
}

结果

0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录