精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Spring框架之基于Java的容器注解

開發 后端
本篇我們將介紹如何在Java代碼中使用注解來配置Spring容器。希望能夠幫助到你!

我們將介紹如何在Java代碼中使用注解來配置Spring容器。它包括:

  • Basic Concepts: @Bean and @Configuration。
  • Instantiating the Spring Container by Using 。
  • AnnotationConfigApplicationContext。
  • Using the @Bean Annotation。
  • Using the @Configuration annotation。
  • Composing Java-based Configurations。
  • Bean Definition Profiles。
  • PropertySource Abstraction。
  • Using @PropertySource。
  • Placeholder Resolution in Statements。

@Bean and @Configuration

@Bean注解用在一個方法上表示實例化、配置和初始化一個新對象,由Spring IoC容器管理。對于那些熟悉Spring的 XML配置的人來說,@Bean注解的作用與元素的作用相同。

用@Configuration來注解一個類,表明它的主要目的是作為一個bean定義的來源。此外,@Configuration類允許通過調用同一個類中的其他@Bean方法來定義Bean間的依賴關系。最簡單的@Configuration類如下:

@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
@Bean
public OtherService otherService() {
return new OtherService();
}
}

AnnotationConfigApplicationContext實例化容器

與實例化

ClassPathXmlApplicationContext時使用Spring XML文件作為輸入的方式相同,你可以在實例化AnnotationConfigApplicationContext時使用@Configuration類作為輸入。這使得Spring容器的使用完全不需要XML,如下例子:

public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
MyService myService = ctx.getBean(MyService.class);
myService.doStuff();
}

通過使用 register(Class...) 以編程方式構建容器

你可以通過使用無參數構造函數來實例化AnnotationConfigApplicationContext,然后使用 register() 方法來配置它。這種方法在以編程方式構建 AnnotationConfigApplicationContext 時特別有用。下面的例子展示了如何做到這一點。

public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(AppConfig.class, OtherConfig.class);
ctx.register(AdditionalConfig.class);
ctx.refresh();
MyService myService = ctx.getBean(MyService.class);
myService.doStuff();
}

@ComponentScan啟用組件掃描

為了啟用組件掃描,可以在@Configuration類做如下注釋。

@Configuration
@ComponentScan(basePackages = "com.acme")
public class AppConfig {
// ...
}

Bean的依賴

@Configuration
public class AppConfig {
@Bean
public TransferService transferService(AccountRepository accountRepository) {
return new TransferServiceImpl(accountRepository);
}
}

生命周期回調

任何用@Bean注解定義的類都支持常規的生命周期回調,并且可以使用JSR-250的@PostConstruct和@PreDestroy注解。如果一個bean實現了InitializingBean、DisposableBean或Lifecycle,它們各自的方法將被容器調用。

public class BeanOne {

public void init() {
// initialization logic
}
}
public class BeanTwo {

public void cleanup() {
// destruction logic
}
}
@Configuration
public class AppConfig {

@Bean(initMethod = "init")
public BeanOne beanOne() {
return new BeanOne();
}
@Bean(destroyMethod = "cleanup")
public BeanTwo beanTwo() {
return new BeanTwo();
}
}

Bean指定作用域

Bean默認的作用域是singleton,更多Bean作用域可參考Bean作用域章節。

@Configuration
public class MyConfiguration {
@Bean
@Scope("prototype")
public Encryptor encryptor() {
// ...
}
}

自定義bean名稱

默認情況下,配置類使用@Bean方法的名稱作為Bean的名稱。可以通過name屬性來自定義名稱,如下:

@Configuration
public class AppConfig {
@Bean("myThing")
public Thing thing() {
return new Thing();
}
}

Bean別名

@Configuration
public class AppConfig {
@Bean({"dataSource", "subsystemA-dataSource", "subsystemB-dataSource"})
public DataSource dataSource() {
// instantiate, configure and return DataSource bean...
}
}

Bean注入之間的依賴

@Configuration
public class AppConfig {
@Bean
public BeanOne beanOne() {
return new BeanOne(beanTwo());
}
@Bean
public BeanTwo beanTwo() {
return new BeanTwo();
}
}

@Import

@Import注解表示要導入一個或多個@Configuration類。在導入的@Configuration類中聲明的@Bean定義應該通過使用@Autowired注入來訪問。

