spring boot 三:4.底层注解@ImportResource导入spring配置文件

spring boot 三:4.底层注解@ImportResource导入spring配置文件

1 前言

springboot的底层注解,经常会使用@AliasFor作为注解的value的别名,比如下面@ImportResource注解,既可以使用value,也可以使用locations,一般不同时存在,如果同时存在时,必须值相等,否则抛错:
在这里插入图片描述
如下配置类:
在这里插入图片描述
启动主程序类:
在这里插入图片描述
修改为同一个值时:
在这里插入图片描述
启动主程序类无误

2 使用

在配置类上,增加@ImportResource注解,是为了导入spring的xml形式的bean,注册spring的这些xml形式组件。

比如resources目录下,新建一个beans.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

        <bean id="lizhi_fruit" class="com.xiaoxu.domain.Fruit">
            <property name="fname" value="荔枝"/>
            <property name="price" value="17.9"/>
            <property name="count" value="999"/>
            <property name="dropDate" value="2022/01/11"/>
        </bean>

</beans>

实体类Fruit如下所示:

package com.xiaoxu.domain;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.Date;

/**
 * @author xiaoxu
 * @date 2022-01-07
 * Ymybatis:com.xiaoxu.domain.Fruit
 */

@Component
@ConfigurationProperties(prefix = "new-fruit")
public class Fruit {
    /**
     * 水果名称
     */
    private String fname;
    /**
     * 水果价格
     */
    private BigDecimal price;
    /**
     * 水果数目
     */
    private long count;

    /**
     * 水果过期时间
     */
    private Date dropDate;

    public Fruit() {
    }

    public Fruit(String fname, BigDecimal price, long count, Date dropDate) {
        this.fname = fname;
        this.price = price;
        this.count = count;
        this.dropDate = dropDate;
    }

    public Date getDropDate() {
        return dropDate;
    }

    public void setDropDate(Date dropDate) {
        this.dropDate = dropDate;
    }

    public String getFname() {
        return fname;
    }

    public void setFname(String fname) {
        this.fname = fname;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public long getCount() {
        return count;
    }

    public void setCount(long count) {
        this.count = count;
    }

    @Override
    public String toString() {
        return "水果{" +
                "fname='" + fname + '\'' +
                ", price=" + price +
                ", count=" + count +
                ", dropDate=" + dropDate +
                '}';
    }
}

配置类修改如下:

package com.xiaoxu.config;

import com.xiaoxu.domain.Fruit;
import com.xiaoxu.domain.User;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.*;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author xiaoxu
 * @date 2021-12-27
 * Ymybatis:com.xiaoxu.config.MyConfig
 */
//@Import({User.class})
@Configuration(proxyBeanMethods = false)
@ConditionalOnMissingBean(name = "my")
@ImportResource(value = "classpath:beans.xml",locations = "classpath:beans.xml")
public class MyConfig {
//    @Bean(name = "fruit")
    @Bean(name = "myfruit",value = "myfruit")
//    @ConditionalOnBean(name = "myuser")
    public Fruit getFruit() throws ParseException {
        Fruit fruit = new Fruit();
        fruit.setFname("桃子");
        fruit.setPrice(new BigDecimal("12.5"));
        fruit.setCount(120);
        SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(s.format(new Date()));
        String d = s.format(new Date());
        System.out.println(s.parse(d));
        fruit.setDropDate(s.parse(d));
        return fruit;
    }

    @Bean
    public User getUser(){
        User u=new User();
        u.setName("xiaoxu");
        u.setAge((byte)29);
        u.setMoney(new BigDecimal("10"));
        u.setId(1234);
        return u;
    }
}

修改主程序类,观察xml的lizhi_fruit组件是否注册成功:

package com.xiaoxu;

import com.xiaoxu.domain.User;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;

/**
 * @author xiaoxu
 * @date 2022-01-07
 * Ymybatis:com.xiaoxu.MainApplication
 */
@SpringBootApplication(scanBasePackages = {"com.xiaoxu"})
//@EnableAutoConfiguration
//@ComponentScan
//@SpringBootConfiguration
public class MainApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
        System.out.println("*******开始*********");
        User bean = run.getBean(User.class);
        boolean myfruit = run.containsBean("myfruit");
        System.out.println("是否存在组件myfruit:"+myfruit);
        boolean getuser = run.containsBean("getUser");
        System.out.println("是否存在组件myuser:"+getuser);
        boolean lizhi = run.containsBean("lizhi_fruit");
        System.out.println("是否存在组件lizhi:"+lizhi);
        System.out.println("*******结束*********");
    }
}

结果如下:

*******开始*********
是否存在组件myfruit:true
是否存在组件myuser:true
是否存在组件lizhi:true
*******结束*********
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值