要想让@Value注解获得properties文件当中的值,第一步需要Spring容器加载properties文件。
这就需要在配置类里面使用@PropertySoource注解来知道properties文件的路径了。
配置类代码:
package com.oxygen.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@ComponentScan({"com.oxygen.dao","com.oxygen.service"})
@PropertySource("jdbc.properties")
public class SpringConfig {
}
此时@Value注解的写法是:
@Value("${jdbc.mysql.password}")
private String password;
示例代码:
package com.oxygen.service.impl;
import com.oxygen.dao.BookDao;
import com.oxygen.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service
public class BookServiceImpl implements BookService {
@Value("2011000991")
private int bookSN;
@Value("${jdbc.mysql.password}")
private String password;
//注意:没有setter方法Autowired也能自动装配
@Autowired
@Qualifier("bookDao")
private BookDao bookDao;
public void save() {
System.out.println("Book Service save...");
System.out.println("Book SN:"+bookSN);
System.out.println("数据库密码:"+password);
bookDao.save();
}
}
@PropertySource注解的不能使用星号(*)作为properties文件的通配符,因为没有任何文件可以用星号作为文件名。
多个properties文件要用数组各种,中间用逗号隔开。
@PropertySource可以加classpath:
@Configuration
@ComponentScan({"com.oxygen.dao","com.oxygen.service"})
@PropertySource("classpath:jdbc.properties")
public class SpringConfig {
}
浙公网安备 33010602011771号