@Configuration
public class ConfigA {
@Bean
public A a() {
return new A();
}
}
@Configuration
@Import(ConfigA.class)
public class ConfigB {
@Bean
public B b() {
return new B();
}
}

現在,在實例化上下文時不需要同時指定ConfigA類和ConfigB類,而只需要明確提供ConfigB:

public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(ConfigB.class);
// now both beans A and B will be available...
A a = ctx.getBean(A.class);
B b = ctx.getBean(B.class);
}

@ImportResource

Spring提供了一個@ImportResource注解,用于從applicationContext.xml文件中加載bean到應用上下文中。

@Configuration
@ImportResource("classpath:/com/acme/properties-config.xml")
public class AppConfig {
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource dataSource() {
return new DriverManagerDataSource(url, username, password);
}
}
<!-- properties-config.xml -->
<beans>
<context:property-placeholder location="classpath:/com/acme/jdbc.properties"/>
</beans>

@PropertySource

我們將討論如何使用@PropertySource來讀取屬性文件,并用@Value和Environment來顯示值。

@PropertySource注解為向Spring的環境添加PropertySource提供了一種方便的聲明性機制。要與@Configuration類一起使用。

假設我們從config.properties文件中讀取數據庫配置,并使用Environment將這些屬性值設置為DataSourceConfig類。

@Configuration
@PropertySource("classpath:config.properties")
public class ProperySourceDemo implements InitializingBean {
@Autowired
Environment env;
@Override
public void afterPropertiesSet() throws Exception {
setDatabaseConfig();
}
private void setDatabaseConfig() {
DataSourceConfig config = new DataSourceConfig();
config.setDriver(env.getProperty("jdbc.driver"));
config.setUrl(env.getProperty("jdbc.url"));
config.setUsername(env.getProperty("jdbc.username"));
config.setPassword(env.getProperty("jdbc.password"));
System.out.println(config.toString());
}
}

支持多個properties文件

@Configuration
@PropertySources({
@PropertySource("classpath:config.properties"),
@PropertySource("classpath:db.properties")
})
public class AppConfig {
//...
}

ApplicationContext

ApplicationContext實現了BeanFactory接口,并提供了如下功能:

  • 通過MessageSource接口,訪問i18n風格的消息。
  • 通過ResourceLoader接口訪問資源,如URL和文件。
  • 事件發布,即通過使用ApplicationEventPublisher接口,向實現ApplicationListener接口的bean發布。
  • 通過HierarchicalBeanFactory接口加載多個(分層的)上下文,讓每個上下文專注于一個特定的層,例如一個應用程序的Web層。

MessageSource 國際化

ApplicationContext接口擴展了一個名為MessageSource的接口,因此,它提供了國際化("i18n")功能。Spring還提供了HierarchicalMessageSource接口,它可以分層次地解析消息。

account.name=TestAccount
@Configuration
public class AppConfig {
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("config/messages");
return messageSource;
}
}
@Service
public class AccountService {
@Autowired
private MessageSource messageSource;

public void someMsg() {
messageSource.getMessage("account.name", null, Locale.ENGLISH);
//todo
}
}
責任編輯:姜華 來源: 今日頭條
相關推薦

2022-05-30 11:17:44

Spring容器配置

2022-05-30 09:32:07

Spring容器

2019-10-18 16:05:32

框架開發Java

2022-06-07 07:58:45

SpringSpring AOP

2009-06-19 09:52:46

Acegi安全框架Spring框架

2022-05-27 08:25:55

容器Spring

2022-06-08 08:04:28

Springservicerepository

2021-07-09 07:52:34

SpringContextEventListen

2022-02-19 07:41:36

Bean注解項目

2022-02-20 07:28:13

Spring注解用法

2009-06-19 17:17:40

Spring框架Java

2016-01-05 10:35:04

JavaSpringJavaConfig

2016-03-21 17:08:54

Java Spring注解區別

2009-05-11 10:27:32

Spring Batc配置工作劃分

2019-11-22 09:40:40

SpringJava編程語言

2009-12-09 09:57:05

ibmdwJavaPHP

2025-02-28 08:16:14

Spring框架注解

2024-04-02 09:32:08

Spring@Retry開發者

