开发者社区> 问答> 正文

Spring 使用 @Configuration配置, @Atowired 拿 bean 为null

如题。我用的是基于 Java 的 spring 配置,没有用到 xml, 但是 @Atowired 拿 bean 时,却是个null 值,求解脱,代码如下:

MessageService.java

package com.waylau.spring;
 
import org.springframework.stereotype.Component;
 
/**
 * 说明:
 *
 * @author <a href="http://www.waylau.com">waylau.com</a> 2015年4月13日 
 */
@Component
public class MessageService {
 
    /**
     * 
     */
    public MessageService() {
        // TODO Auto-generated constructor stub
    }
     
    public String sayHi() {
        return "Hi, girl!";
    }
 
}


AppServer.java

package com.waylau.spring;
  
 
import org.springframework.beans.factory.annotation.Autowired;
 
/**
 * 说明:
 *
 * @author <a href="http://www.waylau.com">waylau.com</a> 2015年4月13日 
 */
public class AppServer {
 
     
    @Autowired
    private MessageService messageService;
  
    public void run() {
        System.out.println(messageService.sayHi());
    }
}



SpringConfig.java

package com.waylau.spring;
 
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
  
 
/**
 * 说明:Spring 配置类
 *
 * @author <a href="http://www.waylau.com">waylau.com</a> 2015年4月11日 
 */
@Configuration
@ComponentScan(basePackages = "com.waylau.spring")
public class SpringConfig {
  
    public SpringConfig() {
        // TODO Auto-generated constructor stub
    }
  
}


App.java

package com.waylau.spring;
 
 
public class App {
 
    public App() {
        // TODO Auto-generated constructor stub
    }
 
    public static void main(String[] args) {
        new AppServer().run();
         
    }
 
}

在 AppServer.java 中,那个 messageService 为 null

展开
收起
a123456678 2016-03-18 09:36:49 5157 0
3 条回答
写回答
取消 提交回答
  • 额,你没在spring容器里用spring注解肯定用不了

    2019-07-17 19:05:54
    赞同 展开评论 打赏
  • Spring会完成Bean的扫描、注册和管理,但前提条件是Spring自身要启动起来。因此,你需要使用ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class)来启动Spring,Spring在启动过程中会扫描各种配置,并完成Bean的注册和初始化。当Spring启动之后,你就可以通过getBean方法拿到想要的Bean了。

    2019-07-17 19:05:54
    赞同 展开评论 打赏
  • 我在 AppServer @Component

    而后用 App 里面 改成下面就可以了。

    public static void main(String[] args) {
            ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
            AppServer server = ctx.getBean(AppServer.class);
             
            server.run();
                     
        }
    2019-07-17 19:05:54
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多