美文网首页我爱编程
踩坑之xml 和 注解共用

踩坑之xml 和 注解共用

作者: 06d589e5c6d8 | 来源:发表于2018-04-13 12:28 被阅读0次

在xml 定义的 bean,然后 用 注解来修改 bean 的作用域是不起效果的,例子如下:

application-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config/>
    <context:property-placeholder/>

    <bean id="helloService" class="sample.xml.service.HelloWorldService"/>
    <bean id="application" class="sample.xml.SampleSpringXmlApplication"/>

</beans>

HelloWorldService .java

package sample.xml.service;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("prototype")// 这里是不起作用的
public class HelloWorldService {

    private int count = 0;

    HelloWorldService(){
        System.out.println("constructing");
    }

    public String getHelloMessage() {
        return "Hello "+ count++;
    }

}

main 入口

package sample.xml;

import java.util.Collections;

import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;
import sample.xml.service.HelloWorldService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;

public class SampleSpringXmlApplication implements CommandLineRunner {

    private static final String CONTEXT_XML = "classpath:/META-INF/application-context.xml";


    @Autowired
    ApplicationContext applicationContext;

    @Override
    public void run(String... args) {
        HelloWorldService helloWorldService = applicationContext.getBean(HelloWorldService.class);
        System.out.println( helloWorldService.getHelloMessage() );

        HelloWorldService helloWorldService2 = applicationContext.getBean(HelloWorldService.class);
        System.out.println( helloWorldService2.getHelloMessage() );
    }

    public static void main(String[] args) throws Exception {
        SpringApplication application = new SpringApplication();
        application.setSources(Collections.singleton(CONTEXT_XML));
        application.run(args);
    }

}

输出

一大坨输出blabla......
constructing // 只有一个初始化
2018-04-13 12:25:23.798  INFO 10464 --- [           main] sample.xml.SampleSpringXmlApplication    : Started SampleSpringXmlApplication in 0.688 seconds (JVM running for 1.228)
Hello 0
Hello 1
2018-04-13 12:25:23.820  INFO 10464 --- [       Thread-0] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@6e9a5ed8: startup date [Fri Apr 13 12:25:23 CST 2018]; root of context hierarchy

相关文章

网友评论

    本文标题:踩坑之xml 和 注解共用

    本文链接:https://www.haomeiwen.com/subject/eadckftx.html