Bean Java配置
Spring 系列教程
- Spring 框架介绍
- Spring 框架模块
- Spring开发环境搭建(Eclipse)
- 创建一个简单的Spring应用
- Spring 控制反转容器(Inversion of Control – IOC)
- 理解依赖注入(DI – Dependency Injection)
- Bean XML 配置(1)- 通过XML配置加载Bean
- Bean XML 配置(2)- Bean作用域与生命周期回调方法配置
- Bean XML 配置(3)- 依赖注入配置
- Bean XML 配置(4)- 自动装配
- Bean 注解(Annotation)配置(1)- 通过注解加载Bean
- Bean 注解(Annotation)配置(2)- Bean作用域与生命周期回调方法配置
- Bean 注解(Annotation)配置(3)- 依赖注入配置
- Bean Java配置
- Spring 面向切面编程(AOP)
- Spring 事件(1)- 内置事件
- Spring 事件(2)- 自定义事件
前面介绍了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,可以通过:
- 给一个方法加@Bean注解
- 方法返回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);
Bean Java配置的更多相关文章
- Bean XML 配置(4)- 自动装配
		Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ... 
- Bean XML 配置(3)- 依赖注入配置
		Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ... 
- Bean XML 配置(2)- Bean作用域与生命周期回调方法配置
		系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Contro ... 
- Bean XML 配置(1)- 通过XML配置加载Bean
		系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Contro ... 
- 使用 Java 配置进行 Spring bean 管理--转
		概述 众所周知,Spring 框架是控制反转 (IOC) 或依赖性注入 (DI) 模式的推动因素,而这种推动是通过基于容器的配置实现的.过去,Spring 允许开发人员使用基于 XML 的配置,通过利 ... 
- Spring的Java配置方式—@Configuration和@Bean实现Java配置
		Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.@Configuration 和 @BeanSpring的Java配置方式是通过 @Configuration 和 @Be ... 
- spring 配置 Java配置类装配bean
		https://www.cnblogs.com/chenbenbuyi/p/8457700.html 自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应 ... 
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring Bean的配置及常用属性
		作为 Spring 核心机制的依赖注入,改变了传统的编程习惯,对组件的实例化不再由应用程序完成,转而交由 Spring 容器完成,在需要时注入应用程序中,从而对组件之间依赖关系进行了解耦.这一切都离不 ... 
- Java开发学习(三)----Bean基础配置及其作用范围
		一.bean基础配置 对于bean的基础配置如下 <bean id="" class=""/> 其中,bean标签的功能.使用方式以及id和clas ... 
随机推荐
- HTML的几个注意点
			一.HTML 1.HTML5有哪些新特性?新增的标签有哪些? 新特性: 语义标签——语义化标签使得页面的内容结构化,见名知义 增强型表单——拥有多个新的表单 Input 输入类型.这些新特性提供了更好 ... 
- windows驱动开发-设备扩展
			设备对象Device_Object记录通用设备信息,另外一些信息记录在设备扩展里,设备扩展由程序员自己定义,由程序员指定内容和大小,由I/O管理器创建,并保存在非分页内存中. 驱动程序中,尽量避免使用 ... 
- [经验] Cocos Creator使用笔记 --- 调用不同脚本下的函数
			因为 JavaScript 不同于 Java, 想要调用不同文件的函数的话不能直接 ClassName object = new ClassName(); object.function(param) ... 
- LCS(Longest Common Subsequence)最长公共子序列
			最长公共子序列(LCS)是一个在一个序列集合中(通常为两个序列)用来查找所有序列中最长子序列的问题.这与查找最长公共子串的问题不同的地方是:子序列不需要在原序列中占用连续的位置 .最长公共子序列问题是 ... 
- 090、Java中String类之判断两个int型整数是否相等
			01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ... 
- leetcode236 Lowest Common Ancestor of a Binary Tree
			""" Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in ... 
- [AHK]输入法状态提示,中文状态提示“中”,英文状态提示“EN”[转]
			测试中发现使用小鹤双拼,如果不是使用shift切换中英文,效果不理想,留下此文章做个标记 https://www.autoahk.com/archives/8755 输入法状态提示,中文状态提示&qu ... 
- 题解 loj3050 「十二省联考 2019」骗分过样例
			CASE \(1\sim 3\) \(n\)组测试数据,每次输入一个数\(x\),求\(19^x\). 测试点\(1\),\(x=0,1,\dots n-1\),可以直接递推. 测试点\(2\)要开l ... 
- Python--unique()与nunique()函数
			参考:https://www.cnblogs.com/xxswkl/p/11009059.html 1 unique() 统计list中的不同值时,返回的是array.它有三个参数,可分别统计不同的量 ... 
- Day4 - H - Following Orders POJ - 1270
			Order is an important concept in mathematics and in computer science. For example, Zorn's Lemma stat ... 