2011-07-19 09:38:41

一維數組Junit靜態成員

2025-08-04 02:25:00

點贊
收藏

51CTO技術棧公眾號

日韩大片在线| 成人影欧美片| 日韩电影在线免费看| 深夜成人在线观看| 亚洲欧洲国产视频| 欧美电影网站| 亚洲欧美另类在线| 精品一区久久久| 一二三区在线播放| 激情成人综合| 国产性猛交xxxx免费看久久| 三大队在线观看| 国产伦理精品| 自拍偷拍亚洲激情| 六十路精品视频| 国产精品无码AV| 亚洲精品123区| 中文字幕亚洲欧美一区二区三区| 极品白嫩少妇无套内谢| 日韩电影av| 亚洲一区二区三区在线播放| 欧美成人蜜桃| 亚洲伦理在线观看| 蜜臀久久久久久久| 韩国精品美女www爽爽爽视频| 国产人妻大战黑人20p| 国产自产一区二区| 亚洲一区网站| 欧美成人精品三级在线观看| 中文字幕国产专区| 一区二区三区亚洲变态调教大结局 | 欧美性感美女一区二区| 日韩久久精品一区| 国产又黄又猛又粗| 国模套图日韩精品一区二区| 一区二区国产盗摄色噜噜| 日本一区视频在线观看免费| 日韩在线观看视频一区二区三区| 精品亚洲欧美一区| 国产精品免费视频xxxx| 青青青国产在线| 欧美精品综合| 久久偷看各类女兵18女厕嘘嘘| 实拍女处破www免费看| 国产精品任我爽爆在线播放| 欧美一三区三区四区免费在线看| www.99在线| 日韩av大片站长工具| 精品久久久中文| 男人天堂a在线| caoporm免费视频在线| 国产精品久久精品日日| 色综合影院在线观看| 亚洲av激情无码专区在线播放| 国产白丝网站精品污在线入口| 国产欧美va欧美va香蕉在| 中文字幕在线日本| 久久精品系列| 日韩**中文字幕毛片| 日本va欧美va国产激情| 国产精品日韩精品欧美精品| 69精品小视频| 久草视频在线观| 国产欧美日韩亚洲一区二区三区| 午夜免费在线观看精品视频| 国产精品suv一区二区69| 亚洲午夜伦理| 国内精品久久久久| 男女视频免费看| 中文亚洲字幕| 国产a级全部精品| www.久久网| 久久激情综合网| 91精品免费视频| 国产成人三级一区二区在线观看一| 免费成人av在线播放| 国产精品视频自拍| 国产精品一二三四五区| 国产精品一二三区在线| 成人激情在线播放| www.av网站| 93久久精品日日躁夜夜躁欧美| 久久99影院| sese在线视频| 亚洲免费伊人电影| 国产精品久久久久9999爆乳| 在线中文字幕播放| 欧美午夜精品久久久久久孕妇| 黄色小视频免费网站| 欧州一区二区三区| 日韩激情视频在线播放| 在线看片中文字幕| 一区二区三区四区日韩| 性色av一区二区咪爱| 人人妻人人爽人人澡人人精品 | 色777狠狠狠综合伊人| 另类少妇人与禽zozz0性伦| 18精品爽视频在线观看| 男人的天堂亚洲在线| 国产精品一区二区三区免费视频| 国产成人三级在线播放| 久久夜色精品国产噜噜av| 亚洲一区二区三区在线观看视频| 羞羞的网站在线观看| 欧美日韩国产丝袜另类| 午夜免费看视频| 久久男人av| 久久精品国产69国产精品亚洲| 国产无精乱码一区二区三区| 日本最新不卡在线| 国产精选在线观看91| 91在线网址| 欧美日韩中文字幕综合视频 | 欧美亚韩一区二区三区| 美女视频一区二区三区| 官网99热精品| 九色porny在线| 色综合色狠狠天天综合色| 欧美国产日韩在线视频| 国产欧美日韩精品高清二区综合区| 久久99国产综合精品女同| 精品国产青草久久久久96| 丁香啪啪综合成人亚洲小说 | 欧美电影一区二区三区| 熟女丰满老熟女熟妇| 你懂的一区二区| 国产精品香蕉在线观看| 天堂中文资源在线| 亚洲妇熟xx妇色黄| 国产男女无遮挡猛进猛出| 欧美精品羞羞答答| 欧美在线视频一区| 好吊视频一区二区三区| 中文字幕亚洲不卡| 亚欧美在线观看| 免费看av成人| 3344国产精品免费看| 亚洲男人天堂久久| 一区二区三区四区高清精品免费观看 | 欧美jizzhd欧美| 色婷婷国产精品综合在线观看| 亚洲一级av无码毛片精品| 国产精品v日韩精品v欧美精品网站| 国产精品日日做人人爱| 黄色片在线看| 欧美午夜激情视频| 精品久久久久久中文字幕人妻最新| 一区二区亚洲| 国产精品播放| а√在线中文在线新版| 亚洲国产成人精品久久久国产成人一区| 亚洲成人生活片| 国产伦精品一区二区三区视频青涩| 椎名由奈jux491在线播放| 日韩成人综合网| 日韩在线观看你懂的| 一区二区精品视频在线观看| 国产精品久久久久久久第一福利| 日韩肉感妇bbwbbwbbw| 精品久久视频| 国产日韩在线视频| 99视频免费在线观看| 日韩无一区二区| 久久久久99精品| 99视频精品在线| av免费播放网址| 国产精品一区二区99| 国产精品国产三级国产aⅴ浪潮| 久久免费看视频| 欧美视频一区二区三区| 中文字幕求饶的少妇| 国产一区二区免费看| 欧美黑人在线观看| 天堂日韩电影| 国产精品xxx视频| 理论片午午伦夜理片在线播放| 欧美一区二区三区四区视频| 国产一级在线观看视频| 91麻豆123| 第四色婷婷基地| 欧美日本一区二区视频在线观看 | 亚洲精品综合网| 欧美日韩亚洲激情| 最新日韩免费视频| 成人午夜碰碰视频| 亚洲爆乳无码专区| 先锋资源久久| 国产三级精品在线不卡| 天然素人一区二区视频| 大胆欧美人体视频| 色呦呦中文字幕| 欧美亚洲高清一区二区三区不卡| 我要看一级黄色录像| 成人免费不卡视频| 手机看片福利日韩| 国产在线欧美| 色噜噜色狠狠狠狠狠综合色一| 自拍偷拍欧美日韩| 8050国产精品久久久久久| 91网页在线观看| 精品国产一区二区三区久久影院| 亚洲 欧美 日韩 在线| 亚洲日本在线a| 欧美狂猛xxxxx乱大交3| 国产一区二区三区免费| 欧美 日韩精品| 在线精品国产| 日韩资源av在线| 操欧美女人视频| 国产综合在线观看视频| 松下纱荣子在线观看| 欧美精品一本久久男人的天堂| 美州a亚洲一视本频v色道| 欧美成人性福生活免费看| 中文无码精品一区二区三区| 午夜电影一区二区| 久久福利免费视频| 欧美激情一二三区| 欧美亚一区二区三区| 国产成人精品亚洲777人妖| 天天操天天摸天天爽| 日韩午夜免费| 日韩成人三级视频| 91精品福利| 亚洲午夜精品久久久中文影院av | 亚洲精品一区久久久久久| 国产精品久久欧美久久一区| 一本到不卡免费一区二区| 久久婷婷一区二区| 亚洲另类春色国产| 久草手机视频在线观看| 国产女同互慰高潮91漫画| 最近中文字幕无免费| 成人一道本在线| 97免费公开视频| 国产中文一区二区三区| 欧美伦理片在线观看| 久久婷婷影院| 六月激情综合网| 免费永久网站黄欧美| 国产va亚洲va在线va| 欧美日韩第一区| 日本丰满大乳奶| 亚洲影视一区二区三区| 中文字幕中文字幕99 | 日韩一区二区av| 在线观看麻豆| 日韩在线观看免费高清完整版| 国产高清在线看| 在线观看亚洲视频| 午夜小视频在线| xxx成人少妇69| 草莓福利社区在线| 欧美高清一级大片| 里番在线播放| 欧美一二三视频| 欧美成人黑人| 国产精品99一区| 香蕉成人在线| 亚洲最大的网站| 国产+成+人+亚洲欧洲在线 | 久久国产电影| 在线视频不卡国产| 欧美在线高清| 男人日女人视频网站| 国产精品呻吟| 国产福利一区视频| 免费在线观看视频一区| 中文字幕12页| 懂色av一区二区夜夜嗨| 99re久久精品国产| 国产日韩欧美综合一区| 亚洲欧美综合7777色婷婷| 亚洲日本欧美天堂| 好吊操这里只有精品| 在线视频综合导航| 亚洲香蕉在线视频| 欧美mv和日韩mv的网站| 日韩有码电影| 日韩在线观看成人| 黄色美女视频在线观看| 国产福利视频一区二区| 色8久久久久| 国产一区国产精品| 国产影视一区| 4444在线观看| 老鸭窝毛片一区二区三区| 黄色手机在线视频| 东方欧美亚洲色图在线| xxxx日本免费| 一二三四社区欧美黄| 四虎成人在线观看| 91精品国产综合久久久久久久久久| 国产高清免费av| 亚洲女同精品视频| 国产原厂视频在线观看| 国产69久久精品成人看| 国产一区精品福利| 国产综合动作在线观看| 国产精品99久久久久久动医院| 日韩国产一级片| 免费久久99精品国产| 国产+高潮+白浆+无码| 国产精品色婷婷久久58| 精品91久久久| 日韩一级在线观看| 久久久久久久穴| 国产又黄又大又粗的视频| 一区二区三区成人| 人人妻人人爽人人澡人人精品| 日韩欧美国产小视频| 成人免费在线电影| 91国偷自产一区二区三区的观看方式| 午夜精品久久久久久毛片| 欧洲精品久久| 国自产拍偷拍福利精品免费一| jizz大全欧美jizzcom| 久久日韩粉嫩一区二区三区| 久久久久噜噜噜亚洲熟女综合| 欧美影院一区二区| 日韩av成人| 久久人人爽人人| 欧美区一区二区| 亚洲欧洲一区二区在线观看| 国产精品日韩久久久| 日本50路肥熟bbw| 亚洲日本韩国一区| 91theporn国产在线观看| 亚洲视频国产视频| 免费毛片b在线观看| 成人黄视频免费| 自拍视频亚洲| 久久久久久久久久毛片| 中文文精品字幕一区二区| 日本免费在线观看视频| 日韩成人中文字幕| 国产亚洲成av人片在线观看| 国产成人精品日本亚洲11 | 中文字幕亚洲精品在线| 日韩欧美在线网站| 黄av在线播放| 亚洲a区在线视频| 91综合久久| 成人综合久久网| 中文字幕中文在线不卡住| 亚洲视频在线观看一区二区| 一区二区三区四区视频| 韩国三级一区| 日韩av高清在线播放| 久久精品麻豆| 91社区视频在线观看| 欧美色男人天堂| 在线观看免费黄视频| 成人av番号网| 午夜国产精品视频| 久久久久久久久久影视| 亚洲亚洲精品在线观看| 色婷婷中文字幕| 日本成人黄色片| 青青草97国产精品麻豆| 999在线观看| 亚洲精品一二三区| 免费看av毛片| 日产日韩在线亚洲欧美| 97久久视频| 国模大尺度视频| 性欧美疯狂xxxxbbbb| 青青草视频在线观看| 国产精品99久久久久久人| 我不卡影院28| 9.1在线观看免费| 91国产精品成人| 久久精品视频观看| 国产精品国产亚洲精品看不卡15| aⅴ色国产欧美| 黄色片在线观看免费| 3d成人h动漫网站入口| 92久久精品| 亚洲精品一区二区三区四区五区| 看片的网站亚洲| 亚洲国产精一区二区三区性色| 亚洲精品中文字幕有码专区| 伦一区二区三区中文字幕v亚洲| 成人手机在线播放| 99视频有精品| 夜夜嗨av禁果av粉嫩avhd| 欧美激情综合亚洲一二区| 美女亚洲一区| 爽爽爽在线观看| 精品国产91久久久| 快射视频在线观看| 久久亚洲精品欧美| 8av国产精品爽爽ⅴa在线观看| 在线电影av不卡网址| 亚洲视频自拍| 日本精品免费在线观看| 国产精品久久久久久久久搜平片| 人妻少妇一区二区三区| 国产精品久久久久不卡| 在线观看一区|