SpringBoot2:@Configuration 注解
@Configuration 这个注解的作用,告诉 springboot 这是一个配置类。配置类以及类里的方法都可以作为Bean。里面的方法用@Bean标记。
@Configuration 替换了繁琐的 bean.xml 配置文件,早期的 bean.xml 配置举例如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean name="user01" class="com.itheima.bean.User">
<property name="name" value="zhangsan"/>
<property name="age" value="18"/>
<property name="pet" value="Pet"/>
</bean> <bean name="Pet" class="com.itheima.bean.Pet">
<property name="name" value="tom"/>
</bean>
</beans>
@Configuration 包含 proxyBeanMethods 字段,其作用:是否返回单例模式,默认值是 true。
@Configuration(proxyBeanMethods=”false”) 则不检测直接返回新实例。使用时注意要先指定代理 Bean,然后多次调用 Bean 的方法,看返回值是否相等
// @Configuration(proxyBeanMethods = false)
Full模式:@Configuration默认使用Full模式,使用前检测是否存在实例,保证单例模式。适用于Bean之间存在依赖的情况
Lite模式:@Configuration(proxyBeanMethods = false)代表轻量模式,不检测直接返回结果。适用于Bean之间不存在依赖的情况
实例1:
需求:写两个JavaBean,用@Configuration,将Bean装入容器。并通过 @Configuration(proxyBeanMethods=”false”) 验证返回结果是否来自同一个实例。
结构目录:

