精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

波多野结衣久草一区| 91麻豆精品久久久久蜜臀| 久久99导航| 好看的av在线| 欧美日韩黑人| 9191国产精品| 少妇人妻在线视频| 午夜看片在线免费| 国产盗摄一区二区三区| 欧美在线视频一区二区| 免费在线观看a级片| 老司机凹凸av亚洲导航| 欧美亚一区二区| 隔壁人妻偷人bd中字| 精品亚洲综合| 成人午夜精品一区二区三区| 国产精品久久久久久久av电影| 欧美三根一起进三p| 国产剧情在线观看一区| 日韩精品一区二区三区视频播放| www黄色av| 日本在线观看大片免费视频| 欧美韩国日本综合| 国产精品对白一区二区三区| 一本一道人人妻人人妻αv| 亚洲欧洲另类| 久久精品这里热有精品| 亚洲永久精品ww.7491进入| 亚洲91网站| 欧美色大人视频| 日韩久久一级片| 亚洲第一中文av| 一区二区三区在线免费观看视频 | 日本伦理一区二区三区| 第四色中文综合网| 欧美高清视频一二三区| 午夜激情福利在线| 中文字幕在线视频久| 一区二区三区四区不卡在线| 亚洲一区二区精品在线| 精品推荐蜜桃传媒| 94色蜜桃网一区二区三区| 亚洲综合成人婷婷小说| 国产又粗又黄又爽的视频| 日韩精品色哟哟| 日本一区二区三区在线播放| 伊人久久综合视频| 亚洲激情女人| 欧美高清自拍一区| 精品少妇theporn| 欧美激情 亚洲a∨综合| 久久久99免费视频| 日韩成人短视频| 99视频精品全部免费在线视频| 在线观看亚洲视频| 少妇视频在线播放| 欧美一区二区三区激情视频| 亚洲天堂色网站| 一区二区三区伦理片| 国产日韩视频在线| 中文日韩电影网站| 麻豆网址在线观看| 99视频精品全国免费| 欧美成在线观看| 欧美国产在线看| 韩国亚洲精品| 午夜欧美大片免费观看| 91porny在线| 性久久久久久| 国产精品久久久久久久久借妻| 国产免费a视频| 美国毛片一区二区三区| 成人亚洲欧美一区二区三区| 国产黄色片av| 成人av中文字幕| 久久久综合亚洲91久久98| 男生女生差差差的视频在线观看| 国产欧美综合色| 中文字幕一区二区中文字幕| 欧美色图天堂| 富二代精品短视频| 我看黄色一级片| 精品精品视频| 日韩精品亚洲元码| 国产精品麻豆免费版现看视频| 亚洲综合色站| 97精品视频在线观看| 69xxxx国产| 国内成人精品2018免费看| 国产成人精品一区二区三区福利 | av日韩一区二区三区| 日本在线影院| 欧美日韩视频在线一区二区| 中国老熟女重囗味hdxx| 亚洲盗摄视频| 久久影视免费观看| 一级片中文字幕| 国产真实乱偷精品视频免| 国模一区二区三区私拍视频| 91伦理视频在线观看| 亚洲综合视频网| av丝袜天堂网| 999久久久精品一区二区| 国产午夜精品全部视频播放| 福利所第一导航| 久久综合影音| 成人资源av| 777电影在线观看| 图片区小说区国产精品视频| 亚洲欧美日韩三级| 蜜桃精品wwwmitaows| 欧美xxxx做受欧美| 国产精品偷伦视频免费观看国产 | 青青草免费在线| 日韩一区在线看| 日韩a在线播放| 在线视频亚洲欧美中文| 伊人伊成久久人综合网小说| 日韩乱码人妻无码中文字幕| 激情国产一区二区| 日本不卡一区二区三区视频| 国产精品一品| 欧美一级免费大片| 大吊一区二区三区| 久久福利精品| 久久99精品国产一区二区三区| 久久精品视频免费看| 日本丶国产丶欧美色综合| 亚洲色图欧美另类| 88国产精品视频一区二区三区| 国产精品pans私拍| 天天躁日日躁狠狠躁喷水| 亚洲狼人国产精品| 99re6在线观看| 成人黄色小视频| 国产suv精品一区二区三区88区| 日韩在线观看视频一区二区三区| 一区二区三区四区在线播放| 色乱码一区二区三区在线| 欧洲视频一区| 国产精品成人免费视频| 欧美孕妇孕交xxⅹ孕妇交| 五月婷婷之综合激情| 888av在线| 在线观看不卡视频| 成人免费毛片糖心| 久久精品人人做人人爽电影蜜月| 国产精品一区二区三区免费| 男女在线观看视频| 精品免费99久久| 久久久久久久久97| 国产99久久久国产精品潘金 | 中文字幕在线视频播放| 欧美视频四区| 国产成人av电影在线| 色女人综合av| 精品裸体bbb| 色黄久久久久久| 国产精品久久久久久久一区二区| 国产精品乱码妇女bbbb| 亚洲一级免费观看| 天天做天天爱天天爽综合网| 成人伊人精品色xxxx视频| 久草免费在线| 精品欧美乱码久久久久久 | 久久成年人网站| 国产精品传媒精东影业在线 | av成人综合| 久久久久免费精品国产| 熟妇高潮一区二区三区| 疯狂欧美牲乱大交777| 91久久免费视频| 日本不卡一二三区黄网| 宅男噜噜99国产精品观看免费| 日韩午夜电影免费看| 欧美成人免费网| 欧美特黄一级视频| 色综合久久中文字幕综合网| 成熟人妻av无码专区| 九色综合狠狠综合久久| 免费网站在线观看视频| 欧美偷窥清纯综合图区| 国产精品电影网站| 黄网站在线播放| 欧美成人a在线| 国产成人高潮免费观看精品| 无码人妻丰满熟妇精品区| 欧美激情在线观看视频免费| 日韩av一卡二卡三卡| 国内揄拍国内精品久久| 欧美日韩精品免费看| 99综合久久| 国产91精品久久久久| av播放在线观看| 精品剧情v国产在线观看在线| 亚洲天堂视频网站| 国产精品国产自产拍高清av王其| 日本一级大毛片a一| 欧美亚洲在线| 黄色一级视频播放| 蜜臀91精品国产高清在线观看| 成人疯狂猛交xxx| 波多野结衣在线播放| 伊人一区二区三区久久精品| 好男人在线视频www| 欧美亚洲自拍偷拍| 日本五十路女优| 亚洲国产精品传媒在线观看| 国产成人精品一区二区三区在线观看| 亚久久调教视频| 成人一区二区av| 欧美偷拍综合| 国产美女精品久久久| 992tv国产精品成人影院| 久久久久久国产精品三级玉女聊斋 | 日韩激情美女| 日韩中文字幕视频| 免费av在线电影| 亚洲第一黄色网| 国产xxxx在线观看| 欧美日韩国产在线观看| 人妻 日韩精品 中文字幕| 亚洲综合一区在线| 四虎884aa成人精品| 国产婷婷色一区二区三区四区| 欧美xxxxx精品| 国产精品一色哟哟哟| 在线观看免费污视频| 视频一区欧美精品| www一区二区www免费| 精品动漫3d一区二区三区免费| 99久久久无码国产精品性色戒| 国产一区网站| 欧美系列一区| 天堂成人娱乐在线视频免费播放网站| 懂色一区二区三区av片| 国产日韩中文在线中文字幕| 国产区亚洲区欧美区| 97精品国产综合久久久动漫日韩| 日韩av片永久免费网站| 一区二区乱码| 8050国产精品久久久久久| a级大胆欧美人体大胆666| 欧美激情视频网| 中中文字幕av在线| 欧美理论片在线观看| 成人在线播放免费观看| 不卡av电影院| 亚洲无线看天堂av| 欧美高清电影在线看| 国产精品偷拍| 国语自产精品视频在免费| av手机在线观看| 91成人福利在线| 中文不卡1区2区3区| 日韩av免费看| 精品三级在线| 成人网址在线观看| 欧美一级片网址| av在线亚洲男人的天堂| baoyu135国产精品免费| 国内一区二区在线视频观看| 精品国产影院| 欧美日韩精品久久| 四季av在线一区二区三区| 欧美爱爱视频网站| 欧美深夜福利| 日韩精品xxxx| 日韩精品每日更新| 性生生活大片免费看视频| 国产一区二区三区高清播放| 少妇极品熟妇人妻无码| 91视视频在线观看入口直接观看www | 激情综合婷婷| 成人91视频| 无码日韩精品一区二区免费| 日韩和欧美的一区二区| 亚欧美无遮挡hd高清在线视频| 免费看日b视频| 亚洲视频www| 国产精品久久久毛片| 国产麻豆精品theporn| xxxx黄色片| 亚洲国产经典视频| 久久久精品人妻一区二区三区四| 精品久久久一区| 亚洲中文字幕在线观看| 精品国产sm最大网站免费看| 久久久资源网| 欧美伦理91i| 国产伦精品一区二区三区视频金莲| 国产精品一区二区久久精品| 亚洲视频一起| 婷婷亚洲婷婷综合色香五月| 在线观看日批视频| 中文字幕一区二区三| 久久久精品91| 在线观看欧美黄色| www.日韩在线观看| 国产亚洲激情在线| 欧美人与禽猛交乱配| 国产精品福利在线观看| 中文字幕日韩在线| 亚洲成人自拍视频| 亚洲激情女人| 欧美性受xxxx黒人xyx性爽| www欧美成人18+| 国产这里有精品| 色综合激情五月| 亚洲国产视频一区二区三区| 中文字幕在线亚洲| 黄色在线观看www| 成人中文字幕+乱码+中文字幕| 亚洲素人在线| 欧美黑人在线观看| 精品午夜久久福利影院| 中文字幕av网址| 亚洲成a人片综合在线| 怡春院在线视频| 亚洲区中文字幕| 国产精品69xx| 99在线观看| 91超碰成人| 91最新在线观看| 91丨国产丨九色丨pron| 九九视频在线免费观看| 欧美另类高清zo欧美| 成人午夜影视| 青青a在线精品免费观看| 狠狠一区二区三区| 中文字幕在线中文| 国产在线不卡一区| 无码人中文字幕| 欧美三级一区二区| 毛片网站在线观看| 欧洲精品久久久| 同性恋视频一区| 婷婷无套内射影院| 成人97人人超碰人人99| 欧美精品一区二区蜜桃| 欧美一区日韩一区| 国产二区三区在线| 91丨九色丨国产在线| 色综合久久一区二区三区| 九九视频精品在线观看| 日本一区二区三区国色天香 | 国产精品最新自拍| 国产真实乱人偷精品| 天天色综合天天| 天天插天天干天天操| 91精品国产自产91精品| 免费观看成人www动漫视频| 国产在线精品91| 91免费版在线| 国产一区免费看| 在线播放日韩av| 亚洲精品555| 9999在线观看| 国产成人福利片| 香蕉视频一区二区| 日韩电视剧在线观看免费网站 | 欧美一区免费| 日本人妻一区二区三区| 亚洲成人在线网站| 日本aaa在线观看| 国产精品观看在线亚洲人成网| 日韩久久精品| 日本中文字幕在线不卡| 亚洲国产综合在线| 日本一区视频| 国产精品视频网站| 女人天堂亚洲aⅴ在线观看| 中国特级黄色大片| 在线看一区二区| 麻豆最新免费在线视频| 91精品国产高清久久久久久91裸体| 欧美先锋影音| 亚洲一区二区三区蜜桃| 欧美日韩mp4| 欧美1—12sexvideos| 蜜桃传媒视频第一区入口在线看| 免费一区二区视频| 欧美又粗又大又长| 亚洲欧洲日产国产网站| 亚洲伊人精品酒店| av免费看网址| 国产精品欧美综合在线| 朝桐光av在线一区二区三区| 91a在线视频| 99久久精品费精品国产| 中文字幕一区三区久久女搜查官| 欧亚洲嫩模精品一区三区| 超碰在线免费播放| 久久av一区二区| 精品一区二区三区免费视频| 国产小视频在线观看免费| 国产亚洲欧美一区| 51亚洲精品| 一区二区三区视频网| 午夜av区久久|