springboot-@Configuration


@Configuration

 

1、通過配置文件注入類

@Configuration

@PropertySource("classpath:config/redis.properties")

2、注冊bean

1)@Configuration+@Bean方式注冊

public class TestBean {

    private String username;
    private String url;
    private String password;

    public void sayHello() {
        System.out.println("TestBean sayHello...");
    }

    public String toString() {
        return "username:" + this.username + ",url:" + this.url + ",password:" + this.password;
    }

    public void start() {
        System.out.println("TestBean 初始化。。。");
    }

    public void cleanUp() {
        System.out.println("TestBean 銷毀。。。");
    }
}

@Configuration
public class TestConfiguration {
    public TestConfiguration() {
        System.out.println("TestConfiguration容器啟動初始化。。。");
    }

    // @Bean注解注冊bean,同時可以指定初始化和銷毀方法
    // @Bean(name="testBean",initMethod="start",destroyMethod="cleanUp")
    @Bean
    @Scope("prototype")
    public TestBean testBean() {
        return new TestBean();
    }
}

public class TestMain {
    public static void main(String[] args) {

        // @Configuration注解的spring容器加載方式,用AnnotationConfigApplicationContext替換ClassPathXmlApplicationContext
        ApplicationContext context = new AnnotationConfigApplicationContext(TestConfiguration.class);
         //獲取bean
        TestBean tb = (TestBean) context.getBean("testBean");
        tb.sayHello();
    }
}

2)@Configuration啟動容器+@ComponentScan+@Component注冊Bean
//添加注冊bean的注解
@Component
public class TestBean {

    private String username;
    private String url;
    private String password;

    public void sayHello() {
        System.out.println("TestBean sayHello...");
    }

    public String toString() {
        return "username:" + this.username + ",url:" + this.url + ",password:" + this.password;
    }

    public void start() {
        System.out.println("TestBean 初始化。。。");
    }

    public void cleanUp() {
        System.out.println("TestBean 銷毀。。。");
    }
}

@Configuration
//添加自動掃描注解,basePackages為TestBean包路徑
@ComponentScan(basePackages = "com.dxz.demo.configuration")
public class TestConfiguration {
    public TestConfiguration() {
        System.out.println("TestConfiguration容器啟動初始化。。。");
    }

    /*// @Bean注解注冊bean,同時可以指定初始化和銷毀方法
    // @Bean(name="testNean",initMethod="start",destroyMethod="cleanUp")
    @Bean
    @Scope("prototype")
    public TestBean testBean() {
        return new TestBean();
    }*/
}

public class TestMain {
    public static void main(String[] args) {

        // @Configuration注解的spring容器加載方式,用AnnotationConfigApplicationContext替換ClassPathXmlApplicationContext
        ApplicationContext context = new AnnotationConfigApplicationContext(TestConfiguration.class);
         //獲取bean
        TestBean tb = (TestBean) context.getBean("testBean");
        tb.sayHello();
    }
}

備注1:可以使用基於 Java 的配置來管理 bean 的生命周期。@Bean 支持兩種屬性,即 initMethod 和destroyMethod,這些屬性可用於定義生命周期方法。在實例化 bean 或即將銷毀它時,容器便可調用生命周期方法。生命周期方法也稱為回調方法,因為它將由容器調用。使用 @Bean 注釋注冊的 bean 也支持 JSR-250 規定的標准 @PostConstruct 和 @PreDestroy 注釋。如果您正在使用 XML 方法來定義 bean,那么就應該使用 bean 元素來定義生命周期回調方法。

 

備注2:可以用兩種方式獲取注解上下文

1)ApplicationContext context = new AnnotationConfigApplicationContext(TestConfiguration.class);

2)ApplicationContext ctx = new AnnotationConfigApplicationContext();

  ctx.register(AppContext.class)

 

備注3:@Configuration+@Bean注冊類時,如果有多個,則可以調用,相當於在application.xml中一個bean定義時引用另一個bean(注冊bean的先后順序)

 

備注4:如果是在controller這類受容器管理的類中調用,則直接如下定義即可使用

@Autowired

TestBean testBean;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM