java main 程序如何使用注解注入spring管理的bean

leehomYe 发布于 2018/07/26 16:04
阅读 1K+
收藏 0

在论坛里面逛了一圈发现很多人在main方法里面注入bean都是使用,

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("***");

applicationContext.getBean()

的方式从spring容器中拿到需要的实例,可是为什么不能使用注解的方式拿到需要的实例呢?于是我做了一系列尝试,首先你需要让该main方法在spring的扫描范围内,即

<context:component-scan base-package="**"/>

需要包含main程序,因为@Autowired必须注释在一个类中的全局变量上,所以加载配置文件必须再那个方法加载进虚拟机的时候就应该给他实例化,所以

static ApplicationContext applicationContext = new ClassPathXmlApplicationContext("***");

我把那个方法拿出来成为成员变量还给它加了static,但是我发现及时这样spring还是不会给我的类注入所需要的bean,具体的代码如下:

public class FundsProcessor {

    private static final Logger logger = Logger.getLogger(FundsProcessor.class);

    private static ApplicationContext applicationContext = new ClassPathXmlApplicationContext("***");
    
    @Autowired
    private JedisManager jedisManager;
    
    public static void main(String[] args) {

        logger.info("funds processor start...");

而且我试了一下好像spring根本没有去扫描我这个类,但是确实已经在<context:component-scan base-package="**"/> 中包含了该类了

加载中
0
O
l
leehomYe
能告诉为什么吗?比较迷茫
0
p
polaris_he
这个类是bean吗
l
leehomYe
这个类并没有加注解
0
zh0
zh0

你必须把这个类注册到ioc容器中(比如声明为@Component),才能用@Autowired,然而你装入的这个是一个非static成员,无法在main里面使用,这跟你在main方法里new 一个ClassPathXmlApplicationContext不一样,所以一般不会这么做

l
leehomYe
是的,我刚刚也发现了自己问题的所在,我可以这样,我把这个类注入到spring容器中,即在类上添加一个(@Component),我这边生成了参数的get方法,在main方法中getbean()该类,再使用该类自动注入的参数,就可以了
0
kakai
kakai
为了使用spring的一小部分功能而使用spring,真的有必要吗?
返回顶部
顶部