Spring 系列教程


前面介绍了Bean的XML配置方法,从Spring 3.0开始,可以使用java代码配置Bean,替代XML配置。

Java配置与注解配置不同,Java配置是把Java代码文件当作配置文件,注解配置是在实际Java类中使用注解设置依赖关系。

Java配置也会用到一些注解,主要有:@Configuration@ComponentScan@Bean

1. 通过@Configuration注解创建Java配置类

@Configuration注解标注的类是配置类,用于配置Bean之间依赖关系。

@Import注解允许从另一个配置Java/XML文件加载bean定义。

示例:SpringConfig.java

package com.qikegu.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ComponentScan; @Configuration // 表明这是个Bean的Java配置类
public class SpringConfig {
}

2. 通过@Bean注解定义Bean

要定义一个Bean,可以通过:

  1. 给一个方法加@Bean注解
  2. 方法返回Bean实例

Spring容器会注册这个Bean,并将方法名作为Bean ID。

示例:SpringConfig.java

package com.qikegu.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
public class SpringConfig { // 定义 App Bean
@Bean(initMethod = "init", destroyMethod = "close" ) // 指定初始化回调,销毁回调
@Scope("prototype") // 设置Bean作用域
public App app() { // Bean ID = app
return new App(); // 返回App Bean
}
}

3. 注入Bean依赖关系

可以通过让一个Bean方法调用另一个Bean方法注入依赖项。

示例:SpringConfig.java

package com.qikegu.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
public class SpringConfig { // 定义 App Bean
@Bean
public App app() {
return new App(logger()); // 调用Bean方法logger()注入Logger Bean实例
} /* @Bean
public App app() {
App app = new App(); Service[] services = {database(), logger(), mail()};
app.setServices(services);
app.setMainService(services[1]);
app.setId(1234);
return app;
} */ // 定义 Database Bean
@Bean
public Database database() {
return new Database();
} // 定义 Logger Bean
@Bean
public Logger logger() {
return new Logger();
} // 定义 Mail Bean
@Bean
public Mail mail() {
return new Mail();
}
}

4. 读取配置类

可以使用AnnotationConfigApplicationContext读取配置类。

示例:Test.java

package com.qikegu.demo.config;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Test {
public static void main(String[] args) {
// 使用`AnnotationConfigApplicationContext`读取配置类
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
}
}

5. 通过Spring容器获取bean

示例:

App app = context.getBean("app", App.class);

最新文章

  1. iOS通用的MVC模式项目框架MobileProject
  2. [转]Java Thread Dump 性能分析
  3. 夺命雷公狗---DEDECMS----24dedecms让网站头部分离
  4. 引擎设计跟踪(九.14.2e) DelayLoaded DLLs (/DELAYLOAD)
  5. hdoj 1061 Rightmost Digit【快速幂求模】
  6. python s12 day3
  7. 洛谷 P1412 经营与开发
  8. JS左侧菜单-02
  9. Windows快捷键大全(从XP到win8.1)
  10. maven 项目发布时,无法引用 修改的domain 问题
  11. LeetCode 404. Sum of Left Leaves (左子叶之和)
  12. 【Unity3D技术文档翻译】第1.5篇 本地使用 AssetBundles
  13. 作用域和闭包(二)this
  14. Docker(十四)-Docker四种网络模式
  15. Liunx软Raid实现
  16. ACM-ICPC 2018 沈阳赛区网络预赛 K题
  17. (转)以太坊(Ethereum ETH)的奖励机制
  18. 利用webpack手动构建vue工程
  19. ps自由变换以及再次变换快捷键
  20. Hadoop(HA)分布式集群部署

热门文章

  1. 与Python的第一次见面
  2. python deepcopy的替代方案
  3. js 实现去重
  4. [Android]ListView中分割线的设置
  5. springcloud-alibaba手写负载均衡的坑,采用restTemplate,不能添加@loadbalanced注解,否则采用了robbin
  6. mysqlworkbench导入sql文件
  7. 通过css 居中div的几种常用方法
  8. FBV CBV
  9. eclipse生成mybatis的逆向工程-mybatis代码自动生成
  10. Tasks、 activity 及 activity stack - 人间奇迹(转)