SpringBoot 01: JavaConfig + @ImportResource + @PropertyResource

2022-12-11,,

springboot的前置知识:通过注解创建对象和读取配置文件

1. JavaConfig

设计思想

使用java类作为xml配置文件的替代,是配置spring容器的纯java的方式
可以创建java对象并把对象注入到spring容器中

注解实现

@Configuration : 放在一个类的上面,表示这个类是作为配置文件使用的
@Bean:放在返回值是对象的方法上,容器启动时,声明对象,并把对象注入到容器中
上面两个注解配套使用

代码实现

package com.example.springboot.configuration;

import com.example.springboot.model.Student;
import org.springframework.context.annotation.*; @Configuration
public class SpringConfig {
@Bean
public Student getStudent(){
Student student = new Student();
student.setName("橘子");
student.setAge(18);
return student;
} @Bean(name = "student")
public Student getStudentByBeanName(){
Student student = new Student();
student.setName("饺子");
student.setAge(21);
return student;
}
}

测试代码

package com.example.springboot.testspringconfig;

import com.example.springboot.configuration.SpringConfig;
import com.example.springboot.model.Student;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class TestSpringConfig {
@Test
public void testSpringConfig(){
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
Student student = (Student) applicationContext.getBean("student");
//未在@Bean中指定对象名称时,从方法名(小驼峰命名规范)来获取对象
//Student student = (Student) applicationContext.getBean("getStudent");
System.out.println("获取到的对象: " + student);
}
}

2. @ImportResource

设计思想

导入其他的xml配置文件, 等于在xml 使用如下import标签

<import resources="其他配置文件"/>

代码实现

SpringConfig类

package com.example.springboot.configuration;

import org.springframework.context.annotation.*;

@ImportResource(value = "classpath:applicationContext.xml")
public class SpringConfig { }

applicationContext.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 http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="cat" class="com.example.springboot.model.Cat">
<property name="catCard" value="0010"/>
<property name="catName" value="tomcat"/>
</bean>
</beans>

测试代码

package com.example.springboot.testspringconfig;

import com.example.springboot.configuration.SpringConfig;
import com.example.springboot.model.Cat;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class TestSpringConfig {
@Test
public void testImportResource(){
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
Cat cat = (Cat) applicationContext.getBean("cat");
System.out.println("获取到的对象: " + cat);
}
}

3. @PropertyResource

设计思想

读取properties属性配置文件,使用属性配置文件可以实现外部化配置

使用步骤

在resources目录下,创建properties文件, 使用 key=value 的格式提供数据
在@PropertyResource 指定properties文件的位置
使用在待注入值的变量上使用@Value(value="${key}")

需要用的其他注解

@Component:用在实体类上
@ComponentScan:SpringConfig类上
@Value:待注入值的属性上

代码实现

SpringConfig类

package com.example.springboot.configuration;

import com.example.springboot.model.Student;
import org.springframework.context.annotation.*; @PropertySource(value = "classpath:food.properties")
@ComponentScan(basePackages = "com.example.springboot.model")
public class SpringConfig {
}

food.properties

food.name=饺子
food.price=13

JiaoZi类

package com.example.springboot.model;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; @Component("jiaozi")
public class JiaoZi { @Value("${food.name}")
private String name;
@Value("${food.price}")
private double price; @Override
public String toString() {
return "JiaoZi{" +
"name='" + name + '\'' +
", price=" + price +
'}';
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public double getPrice() {
return price;
} public void setPrice(double price) {
this.price = price;
} public JiaoZi(String name, double price) {
this.name = name;
this.price = price;
} public JiaoZi() {
}
}

测试代码

package com.example.springboot.testspringconfig;

import com.example.springboot.configuration.SpringConfig;
import com.example.springboot.model.JiaoZi;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class TestSpringConfig { @Test
public void testPropertiesSource(){
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
JiaoZi jiaoZi = (JiaoZi) applicationContext.getBean("jiaozi");
System.out.println("food: " + jiaoZi);
}
}

SpringBoot 01: JavaConfig + @ImportResource + @PropertyResource的相关教程结束。

《SpringBoot 01: JavaConfig + @ImportResource + @PropertyResource.doc》

下载本文的Word格式文档,以方便收藏与打印。