“@Value 用法”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
第106行: 第106行:
 
</syntaxhighlight>输出:io.github.jihch.service.OrderService@6574a52c
 
</syntaxhighlight>输出:io.github.jihch.service.OrderService@6574a52c
  
这么用 @Value 就和 @Autowired、@Resource 一样的功能了
+
这么用 @Value 就和 @Autowired、@Resource 一样给属性注入了 bean 对象,因为 @Value 注解里使用 # 就表示 SpEL(Spring Expression,Spring 表达式)

2024年7月23日 (二) 13:14的版本

$ 注入配置文件参数

UserService.java

package io.github.jihch.service;

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

@Component
public class UserService {

	@Value("${name}")
	private String test;
	
	public void test() {
		System.out.println(test);
	}
	
}

AppConfig.java

package io.github.jihch;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.PropertySource;

@ComponentScan("io.github.jihch")
@PropertySource("classpath:spring.properties")
public class AppConfig {

}

spring.properties

name=zhangsan

Test.java

package io.github.jihch;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import io.github.jihch.service.UserService;

public class Test {

	public static void main(String[] args) {
		
		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
	
		UserService userService = applicationContext.getBean("userService", UserService.class);
		
		userService.test();
		
	}

}

输出:zhangsan 如果对应的 key 在 spring.properties 中不存在:

#name=zhangsan

则输出:${name}

直接注入字符串常量

如果是:@Value("name"):

package io.github.jihch.service;

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

@Component
public class UserService {

	@Value("name")
	private String test;
	
	public void test() {
		System.out.println(test);
	}
	
}

那就直接把“name”作为一个字符串注入到字符串属性 test 中,输出:name

# 注入 Bean 对象

package io.github.jihch.service;

import org.springframework.stereotype.Component;

@Component("name")
public class OrderService {

}
package io.github.jihch.service;

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

@Component
public class UserService {

	@Value("#{name}")
	private OrderService test;
	
	public void test() {
		System.out.println(test);
	}
	
}

输出:io.github.jihch.service.OrderService@6574a52c

这么用 @Value 就和 @Autowired、@Resource 一样给属性注入了 bean 对象,因为 @Value 注解里使用 # 就表示 SpEL(Spring Expression,Spring 表达式)