第3章 装配Bean---高级装配--笔记3
来源:互联网 发布:淘宝逆战解封 编辑:程序博客网 时间:2024/06/10 21:23
概述:
Spring一些高级特性
- Spring profile : 让bean活起来
- 条件化的bean声明:过滤bean
- 自动装配与歧义性: 请给我一个精准的bean
- bean的作用域: 正确行使的权利
- SpringEL表达式: Spring自己的语言
SpringEL表达式 --减少硬编码
提供两种方式:
属性占位(Property placeholder)
Spring表达式语言(SpEL)
1.占位符进行注入
package learn.chapter3.javaConfig;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.PropertySource;import org.springframework.core.env.Environment;import learn.chapter2.BlankDisc;@Configuration@PropertySource("classpath:app.properties")public class ExpressiveConfig {@AutowiredEnvironment env;@Beanpublic BlankDisc disc(){return new BlankDisc(env.getProperty("disc.title"),env.getProperty("disc.artist"));}}总结:主要是注解@PropertySource("配置文件的路径"), 配置文件的属性将会注入到Environment中
app.properties文件
disc.title=hellodisc.artist=adele
package learn.chapter3;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import learn.chapter2.BlankDisc;import learn.chapter3.javaConfig.ExpressiveConfig;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes={ExpressiveConfig.class})public class ConditionTest2 {@Autowiredprivate BlankDisc blankDisc;@Testpublic void getPropertyValue(){System.out.println(blankDisc.toString());;}}
package learn.chapter2;import java.util.List;public class BlankDisc implements CompactDisc {private String title;private String artist;private List<String> tracks;public BlankDisc(String title, String artist) {super();this.title = title;this.artist = artist;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getArtist() {return artist;}public void setArtist(String artist) {this.artist = artist;}public List<String> getTracks() {return tracks;}public void setTracks(List<String> tracks) {this.tracks = tracks;}@Overridepublic String toString() {return "BlankDisc [title=" + title + ", artist=" + artist + ", tracks=" + tracks + "]";}public void play() {System.out.println("专辑为" + title + "\t 歌手为:" + artist);if(null!=tracks && tracks.size() > 0){for (String track : tracks){System.out.println("---磁道: " + track);}}}}
结果为:
BlankDisc [title=hello, artist=adele, tracks=null]
深入学习Spring的Enviroment
environment提供默认值和类型转换功能
@Bean
public BlankDisc disc(){
return new BlankDisc(
env.getProperty("disc.title", "海阔天空"),
env.getProperty("disc.artist", "beyond")
);
}
<T> T getProperty(String key, Class<T> targetType, T defaultValue);
targetType就是目标类,defaultValue:默认值
例如:
int connectionCount = env.getProperty("db.connection.count", Integer.class, 30); //转为为Integer,默认值为30
如果要某个属性必须要输入
env.getRequiredProperty();方法
env.containsProperty() 判断是否存在对应的属性;
env.getPropertyAsClass() 将属性解析成一个类 已经被废弃了
String[] getActiveProfiles() 返回激活profile名称的数组
String[] getDefaultProfiles() 返回默认profile名称的数组
boolean acceptsProfiles(String ... profiles) 如果environment支持给定的profile的话,就返回true
在xml中可以通过${disc.title} 引用属性
也可以通过注解@Value将配置文件属性注入变量中
public BlankDisc(@Value("${disc.title}") String title,@Value("${disc.artist}") String artist){
this.title = title;
this.artist = artist
}
为了使用占位符的特性,注入一个解析类
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer(){
return new PropertySourcesPlaceholderConfigurer();
}
这个是遇见最长的java类,哈哈
如果xml配置文件需要加上
<context:property-placeholder/>
2.SpEL拥有很多特性,包括:
- 使用bean的ID来引用bean
- 调用方法和访问对象的属性
- 对值进行算术、关系和逻辑运算
- 正则表达式匹配
- 集合操作。
这个需要细细研究才行。。。。。。。未完待续
- 第3章 装配Bean---高级装配--笔记3
- 第3章 装配Bean---高级装配--笔记1
- 第3章 装配Bean---高级装配--笔记2
- 第2章 装配Bean---java显示装配---笔记3
- 第3章 高级装配
- 第2章 装配Bean---xml显示装配---笔记4
- 第2章 装配Bean(笔记)
- 第2章 装配Bean---笔记1
- Spring学习笔记(六) --- 装配Bean之高级装配
- 第2章 装配Bean
- Spring Bean 高级装配
- spring(3)高级装配
- 第2章 装配Bean---xml和javaConfig混合使用装配---笔记5
- 第2章 装配Bean---@Autowired注解---笔记2
- 第三章 高级Bean的装配
- Spring-3 自动装配bean
- Spring笔记---装配Bean
- SpringInAction第3版学习日记(1)-装配Bean
- 解密:Linux与Android的关系
- oracle监听程序当前无法识别
- 信号上篇
- 从AILD与bindService谈Binder进程间通信原理(上)
- input限制3位小数输入
- 第3章 装配Bean---高级装配--笔记3
- 运行pip报错:Fatal error in launcher: Unable to create process using '"'
- Spring缓存注解@Cache使用
- 结合sklearn进行特征工程
- 网易云音乐搜索引擎 python+whoosh---(1)背景和环境介绍
- SpringMVC使用@ResponseBody注解返回中文字符串乱码的问题
- CDC与HDC的区别以及二者之间的转换
- 复杂链表的复制
- 利用git快速部署远程服务器