写两个 Bean,user 和 pet。
package com.itheima.bean;
public class Pet {
String name;
public Pet() {
}
public Pet(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Pet{" +
"name='" + name + '\'' +
'}';
}
}
package com.itheima.bean;
public class User {
String name;
int age;
Pet pet;
public User() {
}
public User(String name,int age) {
this.name = name;
this.age = age;
}
public User(String name, int age, Pet pet) {
this.name = name;
this.age = age;
this.pet = pet;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Pet getPet() {
return pet;
}
public void setPet(Pet pet) {
this.pet = pet;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", pet=" + pet +
'}';
}
}
Bean的配置类:MyConfig.java,通过@Configuration和@Bean指定装配Bean
@Configuration(proxyBeanMethods = false)
public class MyConfig {
@Bean
public User user01(){ User zhangsan = new User("zhangsan", 18);
// zhangsan.setPet(pet01());
return zhangsan;
}
@Bean("tom")
public Pet pet01(){
return new Pet("tom");
}
}
测试代码:将 MyConfig.java 作为 Bean,将 @Configuration(proxyBeanMethod=false),多次调用 Bean 的方法,比较返回对象是否相等。
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run =
SpringApplication.run(MainApplication.class, args);
// String[] names = run.getBeanDefinitionNames();
// for (String name : names) {
// System.out.println(name);
// } //这个ProxyBeanMethod居然是先代理MyConfig这个bean,
// 再用bean调用其方法,测试bean的方法返回是否相等,我的天! MyConfig bean = run.getBean(MyConfig.class);
System.out.println(bean);
User user1 = bean.user01();
User user2 = bean.user01();
System.out.println(user1==user2); // 哥直接用run获取对应的 user01 bean,难怪反复测试都返回true
// User user01 = run.getBean("user01", User.class);
// User user02 = run.getBean("user01", User.class);
// System.out.println(user02==user01);
}
}
结果:false。因为 MyConfig 标记的注解是 @Configuration(proxyBeanMethods = false) 。
SpringBoot2:@Configuration 注解的更多相关文章
- SpringBoot2.0之@Configuration注解
SpringBoot2.0之@Configuration注解 本文转载自:https://www.javaman.cn/sb2/springboot-configuration 前面我们介绍了Spri ...
- springboot情操陶冶-@Configuration注解解析
承接前文springboot情操陶冶-SpringApplication(二),本文将在前文的基础上分析下@Configuration注解是如何一步一步被解析的 @Configuration 如果要了 ...
- [转]Spring注解-@Configuration注解、@Bean注解以及配置自动扫描、bean作用域
1.@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的<beans>,作用为:配置spring容器(应用上下文) package com.test.s ...
- Spring boot之SpringApplicationBuilder,@@Configuration注解,@Component注解
SpringApplicationBuilder: 该方法的作用是可以把项目打包成war包 需要配置启动类,pom.xml文件等,具体见:http://blog.csdn.net/linzhiqian ...
- Spring注解-@Configuration注解、@Bean注解以及配置自动扫描、bean作用域
1.@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的<beans>,作用为:配置spring容器(应用上下文) package com.test.s ...
- spring和springmvc中,Configuration注解Bean重复加载
问题:bean重复加载1.如下代码所示,开启Configuration注解,实现Bean代码注入,发现bean重复加载 @Configuration public class EhCacheConfi ...
- Spring5源码深度解析(一)之理解Configuration注解
代码地址:https://github.com/showkawa/spring-annotation/tree/master/src/main/java/com/brian 1.Spring体系结构 ...
- SpringBoot学习之@Configuration注解和@Bean注解
@Configuration 1.@Configuration注解底层是含有@Component ,所以@Configuration 具有和 @Component 的作用. 2.@Configurat ...
- 【记录】@Configuration注解作用 mybatis @Param作用
参考地址: 1:https://www.cnblogs.com/duanxz/p/7493276.html 2:https://www.wandouip.com/t5i91156/ 3:https:/ ...
- 配置类为什么要添加@Configuration注解呢?
配置类为什么要添加@Configuration注解呢? 本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 推荐阅读: Spring官网阅读 | 总结篇 Spring ...
随机推荐
- mysql索引的面试常问问题
- JAVA设计模式及其设计原则
设计模式: 设计模式是一套被反复使用的.多数人知晓的.经过分类编目的.代码设计经验的总结. 单例模式:在一个jvm虚拟机,要创建的对象控制成独一份:举例:统计单台虚拟机内的用户在线数 package ...
- 【线性DP】乌龟棋
#include<bits/stdc++.h> using namespace std; int a[400],b[5]; int dp[50][50][50][50]; int main ...
- 基于百度智能云api下的车牌识别系统
车牌识别在高速公路中有着广泛的应用,比如我们常见的电子收费(ETC)系统和交通违章车辆的检测,除此之外像小区或地下车库门禁也会用到,基本上凡是需要对车辆进行身份检测的地方都会用到. 简介 车牌识别系统 ...
- []Python][simple]Serialize data with Pickle and deserialize data from pickle
序列化 import pickle friend = {"Dan": [20, "Lodon", 123123], "Mary" : [24 ...
- VisualVM无法运行,修改配置文件
在VisualVM安装位置下找到etc目录修改etc目录下的visualvm.conf文件 加入配置 参数 指定JDK或JRE路径,如 visualvm_jdkhome="C:\xxx\ ...
- 快速排序(Java分治法)
快速排序(Java分治法) 文章目录 快速排序(Java分治法) 0. 分治策略 1.思路步骤 2.代码 3.复杂度分析 3.1 最好情况 3.2 最坏情况 3.3 平均情况 3.4 性能影响因素 4 ...
- win10无管理员权限下以压缩包方式安装JDK8
使用场景:如果在没有管理员权限的情况下,无法运行.exe文件,可以使用这种方式安装,本次把JDK安装到D:\jdk-8u152 一:获取JDK8的压缩包 1.JDK8 华为镜像地址 2.将下载好的ex ...
- scala apply方法和update方法
示例代码1 class TestApplyClass { def apply(param: String): String = { println("apply method called, ...
- MOBIUS: Towards the Next Generation of Query-Ad Matching in Baidu's Sponsored Search——百度下一代搜索广告系统
简介 传统的广告最终的呈现需要经过召回与排序两个阶段,百度的搜索架构则采用三层漏斗状,如图1所示.最上面的一层用于筛选出和用户查询最相关的一部分广告,将整个候选广告集从亿级降到千级:下面两层是排序阶段 ...